blob: b2327feb33cec3b716638b3cb79e714727ef0437 [file] [log] [blame] [view]
inferno-chromiuma660ca32016-11-23 08:35:07 -08001# OSS-Fuzz - Continuous Fuzzing for Open Source Software
Mike Aizatsky3986fa32016-09-14 09:44:10 -07002
Abhishek Aryaffdd05e2018-01-26 20:27:50 -08003> *Status*: Stable. We are accepting applications from widely-used open source projects.
Mike Aizatsky3986fa32016-09-14 09:44:10 -07004
Mike Aizatskya95b41b2016-10-25 16:36:29 -07005[FAQ](docs/faq.md)
Kostya Serebryanyc5bf8fd2016-11-18 16:58:20 -08006| [Ideal Fuzzing Integration](docs/ideal_integration.md)
Abhishek Aryaea873052016-11-29 10:57:46 -08007| [New Project Guide](docs/new_project_guide.md)
Kostya Serebryanye20e32b2016-11-29 13:25:25 -08008| [Reproducing Bugs](docs/reproducing.md)
9| [Projects](projects)
Abhishek Aryaea873052016-11-29 10:57:46 -080010| [Projects Issue Tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list)
Kostya Serebryanye24d41a2016-11-29 13:22:57 -080011| [Glossary](docs/glossary.md)
Mike Aizatsky72732852016-10-17 12:59:36 -070012
Mike Aizatsky92511cd2016-10-25 14:36:06 -070013
Kostya Serebryanya4160422016-11-21 14:01:10 -080014[Create New Issue](https://github.com/google/oss-fuzz/issues/new) for questions or feedback about OSS-Fuzz.
Mike Aizatsky25a86da2016-10-25 14:33:39 -070015
Kostya Serebryany1250af62016-11-21 13:48:02 -080016## Introduction
Mike Aizatsky8f24df72016-10-25 14:31:45 -070017
18[Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known
Kostya Serebryanyb2f73b22016-11-18 16:50:54 -080019technique for uncovering various kinds of programming errors in software.
inferno-chromiuma660ca32016-11-23 08:35:07 -080020Many of these detectable errors (e.g. [buffer overflow](https://en.wikipedia.org/wiki/Buffer_overflow)) can have serious security implications.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070021
Kostya Serebryanyb48c72b2016-11-18 16:47:25 -080022We successfully deployed
23[guided in-process fuzzing of Chrome components](https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html)
inferno-chromiuma660ca32016-11-23 08:35:07 -080024and 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 Aizatsky8f24df72016-10-25 14:31:45 -070025
inferno-chromiuma660ca32016-11-23 08:35:07 -080026In cooperation with the [Core Infrastructure Initiative](https://www.coreinfrastructure.org/),
27OSS-Fuzz aims to make common open source software more secure and stable by
Kostya Serebryanyb48c72b2016-11-18 16:47:25 -080028combining modern fuzzing techniques and scalable
29distributed execution.
30
31At 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 Wintereabb89c2017-02-07 19:15:53 -080035provides a distributed fuzzer execution environment and reporting.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070036
Kostya Serebryany229ffae2016-12-02 20:41:47 -080037Currently OSS-Fuzz supports C and C++ code (other languages supported by [LLVM](http://llvm.org) may work too).
38
Mike Aizatsky8f24df72016-10-25 14:31:45 -070039## Process Overview
40
Oliver Chang5f0f0592017-03-15 19:17:07 -070041![diagram](docs/images/process.png?raw=true)
Oliver Chang83391322017-02-10 10:27:14 -080042
Abhishek Aryaea873052016-11-29 10:57:46 -080043The following process is used for projects in OSS-Fuzz:
Mike Aizatsky8f24df72016-10-25 14:31:45 -070044
Kostya Serebryany02915722016-11-18 15:48:16 -080045- A maintainer of an opensource project or an outside volunteer creates
Kostya Serebryanyf133c892016-11-21 13:53:40 -080046one or more [fuzz targets](http://libfuzzer.info/#fuzz-target)
47and [integrates](docs/ideal_integration.md) them with the project's build and test system.
Kostya Serebryany30575082016-12-02 17:15:57 -080048- The project is [accepted to OSS-Fuzz](#accepting-new-projects).
Kostya Serebryany02915722016-11-18 15:48:16 -080049- When [ClusterFuzz](docs/clusterfuzz.md) finds a bug, an issue is automatically
Kostya Serebryany6a4f2ee2016-11-18 15:50:54 -080050 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 Wintereabb89c2017-02-07 19:15:53 -080052 ([Why use a different tracker?](docs/faq.md#why-do-you-use-a-different-issue-tracker-for-reporting-bugs-in-oss-projects)).
Kostya Serebryany8e95e1a2016-11-18 15:52:12 -080053 Project owners are CC-ed to the bug report.
Abhishek Aryac8783422017-01-05 13:41:57 -080054- 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-chromiumf8d92b92016-11-26 18:22:14 -080056- [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 Changc2f88ee2017-03-03 14:21:37 -080057- 30 days after the fix is verified or 90 days after reporting (whichever is earlier), the issue becomes *public*
inferno-chromiuma660ca32016-11-23 08:35:07 -080058 ([guidelines](#bug-disclosure-guidelines)).
Mike Aizatsky8f24df72016-10-25 14:31:45 -070059
Mike Aizatsky3b639fb2016-11-22 11:48:48 -080060<!-- NOTE: this anchor is referenced by oss-fuzz blog post -->
Abhishek Aryaea873052016-11-29 10:57:46 -080061## Accepting New Projects
Mike Aizatsky8f24df72016-10-25 14:31:45 -070062
Abhishek Aryaea873052016-11-29 10:57:46 -080063To be accepted to OSS-Fuzz, an open-source project must
Kostya Serebryany7053f0f2016-10-25 18:34:38 -070064have a significant user base and/or be critical to the global IT infrastructure.
Abhishek Aryaea873052016-11-29 10:57:46 -080065To submit a new project:
inferno-chromiumb975a522016-11-23 08:43:15 -080066- [Create a pull request](https://help.github.com/articles/creating-a-pull-request/) with new
inferno-chromium5f71a382016-12-01 12:46:20 -080067`projects/<project_name>/project.yaml` file ([example](projects/libarchive/project.yaml)) giving at least the following information:
Abhishek Aryaea873052016-11-29 10:57:46 -080068 * project homepage.
Abhishek Aryaa51e5dd2017-08-17 12:55:09 -070069 * 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 Aryabbf2b482017-08-17 13:04:44 -070071 * 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-chromium235ba312016-12-01 12:40:43 -080072 * Note that `project_name` can only contain alphanumeric characters, underscores(_) or dashes(-).
Abhishek Aryaea873052016-11-29 10:57:46 -080073- Once accepted by an OSS-Fuzz project member, follow the [New Project Guide](docs/new_project_guide.md)
Collin Wintereabb89c2017-02-07 19:15:53 -080074 to configure your project.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070075
76
Kostya Serebryanye9be2cf2016-10-25 18:39:20 -070077## Bug Disclosure Guidelines
Mike Aizatsky8f24df72016-10-25 14:31:45 -070078
inferno-chromiuma660ca32016-11-23 08:35:07 -080079Following [Google's standard disclosure policy](https://googleprojectzero.blogspot.com/2015/02/feedback-and-data-driven-updates-to.html)
inferno-chromium459050e2016-11-16 10:12:37 -080080OSS-Fuzz will adhere to following disclosure principles:
Abhishek Arya06299572017-03-03 14:17:27 -080081 - **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 Changeb014b72017-01-24 12:24:15 -080084 - **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-chromiuma660ca32016-11-23 08:35:07 -080086 - **Grace period**. We have a 14-day grace period. If a 90-day deadline
Kostya Serebryany2a8a3ca2016-11-30 10:43:22 -080087 expires but the upstream engineers let us know before the deadline that a
Mike Aizatsky8f24df72016-10-25 14:31:45 -070088 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 Serebryany2b464882016-11-18 16:08:25 -080092## More Documentation
Mike Aizatsky3986fa32016-09-14 09:44:10 -070093
inferno-chromium57c12582016-11-29 13:18:18 -080094* [Glossary](docs/glossary.md) describes the common terms used in OSS-Fuzz.
Abhishek Aryaea873052016-11-29 10:57:46 -080095* [New Project Guide](docs/new_project_guide.md) walks through the steps necessary to add new projects to OSS-Fuzz.
inferno-chromiuma660ca32016-11-23 08:35:07 -080096* [Ideal Integration](docs/ideal_integration.md) describes the steps to integrate fuzz targets with your project.
Oliver Chang3c9c1612016-12-06 15:13:03 -080097* [Accessing corpora](docs/corpora.md) describes how to access the corpora we use for fuzzing.
Oliver Chang9158c542016-11-07 13:08:44 -080098* [Fuzzer execution environment](docs/fuzzer_environment.md) documents the
99 environment under which your fuzzers will be run.
Collin Wintereabb89c2017-02-07 19:15:53 -0800100* [Projects](projects) lists OSS projects currently analyzed by OSS-Fuzz.
Mike Aizatsky4028e812016-10-19 10:53:00 -0700101* [Chrome's Efficient Fuzzer Guide](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/+/HEAD/efficient_fuzzer.md)
Collin Wintereabb89c2017-02-07 19:15:53 -0800102 while containing some Chrome-specific bits, is an excellent guide to making your fuzzer better.
Kostya Serebryanyc283baf2017-05-08 19:32:16 -0700103* Blog posts:
104 * 2016-12-01 ([1](https://opensource.googleblog.com/2016/12/announcing-oss-fuzz-continuous-fuzzing.html),
Kostya Serebryanyfefde242016-12-02 15:44:43 -0800105[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 Serebryanyc283baf2017-05-08 19:32:16 -0700107 * 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 Arya832d2c22018-12-03 13:45:38 -0800110 * 2018-11-06 ([1](https://security.googleblog.com/2018/11/a-new-chapter-for-oss-fuzz.html))
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700111
inferno-chromium6ee2fe32016-11-26 18:30:49 -0800112## Build Status
Oliver Chang9ffc7cc2017-04-18 11:47:44 -0700113[This page](https://oss-fuzz-build-logs.storage.googleapis.com/index.html)
Abhishek Aryaea873052016-11-29 10:57:46 -0800114gives the latest build logs for each project.
Oliver Changa25bf352016-10-07 18:28:27 -0700115
Oliver Chang2bcecf72017-10-10 12:27:29 -0700116(Internal only) [Builds dashboard](https://builder.oss-fuzz.com).
117
Max Morozaa9c2572018-12-11 13:56:48 -0800118## Web Interface
119
120* The main page: [oss-fuzz.com](https://oss-fuzz.com)
121* [ClusterFuzz documentation](docs/clusterfuzz.md)
122
Oliver Chang9e0c1432016-10-25 20:44:34 -0700123## Trophies
Mike Aizatsky26819642016-10-06 14:02:52 -0700124
Oliver Chang9e0c1432016-10-25 20:44:34 -0700125[This page](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=status%3AFixed%2CVerified+Type%3ABug%2CBug-Security+-component%3AInfra+)
Collin Wintereabb89c2017-02-07 19:15:53 -0800126gives a list of publicly-viewable fixed bugs found by OSS-Fuzz.
Mike Aizatsky26819642016-10-06 14:02:52 -0700127
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700128## References
Kostya Serebryanye751c6c2016-10-17 16:40:10 -0700129* [libFuzzer documentation](http://libfuzzer.info)
130* [libFuzzer tutorial](http://tutorial.libfuzzer.info)
Max Morozb6b03152017-01-16 21:15:30 +0100131* [libFuzzer workshop](https://github.com/Dor1s/libfuzzer-workshop)
Mike Aizatsky4407d872016-10-19 10:52:02 -0700132* [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/)
inferno-chromiumb975a522016-11-23 08:43:15 -0800133* [ClusterFuzz](https://blog.chromium.org/2012/04/fuzzing-for-security.html)
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700134