Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 1 | # oss-fuzz |
| 2 | |
Mike Aizatsky | 25a86da | 2016-10-25 14:33:39 -0700 | [diff] [blame] | 3 | > Fuzzing Open Source Software |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 4 | |
Mike Aizatsky | d2db6a1 | 2016-10-25 14:36:24 -0700 | [diff] [blame] | 5 | > *Status*: Beta. We are preparing the project for the first public release. Documentation and smoothing the process is our main priority. |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 6 | |
Mike Aizatsky | a95b41b | 2016-10-25 16:36:29 -0700 | [diff] [blame] | 7 | [FAQ](docs/faq.md) |
Mike Aizatsky | b6652b5 | 2016-10-25 16:52:27 -0700 | [diff] [blame^] | 8 | | [New Target Guide](targets/README.md) |
| 9 | | [Targets List](targets/README.md) |
Mike Aizatsky | 7273285 | 2016-10-17 12:59:36 -0700 | [diff] [blame] | 10 | |
Mike Aizatsky | 92511cd | 2016-10-25 14:36:06 -0700 | [diff] [blame] | 11 | |
| 12 | [Create New Issue](https://github.com/google/oss-fuzz/issues/new) for questions or feedback. |
Mike Aizatsky | 25a86da | 2016-10-25 14:33:39 -0700 | [diff] [blame] | 13 | |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 14 | ## Goals |
| 15 | |
| 16 | Oss-fuzz aims to make common open source software more secure by |
| 17 | combining modern white-box fuzzing techniques together with scalable |
| 18 | distributed running. |
| 19 | |
| 20 | At the first stage of the project we plan to combine |
| 21 | [libFuzzer](http://llvm.org/docs/LibFuzzer.html) with various `clang` |
| 22 | [sanitizers](https://github.com/google/sanitizers). |
| 23 | [ClusterFuzz](https://blog.chromium.org/2012/04/fuzzing-for-security.html) |
| 24 | provides distributed fuzzer execution environment and reporting. |
| 25 | |
| 26 | ## Background |
| 27 | |
| 28 | [Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known |
| 29 | technique for uncovering certain types of programming errors in software. |
| 30 | Many detectable errors (e.g. buffer overruns) have real security |
| 31 | implications. |
| 32 | |
| 33 | Our previous experience applying [libFuzzer](http://llvm.org/docs/LibFuzzer.html) |
| 34 | to do [guided in-process fuzzing of Chrome components](https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html) |
| 35 | has proved very successful. |
| 36 | |
| 37 | |
| 38 | ## Process Overview |
| 39 | |
| 40 | The following process is used for targets in oss-fuzz: |
| 41 | |
| 42 | - a target is accepted to oss-fuzz. |
| 43 | - oss-fuzz build server build target fuzzers regularly and submits them to |
| 44 | ClusterFuzz for execution. |
| 45 | - ClusterFuzz continuously executes target fuzzers |
| 46 | - when fuzzing uncovers an issue, ClusterFuzz creates an internal testcase. |
| 47 | - issues are automatically triaged and filed in the oss-fuzz [testcase issue |
Mike Aizatsky | 42928b3 | 2016-10-25 14:49:25 -0700 | [diff] [blame] | 48 | tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list). |
| 49 | [Example issue](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9). |
Mike Aizatsky | 557e448 | 2016-10-25 16:40:47 -0700 | [diff] [blame] | 50 | ([Why different tracker?](docs/faq.md#why-do-you-use-a-different-issue-tracker-for-reportig-bugs-in-fuzz-targets)) |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 51 | - if the target project has a defined process for reporting security issues, |
Mike Aizatsky | 0d2c7f9 | 2016-10-25 14:59:45 -0700 | [diff] [blame] | 52 | we will follow it, otherwise we will cc target engineers on an issue. |
| 53 | - engineers fix the issue and land the fix upstream. |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 54 | - fuzzing infrastructure automatically verifies the fix, adds a comment and |
| 55 | closes the issue. |
Mike Aizatsky | 0d2c7f9 | 2016-10-25 14:59:45 -0700 | [diff] [blame] | 56 | - after the issue is fixed or after 90 days since reporting has passed, the issue |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 57 | becomes *public*. |
| 58 | |
Mike Aizatsky | 42928b3 | 2016-10-25 14:49:25 -0700 | [diff] [blame] | 59 | The following table summarizes issue visibility through the process: |
| 60 | |
| 61 | | Issue State | Visibility | |
| 62 | |----------|------------| |
| 63 | | New | oss-fuzz engineers | |
Mike Aizatsky | e67a95b | 2016-10-25 14:52:52 -0700 | [diff] [blame] | 64 | | Reported | oss-fuzz engineers + people CC'ed on the bug | |
Mike Aizatsky | 42928b3 | 2016-10-25 14:49:25 -0700 | [diff] [blame] | 65 | | Fixed & Verified | public | |
| 66 | | Lapsed (90 days since report) | public | |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 67 | |
| 68 | ## Accepting New Targets |
| 69 | |
| 70 | To be accepted to oss-fuzz, a target must be an open-source project with either |
| 71 | a significant user base or it has to be critical to a global IT infrastructure. |
| 72 | |
| 73 | To submit a new target to oss-fuzz: |
| 74 | - create a pull request and provide the following information: |
| 75 | * project site and details |
| 76 | * source code repository location |
| 77 | * a link to the project security issue reporting process *OR* |
| 78 | * an e-mail of the engineering contact person to be CCed on issue. This |
Mike Aizatsky | e7b8a08 | 2016-10-25 14:58:44 -0700 | [diff] [blame] | 79 | has to be an e-mail with google account that belongs to an |
Mike Aizatsky | 7e49706 | 2016-10-25 15:01:11 -0700 | [diff] [blame] | 80 | established project committer (according to VCS logs). |
| 81 | If this is not you or address differs from VCS, an informal e-mail verification will be required. |
Mike Aizatsky | b6652b5 | 2016-10-25 16:52:27 -0700 | [diff] [blame^] | 82 | This e-mail will also be publicly listed in our [Targets](targets/README.md) |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 83 | page. |
Mike Aizatsky | a95b41b | 2016-10-25 16:36:29 -0700 | [diff] [blame] | 84 | - once accepted by an oss-fuzz project member, follow the [New Target Guide](docs/new_target.md) |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 85 | to write the code. |
| 86 | |
| 87 | |
| 88 | ## Disclosure Guidelines |
| 89 | |
| 90 | Following Google's standard [disclosure policy](https://googleprojectzero.blogspot.com/2015/02/feedback-and-data-driven-updates-to.html) |
| 91 | oss-fuzz will adhere to following disclosure principles: |
Mike Aizatsky | a95b41b | 2016-10-25 16:36:29 -0700 | [diff] [blame] | 92 | - **90-day deadline**. After notifying target authors, we will open reported |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 93 | issues in 90 days, or sooner if the fix is released. |
| 94 | - **Weekends and holidays**. If a deadline is due to expire on a weekend or |
| 95 | US public holiday, the deadline will be moved to the next normal work day. |
| 96 | - **Grace period**. We will have a 14-day grace period. If a 90-day deadline |
Mike Aizatsky | a95b41b | 2016-10-25 16:36:29 -0700 | [diff] [blame] | 97 | will expire but upstream engineers let us know before the deadline that a |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 98 | patch is scheduled for release on a specific day within 14 days following |
| 99 | the deadline, the public disclosure will be delayed until the availability |
| 100 | of the patch. |
| 101 | |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 102 | ## Documentation |
| 103 | |
Mike Aizatsky | a95b41b | 2016-10-25 16:36:29 -0700 | [diff] [blame] | 104 | * [New Target Guide](docs/new_target.md) walks through steps necessary to add new targets to oss-fuzz. |
Mike Aizatsky | 3e3dcd2 | 2016-09-27 11:59:07 -0700 | [diff] [blame] | 105 | * [Running and Building Fuzzers](docs/building_running_fuzzers.md) documents the process for fuzzers that are |
| 106 | *part of target project* source code repository. |
| 107 | * [Running and Building External Fuzzers](docs/building_running_fuzzers_external.md) documents the process for fuzzers that are |
| 108 | *part of oss-fuzz* source code repository. |
Mike Aizatsky | b6652b5 | 2016-10-25 16:52:27 -0700 | [diff] [blame^] | 109 | * [Targets List](targets/README.md) lists OSS targets added to oss-fuzz. |
Mike Aizatsky | 4028e81 | 2016-10-19 10:53:00 -0700 | [diff] [blame] | 110 | * [Chrome's Efficient Fuzzer Guide](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/+/HEAD/efficient_fuzzer.md) |
| 111 | while contains some chrome-specifics, is an excellent documentation on making your fuzzer better. |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 112 | |
Oliver Chang | a25bf35 | 2016-10-07 18:28:27 -0700 | [diff] [blame] | 113 | ## Build status |
| 114 | [Build status](https://oss-fuzz-build-logs.storage.googleapis.com/status.html) |
| 115 | |
Mike Aizatsky | 2681964 | 2016-10-06 14:02:52 -0700 | [diff] [blame] | 116 | ## Bounties |
| 117 | |
| 118 | * freetype2: |
| 119 | [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 Moroz | 539cbab | 2016-10-10 15:22:23 +0200 | [diff] [blame] | 120 | [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 Aizatsky | 2681964 | 2016-10-06 14:02:52 -0700 | [diff] [blame] | 121 | [36](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36&can=1&q=&colspec=ID%20Type%20Component%20Status%20Priority%20Milestone%20Owner%20Summary) |
| 122 | |
| 123 | |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 124 | ## References |
Kostya Serebryany | e751c6c | 2016-10-17 16:40:10 -0700 | [diff] [blame] | 125 | * [libFuzzer documentation](http://libfuzzer.info) |
| 126 | * [libFuzzer tutorial](http://tutorial.libfuzzer.info) |
Mike Aizatsky | 4407d87 | 2016-10-19 10:52:02 -0700 | [diff] [blame] | 127 | * [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/) |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 128 | |