blob: e6e76433ce6aea4db9e062e242259d6fdbea7d40 [file] [log] [blame] [view]
Kostya Serebryany8454ca72016-10-25 18:41:41 -07001# oss-fuzz - Continuous Fuzzing for Open Source Software
Mike Aizatsky3986fa32016-09-14 09:44:10 -07002
Mike Aizatskyd2db6a12016-10-25 14:36:24 -07003> *Status*: Beta. 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 -07004
Mike Aizatskya95b41b2016-10-25 16:36:29 -07005[FAQ](docs/faq.md)
Mike Aizatskyb6652b52016-10-25 16:52:27 -07006| [New Target Guide](targets/README.md)
7| [Targets List](targets/README.md)
Mike Aizatsky72732852016-10-17 12:59:36 -07008
Mike Aizatsky92511cd2016-10-25 14:36:06 -07009
10[Create New Issue](https://github.com/google/oss-fuzz/issues/new) for questions or feedback.
Mike Aizatsky25a86da2016-10-25 14:33:39 -070011
Mike Aizatsky8f24df72016-10-25 14:31:45 -070012## Goals
13
14Oss-fuzz aims to make common open source software more secure by
15combining modern white-box fuzzing techniques together with scalable
Kostya Serebryany4b6e7032016-10-25 18:21:41 -070016distributed execution.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070017
18At the first stage of the project we plan to combine
19[libFuzzer](http://llvm.org/docs/LibFuzzer.html) with various `clang`
20[sanitizers](https://github.com/google/sanitizers).
21[ClusterFuzz](https://blog.chromium.org/2012/04/fuzzing-for-security.html)
22provides distributed fuzzer execution environment and reporting.
23
24## Background
25
26[Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known
27technique for uncovering certain types of programming errors in software.
28Many detectable errors (e.g. buffer overruns) have real security
29implications.
30
31Our previous experience applying [libFuzzer](http://llvm.org/docs/LibFuzzer.html)
32to do [guided in-process fuzzing of Chrome components](https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html)
33has proved very successful.
34
35
36## Process Overview
37
38The following process is used for targets in oss-fuzz:
39
40- a target is accepted to oss-fuzz.
41- oss-fuzz build server build target fuzzers regularly and submits them to
42 ClusterFuzz for execution.
43- ClusterFuzz continuously executes target fuzzers
44- when fuzzing uncovers an issue, ClusterFuzz creates an internal testcase.
45- issues are automatically triaged and filed in the oss-fuzz [testcase issue
Mike Aizatsky42928b32016-10-25 14:49:25 -070046 tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list).
47 [Example issue](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9).
Mike Aizatsky557e4482016-10-25 16:40:47 -070048 ([Why different tracker?](docs/faq.md#why-do-you-use-a-different-issue-tracker-for-reportig-bugs-in-fuzz-targets))
Mike Aizatsky8f24df72016-10-25 14:31:45 -070049- if the target project has a defined process for reporting security issues,
Mike Aizatsky0d2c7f92016-10-25 14:59:45 -070050 we will follow it, otherwise we will cc target engineers on an issue.
51- engineers fix the issue and land the fix upstream.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070052- fuzzing infrastructure automatically verifies the fix, adds a comment and
53 closes the issue.
Mike Aizatsky0d2c7f92016-10-25 14:59:45 -070054- after the issue is fixed or after 90 days since reporting has passed, the issue
Mike Aizatsky8f24df72016-10-25 14:31:45 -070055 becomes *public*.
56
Mike Aizatsky42928b32016-10-25 14:49:25 -070057The following table summarizes issue visibility through the process:
58
59| Issue State | Visibility |
60|----------|------------|
61| New | oss-fuzz engineers |
Kostya Serebryany8f34de82016-10-25 18:24:42 -070062| Reported | oss-fuzz engineers + everyone CC'ed on the bug |
Mike Aizatsky42928b32016-10-25 14:49:25 -070063| Fixed & Verified | public |
64| Lapsed (90 days since report) | public |
Mike Aizatsky8f24df72016-10-25 14:31:45 -070065
66## Accepting New Targets
67
Kostya Serebryany7053f0f2016-10-25 18:34:38 -070068In order to be accepted to oss-fuzz, an open-source project must
69have a significant user base and/or be critical to the global IT infrastructure.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070070
71To submit a new target to oss-fuzz:
72- create a pull request and provide the following information:
73 * project site and details
74 * source code repository location
75 * a link to the project security issue reporting process *OR*
76 * an e-mail of the engineering contact person to be CCed on issue. This
Mike Aizatskye7b8a082016-10-25 14:58:44 -070077 has to be an e-mail with google account that belongs to an
Mike Aizatsky7e497062016-10-25 15:01:11 -070078 established project committer (according to VCS logs).
79 If this is not you or address differs from VCS, an informal e-mail verification will be required.
Mike Aizatskyb6652b52016-10-25 16:52:27 -070080 This e-mail will also be publicly listed in our [Targets](targets/README.md)
Mike Aizatsky8f24df72016-10-25 14:31:45 -070081 page.
Mike Aizatskya95b41b2016-10-25 16:36:29 -070082- once accepted by an oss-fuzz project member, follow the [New Target Guide](docs/new_target.md)
Mike Aizatsky8f24df72016-10-25 14:31:45 -070083 to write the code.
84
85
Kostya Serebryanye9be2cf2016-10-25 18:39:20 -070086## Bug Disclosure Guidelines
Mike Aizatsky8f24df72016-10-25 14:31:45 -070087
88Following Google's standard [disclosure policy](https://googleprojectzero.blogspot.com/2015/02/feedback-and-data-driven-updates-to.html)
89oss-fuzz will adhere to following disclosure principles:
Mike Aizatskya95b41b2016-10-25 16:36:29 -070090 - **90-day deadline**. After notifying target authors, we will open reported
Mike Aizatsky8f24df72016-10-25 14:31:45 -070091 issues in 90 days, or sooner if the fix is released.
92 - **Weekends and holidays**. If a deadline is due to expire on a weekend or
93 US public holiday, the deadline will be moved to the next normal work day.
94 - **Grace period**. We will have a 14-day grace period. If a 90-day deadline
Mike Aizatskya95b41b2016-10-25 16:36:29 -070095 will expire but upstream engineers let us know before the deadline that a
Mike Aizatsky8f24df72016-10-25 14:31:45 -070096 patch is scheduled for release on a specific day within 14 days following
97 the deadline, the public disclosure will be delayed until the availability
98 of the patch.
99
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700100## Documentation
101
Mike Aizatskya95b41b2016-10-25 16:36:29 -0700102* [New Target Guide](docs/new_target.md) walks through steps necessary to add new targets to oss-fuzz.
Mike Aizatsky3e3dcd22016-09-27 11:59:07 -0700103* [Running and Building Fuzzers](docs/building_running_fuzzers.md) documents the process for fuzzers that are
104 *part of target project* source code repository.
105* [Running and Building External Fuzzers](docs/building_running_fuzzers_external.md) documents the process for fuzzers that are
106 *part of oss-fuzz* source code repository.
Mike Aizatskyb6652b52016-10-25 16:52:27 -0700107* [Targets List](targets/README.md) lists OSS targets added to oss-fuzz.
Mike Aizatsky4028e812016-10-19 10:53:00 -0700108* [Chrome's Efficient Fuzzer Guide](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/+/HEAD/efficient_fuzzer.md)
109 while contains some chrome-specifics, is an excellent documentation on making your fuzzer better.
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700110
Oliver Changa25bf352016-10-07 18:28:27 -0700111## Build status
112[Build status](https://oss-fuzz-build-logs.storage.googleapis.com/status.html)
113
Mike Aizatsky26819642016-10-06 14:02:52 -0700114## Bounties
115
116* freetype2:
117[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 +0200118[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 -0700119[36](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36&can=1&q=&colspec=ID%20Type%20Component%20Status%20Priority%20Milestone%20Owner%20Summary)
120
121
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700122## References
Kostya Serebryanye751c6c2016-10-17 16:40:10 -0700123* [libFuzzer documentation](http://libfuzzer.info)
124* [libFuzzer tutorial](http://tutorial.libfuzzer.info)
Mike Aizatsky4407d872016-10-19 10:52:02 -0700125* [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/)
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700126