blob: 0dc39f86072f090319121de3212d0cc762d6112c [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
inferno-chromiuma660ca32016-11-23 08:35:07 -08003> *Status*: Beta. We are preparing the project for public release soon.
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)
Mike Aizatsky5ded7222016-10-26 11:16:30 -07007| [New Target Guide](docs/new_target.md)
Kostya Serebryanya3e18232016-11-18 17:01:23 -08008| [Reproducing Bug Reports](docs/reproducing.md)
inferno-chromiume3763692016-11-23 08:49:36 -08009| [Targets List](targets)
10| [Targets Issue Tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list)
Mike Aizatsky72732852016-10-17 12:59:36 -070011
Mike Aizatsky92511cd2016-10-25 14:36:06 -070012
Kostya Serebryanya4160422016-11-21 14:01:10 -080013[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 -070014
Kostya Serebryany1250af62016-11-21 13:48:02 -080015## Introduction
Mike Aizatsky8f24df72016-10-25 14:31:45 -070016
17[Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known
Kostya Serebryanyb2f73b22016-11-18 16:50:54 -080018technique for uncovering various kinds of programming errors in software.
inferno-chromiuma660ca32016-11-23 08:35:07 -080019Many 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 -070020
Kostya Serebryanyb48c72b2016-11-18 16:47:25 -080021We successfully deployed
22[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 -080023and 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 -070024
inferno-chromiuma660ca32016-11-23 08:35:07 -080025In cooperation with the [Core Infrastructure Initiative](https://www.coreinfrastructure.org/),
26OSS-Fuzz aims to make common open source software more secure and stable by
Kostya Serebryanyb48c72b2016-11-18 16:47:25 -080027combining modern fuzzing techniques and scalable
28distributed execution.
29
30At the first stage of the project we use
31[libFuzzer](http://llvm.org/docs/LibFuzzer.html) with
32[Sanitizers](https://github.com/google/sanitizers). More fuzzing engines will be added later.
33[ClusterFuzz](docs/clusterfuzz.md)
34provides distributed fuzzer execution environment and reporting.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070035
36## Process Overview
37
inferno-chromiume1bb7022016-11-16 09:56:10 -080038The following process is used for targets in OSS-Fuzz:
Mike Aizatsky8f24df72016-10-25 14:31:45 -070039
Kostya Serebryany02915722016-11-18 15:48:16 -080040- A maintainer of an opensource project or an outside volunteer creates
Kostya Serebryanyf133c892016-11-21 13:53:40 -080041one or more [fuzz targets](http://libfuzzer.info/#fuzz-target)
42and [integrates](docs/ideal_integration.md) them with the project's build and test system.
Mike Aizatskydcb8d462016-11-22 11:53:49 -080043- These fuzz targets are [accepted to OSS-Fuzz](#accepting-new-targets).
Kostya Serebryany02915722016-11-18 15:48:16 -080044- When [ClusterFuzz](docs/clusterfuzz.md) finds a bug, an issue is automatically
Kostya Serebryany6a4f2ee2016-11-18 15:50:54 -080045 reported in the OSS-Fuzz [issue tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list)
46 ([example](https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9)).
Kostya Serebryany02915722016-11-18 15:48:16 -080047 ([Why different tracker?](docs/faq.md#why-do-you-use-a-different-issue-tracker-for-reportig-bugs-in-fuzz-targets)).
Kostya Serebryany8e95e1a2016-11-18 15:52:12 -080048 Project owners are CC-ed to the bug report.
Kostya Serebryany02915722016-11-18 15:48:16 -080049- The bug is fixed upstream.
inferno-chromiumf8d92b92016-11-26 18:22:14 -080050- [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)).
Kostya Serebryany02915722016-11-18 15:48:16 -080051- 7 days after the fix is verified or after 90 days after reporting, the issue becomes *public*
inferno-chromiuma660ca32016-11-23 08:35:07 -080052 ([guidelines](#bug-disclosure-guidelines)).
Mike Aizatsky8f24df72016-10-25 14:31:45 -070053
Mike Aizatsky3b639fb2016-11-22 11:48:48 -080054<!-- NOTE: this anchor is referenced by oss-fuzz blog post -->
Mike Aizatsky8f24df72016-10-25 14:31:45 -070055## Accepting New Targets
56
Mike Aizatsky7693b672016-11-22 11:51:52 -080057To be accepted to OSS-Fuzz, an open-source target must
Kostya Serebryany7053f0f2016-10-25 18:34:38 -070058have a significant user base and/or be critical to the global IT infrastructure.
Mike Aizatsky3b639fb2016-11-22 11:48:48 -080059To submit a new target:
inferno-chromiumb975a522016-11-23 08:43:15 -080060- [Create a pull request](https://help.github.com/articles/creating-a-pull-request/) with new
Mike Aizatsky85e37882016-11-22 11:54:22 -080061`targets/<target_name>/target.yaml` file ([example](targets/file/target.yaml)) giving at least the following information:
inferno-chromiumb975a522016-11-23 08:43:15 -080062 * target homepage.
inferno-chromiuma660ca32016-11-23 08:35:07 -080063 * e-mail of the engineering contact person to be CCed on new issues. This
64 email should be
Kostya Serebryany81545e12016-11-18 08:32:07 -080065 [linked to a Google Account](https://support.google.com/accounts/answer/176347?hl=en)
inferno-chromiuma660ca32016-11-23 08:35:07 -080066 and belong to an established target committer (according to VCS logs).
67 If this is not you or the email address differs from VCS, an informal e-mail verification will be required.
inferno-chromiumb975a522016-11-23 08:43:15 -080068- Once accepted by an OSS-Fuzz project member, follow the [New Target Guide](docs/new_target.md)
Mike Aizatsky8f24df72016-10-25 14:31:45 -070069 to write the code.
70
71
Kostya Serebryanye9be2cf2016-10-25 18:39:20 -070072## Bug Disclosure Guidelines
Mike Aizatsky8f24df72016-10-25 14:31:45 -070073
inferno-chromiuma660ca32016-11-23 08:35:07 -080074Following [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 -080075OSS-Fuzz will adhere to following disclosure principles:
Mike Aizatskya95b41b2016-10-25 16:36:29 -070076 - **90-day deadline**. After notifying target authors, we will open reported
Kostya Serebryanyef90c6c2016-11-18 17:00:15 -080077 issues in 90 days, or 7 days after the fix is released.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070078 - **Weekends and holidays**. If a deadline is due to expire on a weekend or
79 US public holiday, the deadline will be moved to the next normal work day.
inferno-chromiuma660ca32016-11-23 08:35:07 -080080 - **Grace period**. We have a 14-day grace period. If a 90-day deadline
81 expires but the upstream engineers lets us know before the deadline that a
Mike Aizatsky8f24df72016-10-25 14:31:45 -070082 patch is scheduled for release on a specific day within 14 days following
83 the deadline, the public disclosure will be delayed until the availability
84 of the patch.
85
Kostya Serebryany2b464882016-11-18 16:08:25 -080086## More Documentation
Mike Aizatsky3986fa32016-09-14 09:44:10 -070087
inferno-chromiuma660ca32016-11-23 08:35:07 -080088* [New Target Guide](docs/new_target.md) walks through the steps necessary to add new targets to OSS-Fuzz.
89* [Ideal Integration](docs/ideal_integration.md) describes the steps to integrate fuzz targets with your project.
90* [Running and Building Fuzzers](docs/building_running_fuzzers.md) documents the process for running fuzzers that are
Mike Aizatskyecf29db2016-10-27 14:05:31 -070091 *part of target* source code repository.
inferno-chromiuma660ca32016-11-23 08:35:07 -080092* [Running and Building External Fuzzers](docs/building_running_fuzzers_external.md) documents the process for running fuzzers that are
inferno-chromium459050e2016-11-16 10:12:37 -080093 *part of OSS-Fuzz* source code repository.
Oliver Chang9158c542016-11-07 13:08:44 -080094* [Fuzzer execution environment](docs/fuzzer_environment.md) documents the
95 environment under which your fuzzers will be run.
inferno-chromium6ee2fe32016-11-26 18:30:49 -080096* [Targets List](targets) lists OSS targets currently added to OSS-Fuzz.
Mike Aizatsky4028e812016-10-19 10:53:00 -070097* [Chrome's Efficient Fuzzer Guide](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/+/HEAD/efficient_fuzzer.md)
98 while contains some chrome-specifics, is an excellent documentation on making your fuzzer better.
Mike Aizatsky3986fa32016-09-14 09:44:10 -070099
inferno-chromium6ee2fe32016-11-26 18:30:49 -0800100## Build Status
Oliver Chang6c315052016-10-25 20:39:39 -0700101[This page](https://oss-fuzz-build-logs.storage.googleapis.com/status.html)
102gives the latest build logs for each target.
Oliver Changa25bf352016-10-07 18:28:27 -0700103
Oliver Chang9e0c1432016-10-25 20:44:34 -0700104## Trophies
Mike Aizatsky26819642016-10-06 14:02:52 -0700105
Oliver Chang9e0c1432016-10-25 20:44:34 -0700106[This page](https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=status%3AFixed%2CVerified+Type%3ABug%2CBug-Security+-component%3AInfra+)
inferno-chromium459050e2016-11-16 10:12:37 -0800107gives a list of publically viewable (fixed) bugs found by OSS-Fuzz.
Mike Aizatsky26819642016-10-06 14:02:52 -0700108
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700109## References
Kostya Serebryanye751c6c2016-10-17 16:40:10 -0700110* [libFuzzer documentation](http://libfuzzer.info)
111* [libFuzzer tutorial](http://tutorial.libfuzzer.info)
Mike Aizatsky4407d872016-10-19 10:52:02 -0700112* [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/)
inferno-chromiumb975a522016-11-23 08:43:15 -0800113* [ClusterFuzz](https://blog.chromium.org/2012/04/fuzzing-for-security.html)
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700114