blob: 720522a9f13478a0d2bd487f58650f988d7cfa3b [file] [log] [blame] [view]
Mike Aizatsky3986fa32016-09-14 09:44:10 -07001# oss-fuzz
2
Mike Aizatsky25a86da2016-10-25 14:33:39 -07003> Fuzzing Open Source Software
Mike Aizatsky3986fa32016-09-14 09:44:10 -07004
Mike Aizatsky4407d872016-10-19 10:52:02 -07005*Project Status*: We are preparing the project for the first public release. Documentation and smoothing the process is our main priority.
Mike Aizatsky3986fa32016-09-14 09:44:10 -07006
Mike Aizatskyab9edb12016-10-17 13:01:00 -07007[Open new issue](https://github.com/google/oss-fuzz/issues/new) for questions or feedback.
Mike Aizatsky72732852016-10-17 12:59:36 -07008
Mike Aizatsky25a86da2016-10-25 14:33:39 -07009Quick Links: [New Library Guide](docs/new_library.md) | [Project List](docs/projects.md) |
10
Mike Aizatsky8f24df72016-10-25 14:31:45 -070011## Goals
12
13Oss-fuzz aims to make common open source software more secure by
14combining modern white-box fuzzing techniques together with scalable
15distributed running.
16
17At the first stage of the project we plan to combine
18[libFuzzer](http://llvm.org/docs/LibFuzzer.html) with various `clang`
19[sanitizers](https://github.com/google/sanitizers).
20[ClusterFuzz](https://blog.chromium.org/2012/04/fuzzing-for-security.html)
21provides distributed fuzzer execution environment and reporting.
22
23## Background
24
25[Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known
26technique for uncovering certain types of programming errors in software.
27Many detectable errors (e.g. buffer overruns) have real security
28implications.
29
30Our previous experience applying [libFuzzer](http://llvm.org/docs/LibFuzzer.html)
31to do [guided in-process fuzzing of Chrome components](https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html)
32has proved very successful.
33
34
35## Process Overview
36
37The following process is used for targets in oss-fuzz:
38
39- a target is accepted to oss-fuzz.
40- oss-fuzz build server build target fuzzers regularly and submits them to
41 ClusterFuzz for execution.
42- ClusterFuzz continuously executes target fuzzers
43- when fuzzing uncovers an issue, ClusterFuzz creates an internal testcase.
44- issues are automatically triaged and filed in the oss-fuzz [testcase issue
45 tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list).
46 The issue is visible to *oss-fuzz engineers only*.
47 ([Example issue](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9).)
48- if the target project has a defined process for reporting security issues,
49 we will follow it, otherwise we will cc library contact engineers on an issue.
50 The issue becomes visible to *CCed people*.
51- library engineers fix the issue and land the fix upstream.
52- fuzzing infrastructure automatically verifies the fix, adds a comment and
53 closes the issue.
54- after the issue is fixed or after 90 days since reporting has passed the issue
55 becomes *public*.
56
57See [Life of a Bug](life_of_a_bug.md) for more information about handling bugs.
58
59## Accepting New Targets
60
61To be accepted to oss-fuzz, a target must be an open-source project with either
62a significant user base or it has to be critical to a global IT infrastructure.
63
64To submit a new target to oss-fuzz:
65- create a pull request and provide the following information:
66 * project site and details
67 * source code repository location
68 * a link to the project security issue reporting process *OR*
69 * an e-mail of the engineering contact person to be CCed on issue. This
70 has to be an established project committer e-mail (present in VCS logs)
71 If this is not you, the committer has to acknowledge theirself.
72 This e-mail will also be publicly listed in our [Projects](projects.md)
73 page.
74- once accepted by an oss-fuzz project member, follow the [New Library Guide](new_library.md)
75 to write the code.
76
77
78## Disclosure Guidelines
79
80Following Google's standard [disclosure policy](https://googleprojectzero.blogspot.com/2015/02/feedback-and-data-driven-updates-to.html)
81oss-fuzz will adhere to following disclosure principles:
82 - **90-day deadline**. After notifying library authors, we will open reported
83 issues in 90 days, or sooner if the fix is released.
84 - **Weekends and holidays**. If a deadline is due to expire on a weekend or
85 US public holiday, the deadline will be moved to the next normal work day.
86 - **Grace period**. We will have a 14-day grace period. If a 90-day deadline
87 will expire but library engineers let us know before the deadline that a
88 patch is scheduled for release on a specific day within 14 days following
89 the deadline, the public disclosure will be delayed until the availability
90 of the patch.
91
Mike Aizatsky3986fa32016-09-14 09:44:10 -070092## Documentation
93
94* [New Library Guide](docs/new_library.md) walks through steps necessary to add fuzzers to an open source project.
Mike Aizatsky3e3dcd22016-09-27 11:59:07 -070095* [Running and Building Fuzzers](docs/building_running_fuzzers.md) documents the process for fuzzers that are
96 *part of target project* source code repository.
97* [Running and Building External Fuzzers](docs/building_running_fuzzers_external.md) documents the process for fuzzers that are
98 *part of oss-fuzz* source code repository.
Mike Aizatskyef4d3ae2016-10-06 13:59:17 -070099* [Project List](docs/projects.md) lists OSS projects integrated with oss-fuzz.
Oliver Chang5d4f10f2016-10-17 10:23:28 -0700100* [Life of a bug](docs/life_of_a_bug.md)
Mike Aizatsky4028e812016-10-19 10:53:00 -0700101* [Chrome's Efficient Fuzzer Guide](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/+/HEAD/efficient_fuzzer.md)
102 while contains some chrome-specifics, is an excellent documentation on making your fuzzer better.
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700103
Oliver Changa25bf352016-10-07 18:28:27 -0700104## Build status
105[Build status](https://oss-fuzz-build-logs.storage.googleapis.com/status.html)
106
Mike Aizatsky26819642016-10-06 14:02:52 -0700107## Bounties
108
109* freetype2:
110[9](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9&can=1&q=&colspec=ID%20Type%20Component%20Status%20Priority%20Milestone%20Owner%20Summary),
Max Moroz539cbab2016-10-10 15:22:23 +0200111[10](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10&can=1&q=&colspec=ID%20Type%20Component%20Status%20Priority%20Milestone%20Owner%20Summary),
Mike Aizatsky26819642016-10-06 14:02:52 -0700112[36](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36&can=1&q=&colspec=ID%20Type%20Component%20Status%20Priority%20Milestone%20Owner%20Summary)
113
114
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700115## References
Kostya Serebryanye751c6c2016-10-17 16:40:10 -0700116* [libFuzzer documentation](http://libfuzzer.info)
117* [libFuzzer tutorial](http://tutorial.libfuzzer.info)
Mike Aizatsky4407d872016-10-19 10:52:02 -0700118* [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/)
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700119