inferno-chromium | a660ca3 | 2016-11-23 08:35:07 -0800 | [diff] [blame] | 1 | # OSS-Fuzz - Continuous Fuzzing for Open Source Software |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 2 | |
Abhishek Arya | ffdd05e | 2018-01-26 20:27:50 -0800 | [diff] [blame] | 3 | > *Status*: Stable. We are accepting applications from widely-used open source projects. |
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) |
Kostya Serebryany | c5bf8fd | 2016-11-18 16:58:20 -0800 | [diff] [blame] | 6 | | [Ideal Fuzzing Integration](docs/ideal_integration.md) |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 7 | | [New Project Guide](docs/new_project_guide.md) |
Kostya Serebryany | e20e32b | 2016-11-29 13:25:25 -0800 | [diff] [blame] | 8 | | [Reproducing Bugs](docs/reproducing.md) |
| 9 | | [Projects](projects) |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 10 | | [Projects Issue Tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list) |
Kostya Serebryany | e24d41a | 2016-11-29 13:22:57 -0800 | [diff] [blame] | 11 | | [Glossary](docs/glossary.md) |
Mike Aizatsky | 7273285 | 2016-10-17 12:59:36 -0700 | [diff] [blame] | 12 | |
Mike Aizatsky | 92511cd | 2016-10-25 14:36:06 -0700 | [diff] [blame] | 13 | |
Kostya Serebryany | a416042 | 2016-11-21 14:01:10 -0800 | [diff] [blame] | 14 | [Create New Issue](https://github.com/google/oss-fuzz/issues/new) for questions or feedback about OSS-Fuzz. |
Mike Aizatsky | 25a86da | 2016-10-25 14:33:39 -0700 | [diff] [blame] | 15 | |
Kostya Serebryany | 1250af6 | 2016-11-21 13:48:02 -0800 | [diff] [blame] | 16 | ## Introduction |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 17 | |
| 18 | [Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known |
Kostya Serebryany | b2f73b2 | 2016-11-18 16:50:54 -0800 | [diff] [blame] | 19 | technique for uncovering various kinds of programming errors in software. |
inferno-chromium | a660ca3 | 2016-11-23 08:35:07 -0800 | [diff] [blame] | 20 | Many of these detectable errors (e.g. [buffer overflow](https://en.wikipedia.org/wiki/Buffer_overflow)) can have serious security implications. |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 21 | |
Kostya Serebryany | b48c72b | 2016-11-18 16:47:25 -0800 | [diff] [blame] | 22 | We successfully deployed |
| 23 | [guided in-process fuzzing of Chrome components](https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html) |
inferno-chromium | a660ca3 | 2016-11-23 08:35:07 -0800 | [diff] [blame] | 24 | and found [hundreds](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3AStability-LibFuzzer+-status%3ADuplicate%2CWontFix) of security vulnerabilities and stability bugs. We now want to share the experience and the service with the open source community. |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 25 | |
inferno-chromium | a660ca3 | 2016-11-23 08:35:07 -0800 | [diff] [blame] | 26 | In cooperation with the [Core Infrastructure Initiative](https://www.coreinfrastructure.org/), |
| 27 | OSS-Fuzz aims to make common open source software more secure and stable by |
Kostya Serebryany | b48c72b | 2016-11-18 16:47:25 -0800 | [diff] [blame] | 28 | combining modern fuzzing techniques and scalable |
| 29 | distributed execution. |
| 30 | |
| 31 | At the first stage of the project we use |
| 32 | [libFuzzer](http://llvm.org/docs/LibFuzzer.html) with |
| 33 | [Sanitizers](https://github.com/google/sanitizers). More fuzzing engines will be added later. |
| 34 | [ClusterFuzz](docs/clusterfuzz.md) |
Collin Winter | eabb89c | 2017-02-07 19:15:53 -0800 | [diff] [blame] | 35 | provides a distributed fuzzer execution environment and reporting. |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 36 | |
Kostya Serebryany | 229ffae | 2016-12-02 20:41:47 -0800 | [diff] [blame] | 37 | Currently OSS-Fuzz supports C and C++ code (other languages supported by [LLVM](http://llvm.org) may work too). |
| 38 | |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 39 | ## Process Overview |
| 40 | |
Oliver Chang | 5f0f059 | 2017-03-15 19:17:07 -0700 | [diff] [blame] | 41 |  |
Oliver Chang | 8339132 | 2017-02-10 10:27:14 -0800 | [diff] [blame] | 42 | |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 43 | The following process is used for projects in OSS-Fuzz: |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 44 | |
Kostya Serebryany | 0291572 | 2016-11-18 15:48:16 -0800 | [diff] [blame] | 45 | - A maintainer of an opensource project or an outside volunteer creates |
Kostya Serebryany | f133c89 | 2016-11-21 13:53:40 -0800 | [diff] [blame] | 46 | one or more [fuzz targets](http://libfuzzer.info/#fuzz-target) |
| 47 | and [integrates](docs/ideal_integration.md) them with the project's build and test system. |
Kostya Serebryany | 3057508 | 2016-12-02 17:15:57 -0800 | [diff] [blame] | 48 | - The project is [accepted to OSS-Fuzz](#accepting-new-projects). |
Kostya Serebryany | 0291572 | 2016-11-18 15:48:16 -0800 | [diff] [blame] | 49 | - When [ClusterFuzz](docs/clusterfuzz.md) finds a bug, an issue is automatically |
Kostya Serebryany | 6a4f2ee | 2016-11-18 15:50:54 -0800 | [diff] [blame] | 50 | reported in the OSS-Fuzz [issue tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list) |
| 51 | ([example](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9)). |
Collin Winter | eabb89c | 2017-02-07 19:15:53 -0800 | [diff] [blame] | 52 | ([Why use a different tracker?](docs/faq.md#why-do-you-use-a-different-issue-tracker-for-reporting-bugs-in-oss-projects)). |
Kostya Serebryany | 8e95e1a | 2016-11-18 15:52:12 -0800 | [diff] [blame] | 53 | Project owners are CC-ed to the bug report. |
Abhishek Arya | c878342 | 2017-01-05 13:41:57 -0800 | [diff] [blame] | 54 | - The project developer fixes the bug upstream and credits OSS-Fuzz for the discovery (commit message should contain |
| 55 | the string **'Credit to OSS-Fuzz'**). |
inferno-chromium | f8d92b9 | 2016-11-26 18:22:14 -0800 | [diff] [blame] | 56 | - [ClusterFuzz](docs/clusterfuzz.md) automatically verifies the fix, adds a comment and closes the issue ([example](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53#c3)). |
Oliver Chang | c2f88ee | 2017-03-03 14:21:37 -0800 | [diff] [blame] | 57 | - 30 days after the fix is verified or 90 days after reporting (whichever is earlier), the issue becomes *public* |
inferno-chromium | a660ca3 | 2016-11-23 08:35:07 -0800 | [diff] [blame] | 58 | ([guidelines](#bug-disclosure-guidelines)). |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 59 | |
Mike Aizatsky | 3b639fb | 2016-11-22 11:48:48 -0800 | [diff] [blame] | 60 | <!-- NOTE: this anchor is referenced by oss-fuzz blog post --> |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 61 | ## Accepting New Projects |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 62 | |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 63 | To be accepted to OSS-Fuzz, an open-source project must |
Kostya Serebryany | 7053f0f | 2016-10-25 18:34:38 -0700 | [diff] [blame] | 64 | have a significant user base and/or be critical to the global IT infrastructure. |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 65 | To submit a new project: |
inferno-chromium | b975a52 | 2016-11-23 08:43:15 -0800 | [diff] [blame] | 66 | - [Create a pull request](https://help.github.com/articles/creating-a-pull-request/) with new |
inferno-chromium | 5f71a38 | 2016-12-01 12:46:20 -0800 | [diff] [blame] | 67 | `projects/<project_name>/project.yaml` file ([example](projects/libarchive/project.yaml)) giving at least the following information: |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 68 | * project homepage. |
Abhishek Arya | a51e5dd | 2017-08-17 12:55:09 -0700 | [diff] [blame] | 69 | * e-mail of the engineering contact person to be CCed on new issues. It should: |
| 70 | * belong to an established project committer (according to VCS logs). If this is not you or the email address differs from VCS, an informal e-mail verification will be required. |
Abhishek Arya | bbf2b48 | 2017-08-17 13:04:44 -0700 | [diff] [blame] | 71 | * be associated with a Google account ([why?](docs/faq.md#why-do-you-require-a-google-account-for-authentication)). If you use an alternate email address [linked to a Google Account](https://support.google.com/accounts/answer/176347?hl=en), it will ONLY give you access to filed bugs in [issue tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list) and NOT to [ClusterFuzz](clusterfuzz.md) dashboard (due to appengine api limitations). |
inferno-chromium | 235ba31 | 2016-12-01 12:40:43 -0800 | [diff] [blame] | 72 | * Note that `project_name` can only contain alphanumeric characters, underscores(_) or dashes(-). |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 73 | - Once accepted by an OSS-Fuzz project member, follow the [New Project Guide](docs/new_project_guide.md) |
Collin Winter | eabb89c | 2017-02-07 19:15:53 -0800 | [diff] [blame] | 74 | to configure your project. |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 75 | |
| 76 | |
Kostya Serebryany | e9be2cf | 2016-10-25 18:39:20 -0700 | [diff] [blame] | 77 | ## Bug Disclosure Guidelines |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 78 | |
inferno-chromium | a660ca3 | 2016-11-23 08:35:07 -0800 | [diff] [blame] | 79 | 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] | 80 | OSS-Fuzz will adhere to following disclosure principles: |
Abhishek Arya | 0629957 | 2017-03-03 14:17:27 -0800 | [diff] [blame] | 81 | - **Deadline**. After notifying project authors, we will open reported |
| 82 | issues to the public in 90 days, or 30 days after the fix is released |
| 83 | (whichever comes earlier). |
Oliver Chang | eb014b7 | 2017-01-24 12:24:15 -0800 | [diff] [blame] | 84 | - **Weekends and holidays**. If a deadline is due to expire on a weekend, |
| 85 | the deadline will be moved to the next normal work day. |
inferno-chromium | a660ca3 | 2016-11-23 08:35:07 -0800 | [diff] [blame] | 86 | - **Grace period**. We have a 14-day grace period. If a 90-day deadline |
Kostya Serebryany | 2a8a3ca | 2016-11-30 10:43:22 -0800 | [diff] [blame] | 87 | expires but the upstream engineers let us know before the deadline that a |
Mike Aizatsky | 8f24df7 | 2016-10-25 14:31:45 -0700 | [diff] [blame] | 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 | |
Kostya Serebryany | 2b46488 | 2016-11-18 16:08:25 -0800 | [diff] [blame] | 92 | ## More Documentation |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 93 | |
inferno-chromium | 57c1258 | 2016-11-29 13:18:18 -0800 | [diff] [blame] | 94 | * [Glossary](docs/glossary.md) describes the common terms used in OSS-Fuzz. |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 95 | * [New Project Guide](docs/new_project_guide.md) walks through the steps necessary to add new projects to OSS-Fuzz. |
inferno-chromium | a660ca3 | 2016-11-23 08:35:07 -0800 | [diff] [blame] | 96 | * [Ideal Integration](docs/ideal_integration.md) describes the steps to integrate fuzz targets with your project. |
Oliver Chang | 3c9c161 | 2016-12-06 15:13:03 -0800 | [diff] [blame] | 97 | * [Accessing corpora](docs/corpora.md) describes how to access the corpora we use for fuzzing. |
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. |
Collin Winter | eabb89c | 2017-02-07 19:15:53 -0800 | [diff] [blame] | 100 | * [Projects](projects) lists OSS projects currently analyzed by 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) |
Collin Winter | eabb89c | 2017-02-07 19:15:53 -0800 | [diff] [blame] | 102 | while containing some Chrome-specific bits, is an excellent guide to making your fuzzer better. |
Kostya Serebryany | c283baf | 2017-05-08 19:32:16 -0700 | [diff] [blame] | 103 | * Blog posts: |
| 104 | * 2016-12-01 ([1](https://opensource.googleblog.com/2016/12/announcing-oss-fuzz-continuous-fuzzing.html), |
Kostya Serebryany | fefde24 | 2016-12-02 15:44:43 -0800 | [diff] [blame] | 105 | [2](https://testing.googleblog.com/2016/12/announcing-oss-fuzz-continuous-fuzzing.html), |
| 106 | [3](https://security.googleblog.com/2016/12/announcing-oss-fuzz-continuous-fuzzing.html)) |
Kostya Serebryany | c283baf | 2017-05-08 19:32:16 -0700 | [diff] [blame] | 107 | * 2017-05-08 ([1](https://opensource.googleblog.com/2017/05/oss-fuzz-five-months-later-and.html), |
| 108 | [2](https://testing.googleblog.com/2017/05/oss-fuzz-five-months-later-and.html), |
| 109 | [3](https://security.googleblog.com/2017/05/oss-fuzz-five-months-later-and.html)) |
Abhishek Arya | 832d2c2 | 2018-12-03 13:45:38 -0800 | [diff] [blame] | 110 | * 2018-11-06 ([1](https://security.googleblog.com/2018/11/a-new-chapter-for-oss-fuzz.html)) |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 111 | |
inferno-chromium | 6ee2fe3 | 2016-11-26 18:30:49 -0800 | [diff] [blame] | 112 | ## Build Status |
Oliver Chang | 9ffc7cc | 2017-04-18 11:47:44 -0700 | [diff] [blame] | 113 | [This page](https://oss-fuzz-build-logs.storage.googleapis.com/index.html) |
Abhishek Arya | ea87305 | 2016-11-29 10:57:46 -0800 | [diff] [blame] | 114 | gives the latest build logs for each project. |
Oliver Chang | a25bf35 | 2016-10-07 18:28:27 -0700 | [diff] [blame] | 115 | |
Oliver Chang | 2bcecf7 | 2017-10-10 12:27:29 -0700 | [diff] [blame] | 116 | (Internal only) [Builds dashboard](https://builder.oss-fuzz.com). |
| 117 | |
Max Moroz | aa9c257 | 2018-12-11 13:56:48 -0800 | [diff] [blame^] | 118 | ## Web Interface |
| 119 | |
| 120 | * The main page: [oss-fuzz.com](https://oss-fuzz.com) |
| 121 | * [ClusterFuzz documentation](docs/clusterfuzz.md) |
| 122 | |
Oliver Chang | 9e0c143 | 2016-10-25 20:44:34 -0700 | [diff] [blame] | 123 | ## Trophies |
Mike Aizatsky | 2681964 | 2016-10-06 14:02:52 -0700 | [diff] [blame] | 124 | |
Oliver Chang | 9e0c143 | 2016-10-25 20:44:34 -0700 | [diff] [blame] | 125 | [This page](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=status%3AFixed%2CVerified+Type%3ABug%2CBug-Security+-component%3AInfra+) |
Collin Winter | eabb89c | 2017-02-07 19:15:53 -0800 | [diff] [blame] | 126 | gives a list of publicly-viewable fixed bugs found by OSS-Fuzz. |
Mike Aizatsky | 2681964 | 2016-10-06 14:02:52 -0700 | [diff] [blame] | 127 | |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 128 | ## References |
Kostya Serebryany | e751c6c | 2016-10-17 16:40:10 -0700 | [diff] [blame] | 129 | * [libFuzzer documentation](http://libfuzzer.info) |
| 130 | * [libFuzzer tutorial](http://tutorial.libfuzzer.info) |
Max Moroz | b6b0315 | 2017-01-16 21:15:30 +0100 | [diff] [blame] | 131 | * [libFuzzer workshop](https://github.com/Dor1s/libfuzzer-workshop) |
Mike Aizatsky | 4407d87 | 2016-10-19 10:52:02 -0700 | [diff] [blame] | 132 | * [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/) |
inferno-chromium | b975a52 | 2016-11-23 08:43:15 -0800 | [diff] [blame] | 133 | * [ClusterFuzz](https://blog.chromium.org/2012/04/fuzzing-for-security.html) |
Mike Aizatsky | 3986fa3 | 2016-09-14 09:44:10 -0700 | [diff] [blame] | 134 | |