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 | 4407d87 | 2016-10-19 10:52:02 -0700 | [diff] [blame] | 5 | *Project Status*: 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 | ab9edb1 | 2016-10-17 13:01:00 -0700 | [diff] [blame] | 7 | [Open new issue](https://github.com/google/oss-fuzz/issues/new) for questions or feedback. |
Mike Aizatsky | 7273285 | 2016-10-17 12:59:36 -0700 | [diff] [blame] | 8 | |
Mike Aizatsky | 25a86da | 2016-10-25 14:33:39 -0700 | [diff] [blame^] | 9 | Quick Links: [New Library Guide](docs/new_library.md) | [Project List](docs/projects.md) | |
| 10 | |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 11 | ## Goals |
| 12 | |
| 13 | Oss-fuzz aims to make common open source software more secure by |
| 14 | combining modern white-box fuzzing techniques together with scalable |
| 15 | distributed running. |
| 16 | |
| 17 | At 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) |
| 21 | provides distributed fuzzer execution environment and reporting. |
| 22 | |
| 23 | ## Background |
| 24 | |
| 25 | [Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known |
| 26 | technique for uncovering certain types of programming errors in software. |
| 27 | Many detectable errors (e.g. buffer overruns) have real security |
| 28 | implications. |
| 29 | |
| 30 | Our previous experience applying [libFuzzer](http://llvm.org/docs/LibFuzzer.html) |
| 31 | to do [guided in-process fuzzing of Chrome components](https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html) |
| 32 | has proved very successful. |
| 33 | |
| 34 | |
| 35 | ## Process Overview |
| 36 | |
| 37 | The 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 | |
| 57 | See [Life of a Bug](life_of_a_bug.md) for more information about handling bugs. |
| 58 | |
| 59 | ## Accepting New Targets |
| 60 | |
| 61 | To be accepted to oss-fuzz, a target must be an open-source project with either |
| 62 | a significant user base or it has to be critical to a global IT infrastructure. |
| 63 | |
| 64 | To 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 | |
| 80 | Following Google's standard [disclosure policy](https://googleprojectzero.blogspot.com/2015/02/feedback-and-data-driven-updates-to.html) |
| 81 | oss-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 Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 92 | ## Documentation |
| 93 | |
| 94 | * [New Library Guide](docs/new_library.md) walks through steps necessary to add fuzzers to an open source project. |
Mike Aizatsky | 3e3dcd2 | 2016-09-27 11:59:07 -0700 | [diff] [blame] | 95 | * [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 Aizatsky | ef4d3ae | 2016-10-06 13:59:17 -0700 | [diff] [blame] | 99 | * [Project List](docs/projects.md) lists OSS projects integrated with oss-fuzz. |
Oliver Chang | 5d4f10f | 2016-10-17 10:23:28 -0700 | [diff] [blame] | 100 | * [Life of a bug](docs/life_of_a_bug.md) |
Mike Aizatsky | 4028e81 | 2016-10-19 10:53:00 -0700 | [diff] [blame] | 101 | * [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 Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 103 | |
Oliver Chang | a25bf35 | 2016-10-07 18:28:27 -0700 | [diff] [blame] | 104 | ## Build status |
| 105 | [Build status](https://oss-fuzz-build-logs.storage.googleapis.com/status.html) |
| 106 | |
Mike Aizatsky | 2681964 | 2016-10-06 14:02:52 -0700 | [diff] [blame] | 107 | ## 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 Moroz | 539cbab | 2016-10-10 15:22:23 +0200 | [diff] [blame] | 111 | [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] | 112 | [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 Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 115 | ## References |
Kostya Serebryany | e751c6c | 2016-10-17 16:40:10 -0700 | [diff] [blame] | 116 | * [libFuzzer documentation](http://libfuzzer.info) |
| 117 | * [libFuzzer tutorial](http://tutorial.libfuzzer.info) |
Mike Aizatsky | 4407d87 | 2016-10-19 10:52:02 -0700 | [diff] [blame] | 118 | * [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/) |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 119 | |