inferno-chromium | e1bb702 | 2016-11-16 09:56:10 -0800 | [diff] [blame] | 1 | # OSS-Fuzz - continuous fuzzing of open source software |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 2 | |
Mike Aizatsky | d2db6a1 | 2016-10-25 14:36:24 -0700 | [diff] [blame] | 3 | > *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] | 4 | |
Mike Aizatsky | a95b41b | 2016-10-25 16:36:29 -0700 | [diff] [blame] | 5 | [FAQ](docs/faq.md) |
Mike Aizatsky | 5ded722 | 2016-10-26 11:16:30 -0700 | [diff] [blame] | 6 | | [New Target Guide](docs/new_target.md) |
Mike Aizatsky | 6e8e29e | 2016-10-26 11:49:53 -0700 | [diff] [blame] | 7 | | [Reproducing](docs/reproducing.md) |
Mike Aizatsky | b6652b5 | 2016-10-25 16:52:27 -0700 | [diff] [blame] | 8 | | [Targets List](targets/README.md) |
Oliver Chang | 9848e9e | 2016-11-04 16:03:00 -0700 | [diff] [blame] | 9 | | [Targets issue tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list) |
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 | |
Kostya Serebryany | b48c72b | 2016-11-18 16:47:25 -0800 | [diff] [blame^] | 14 | ## Why OSS-Fuzz? |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 15 | |
| 16 | [Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known |
| 17 | technique for uncovering certain types of programming errors in software. |
| 18 | Many detectable errors (e.g. buffer overruns) have real security |
| 19 | implications. |
| 20 | |
Kostya Serebryany | b48c72b | 2016-11-18 16:47:25 -0800 | [diff] [blame^] | 21 | We successfully deployed |
| 22 | [guided in-process fuzzing of Chrome components](https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html) |
| 23 | and now want to share the experience and the service with the openssource community. |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 24 | |
Kostya Serebryany | b48c72b | 2016-11-18 16:47:25 -0800 | [diff] [blame^] | 25 | OSS-Fuzz aims to make common open source software more secure by |
| 26 | combining modern fuzzing techniques and scalable |
| 27 | distributed execution. |
| 28 | |
| 29 | At the first stage of the project we use |
| 30 | [libFuzzer](http://llvm.org/docs/LibFuzzer.html) with |
| 31 | [Sanitizers](https://github.com/google/sanitizers). More fuzzing engines will be added later. |
| 32 | [ClusterFuzz](docs/clusterfuzz.md) |
| 33 | provides distributed fuzzer execution environment and reporting. |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 34 | |
| 35 | ## Process Overview |
| 36 | |
inferno-chromium | e1bb702 | 2016-11-16 09:56:10 -0800 | [diff] [blame] | 37 | The following process is used for targets in OSS-Fuzz: |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 38 | |
Kostya Serebryany | 0291572 | 2016-11-18 15:48:16 -0800 | [diff] [blame] | 39 | - A maintainer of an opensource project or an outside volunteer creates |
| 40 | one or more [Fuzz Target](http://libfuzzer.info/#fuzz-target) |
| 41 | and [integrates](docs/ideal_integration.md) it with the project's build and test system. |
| 42 | - These targets are [accepted to OSS-Fuzz](docs/new_target.md). |
| 43 | - When [ClusterFuzz](docs/clusterfuzz.md) finds a bug, an issue is automatically |
Kostya Serebryany | 6a4f2ee | 2016-11-18 15:50:54 -0800 | [diff] [blame] | 44 | reported in the OSS-Fuzz [issue tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list) |
| 45 | ([example](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9)). |
Kostya Serebryany | 0291572 | 2016-11-18 15:48:16 -0800 | [diff] [blame] | 46 | ([Why different tracker?](docs/faq.md#why-do-you-use-a-different-issue-tracker-for-reportig-bugs-in-fuzz-targets)). |
Kostya Serebryany | 8e95e1a | 2016-11-18 15:52:12 -0800 | [diff] [blame] | 47 | Project owners are CC-ed to the bug report. |
Kostya Serebryany | 0291572 | 2016-11-18 15:48:16 -0800 | [diff] [blame] | 48 | - The bug is fixed upstream. |
| 49 | - [ClusterFuzz](docs/clusterfuzz.md) automatically verifies the fix, adds a comment and closes the issue. |
| 50 | - 7 days after the fix is verified or after 90 days after reporting, the issue becomes *public* |
| 51 | ([exact guidelines](#bug-disclosure-guidelines)). |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 52 | |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 53 | |
| 54 | ## Accepting New Targets |
| 55 | |
inferno-chromium | 459050e | 2016-11-16 10:12:37 -0800 | [diff] [blame] | 56 | In order to be accepted to OSS-Fuzz, an open-source target must |
Kostya Serebryany | 7053f0f | 2016-10-25 18:34:38 -0700 | [diff] [blame] | 57 | have a significant user base and/or be critical to the global IT infrastructure. |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 58 | |
inferno-chromium | 459050e | 2016-11-16 10:12:37 -0800 | [diff] [blame] | 59 | To submit a new target to OSS-Fuzz: |
Mike Aizatsky | e84f13c | 2016-10-26 11:47:04 -0700 | [diff] [blame] | 60 | - create a pull request with a change to [targets/README.md](targets/README.md) providing the following information: |
Mike Aizatsky | ecf29db | 2016-10-27 14:05:31 -0700 | [diff] [blame] | 61 | * target home site and details |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 62 | * source code repository location |
Mike Aizatsky | ecf29db | 2016-10-27 14:05:31 -0700 | [diff] [blame] | 63 | * a link to target security issue reporting process *OR* |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 64 | * an e-mail of the engineering contact person to be CCed on issue. This |
Kostya Serebryany | 81545e1 | 2016-11-18 08:32:07 -0800 | [diff] [blame] | 65 | has to be an e-mail |
| 66 | [linked to a Google Account](https://support.google.com/accounts/answer/176347?hl=en) |
| 67 | that belongs to an |
Mike Aizatsky | ecf29db | 2016-10-27 14:05:31 -0700 | [diff] [blame] | 68 | established target committer (according to VCS logs). |
Mike Aizatsky | 7e49706 | 2016-10-25 15:01:11 -0700 | [diff] [blame] | 69 | 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] | 70 | 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] | 71 | page. |
inferno-chromium | 459050e | 2016-11-16 10:12:37 -0800 | [diff] [blame] | 72 | - 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] | 73 | to write the code. |
| 74 | |
| 75 | |
Kostya Serebryany | e9be2cf | 2016-10-25 18:39:20 -0700 | [diff] [blame] | 76 | ## Bug Disclosure Guidelines |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 77 | |
| 78 | Following Google's standard [disclosure policy](https://googleprojectzero.blogspot.com/2015/02/feedback-and-data-driven-updates-to.html) |
inferno-chromium | 459050e | 2016-11-16 10:12:37 -0800 | [diff] [blame] | 79 | OSS-Fuzz will adhere to following disclosure principles: |
Mike Aizatsky | a95b41b | 2016-10-25 16:36:29 -0700 | [diff] [blame] | 80 | - **90-day deadline**. After notifying target authors, we will open reported |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 81 | issues in 90 days, or sooner if the fix is released. |
| 82 | - **Weekends and holidays**. If a deadline is due to expire on a weekend or |
| 83 | US public holiday, the deadline will be moved to the next normal work day. |
| 84 | - **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] | 85 | 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] | 86 | patch is scheduled for release on a specific day within 14 days following |
| 87 | the deadline, the public disclosure will be delayed until the availability |
| 88 | of the patch. |
| 89 | |
Kostya Serebryany | 2b46488 | 2016-11-18 16:08:25 -0800 | [diff] [blame] | 90 | ## More Documentation |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 91 | |
inferno-chromium | 459050e | 2016-11-16 10:12:37 -0800 | [diff] [blame] | 92 | * [New Target Guide](docs/new_target.md) walks through steps necessary to add new targets to OSS-Fuzz. |
Kostya Serebryany | 0291572 | 2016-11-18 15:48:16 -0800 | [diff] [blame] | 93 | * [Ideal Integration](docs/ideal_integration.md) describes the ideal way to integrate fuzz targets with your project. |
Mike Aizatsky | 3e3dcd2 | 2016-09-27 11:59:07 -0700 | [diff] [blame] | 94 | * [Running and Building Fuzzers](docs/building_running_fuzzers.md) documents the process for fuzzers that are |
Mike Aizatsky | ecf29db | 2016-10-27 14:05:31 -0700 | [diff] [blame] | 95 | *part of target* source code repository. |
Mike Aizatsky | 3e3dcd2 | 2016-09-27 11:59:07 -0700 | [diff] [blame] | 96 | * [Running and Building External Fuzzers](docs/building_running_fuzzers_external.md) documents the process for fuzzers that are |
inferno-chromium | 459050e | 2016-11-16 10:12:37 -0800 | [diff] [blame] | 97 | *part of OSS-Fuzz* source code repository. |
Oliver Chang | 9158c54 | 2016-11-07 13:08:44 -0800 | [diff] [blame] | 98 | * [Fuzzer execution environment](docs/fuzzer_environment.md) documents the |
| 99 | environment under which your fuzzers will be run. |
inferno-chromium | 459050e | 2016-11-16 10:12:37 -0800 | [diff] [blame] | 100 | * [Targets List](targets/README.md) lists OSS targets added to OSS-Fuzz. |
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 |
Oliver Chang | 6c31505 | 2016-10-25 20:39:39 -0700 | [diff] [blame] | 105 | [This page](https://oss-fuzz-build-logs.storage.googleapis.com/status.html) |
| 106 | gives the latest build logs for each target. |
Oliver Chang | a25bf35 | 2016-10-07 18:28:27 -0700 | [diff] [blame] | 107 | |
Oliver Chang | 9e0c143 | 2016-10-25 20:44:34 -0700 | [diff] [blame] | 108 | ## Trophies |
Mike Aizatsky | 2681964 | 2016-10-06 14:02:52 -0700 | [diff] [blame] | 109 | |
Oliver Chang | 9e0c143 | 2016-10-25 20:44:34 -0700 | [diff] [blame] | 110 | [This page](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=status%3AFixed%2CVerified+Type%3ABug%2CBug-Security+-component%3AInfra+) |
inferno-chromium | 459050e | 2016-11-16 10:12:37 -0800 | [diff] [blame] | 111 | gives a list of publically viewable (fixed) bugs found by OSS-Fuzz. |
Mike Aizatsky | 2681964 | 2016-10-06 14:02:52 -0700 | [diff] [blame] | 112 | |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 113 | ## References |
Kostya Serebryany | e751c6c | 2016-10-17 16:40:10 -0700 | [diff] [blame] | 114 | * [libFuzzer documentation](http://libfuzzer.info) |
| 115 | * [libFuzzer tutorial](http://tutorial.libfuzzer.info) |
Mike Aizatsky | 4407d87 | 2016-10-19 10:52:02 -0700 | [diff] [blame] | 116 | * [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/) |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 117 | |