blob: 589a0d17ebdc4e1850441f649dd7826623f8de94 [file] [log] [blame] [view]
inferno-chromiume1bb7022016-11-16 09:56:10 -08001# OSS-Fuzz - continuous fuzzing of open source software
Mike Aizatsky3986fa32016-09-14 09:44:10 -07002
Mike Aizatskyd2db6a12016-10-25 14:36:24 -07003> *Status*: Beta. We are preparing the project for the first public release. Documentation and smoothing the process is our main priority.
Mike Aizatsky3986fa32016-09-14 09:44:10 -07004
Mike Aizatskya95b41b2016-10-25 16:36:29 -07005[FAQ](docs/faq.md)
Mike Aizatsky5ded7222016-10-26 11:16:30 -07006| [New Target Guide](docs/new_target.md)
Mike Aizatsky6e8e29e2016-10-26 11:49:53 -07007| [Reproducing](docs/reproducing.md)
Mike Aizatskyb6652b52016-10-25 16:52:27 -07008| [Targets List](targets/README.md)
Oliver Chang9848e9e2016-11-04 16:03:00 -07009| [Targets issue tracker](https://bugs.chromium.org/p/oss-fuzz/issues/list)
Mike Aizatsky72732852016-10-17 12:59:36 -070010
Mike Aizatsky92511cd2016-10-25 14:36:06 -070011
12[Create New Issue](https://github.com/google/oss-fuzz/issues/new) for questions or feedback.
Mike Aizatsky25a86da2016-10-25 14:33:39 -070013
Kostya Serebryanyb48c72b2016-11-18 16:47:25 -080014## Why OSS-Fuzz?
Mike Aizatsky8f24df72016-10-25 14:31:45 -070015
16[Fuzz testing](https://en.wikipedia.org/wiki/Fuzz_testing) is a well-known
17technique for uncovering certain types of programming errors in software.
18Many detectable errors (e.g. buffer overruns) have real security
19implications.
20
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)
23and now want to share the experience and the service with the openssource community.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070024
Kostya Serebryanyb48c72b2016-11-18 16:47:25 -080025OSS-Fuzz aims to make common open source software more secure by
26combining modern fuzzing techniques and scalable
27distributed execution.
28
29At 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)
33provides distributed fuzzer execution environment and reporting.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070034
35## Process Overview
36
inferno-chromiume1bb7022016-11-16 09:56:10 -080037The following process is used for targets in OSS-Fuzz:
Mike Aizatsky8f24df72016-10-25 14:31:45 -070038
Kostya Serebryany02915722016-11-18 15:48:16 -080039- A maintainer of an opensource project or an outside volunteer creates
40one or more [Fuzz Target](http://libfuzzer.info/#fuzz-target)
41and [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 Serebryany6a4f2ee2016-11-18 15:50:54 -080044 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 Serebryany02915722016-11-18 15:48:16 -080046 ([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 -080047 Project owners are CC-ed to the bug report.
Kostya Serebryany02915722016-11-18 15:48:16 -080048- 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 Aizatsky8f24df72016-10-25 14:31:45 -070052
Mike Aizatsky8f24df72016-10-25 14:31:45 -070053
54## Accepting New Targets
55
inferno-chromium459050e2016-11-16 10:12:37 -080056In order to be accepted to OSS-Fuzz, an open-source target must
Kostya Serebryany7053f0f2016-10-25 18:34:38 -070057have a significant user base and/or be critical to the global IT infrastructure.
Mike Aizatsky8f24df72016-10-25 14:31:45 -070058
inferno-chromium459050e2016-11-16 10:12:37 -080059To submit a new target to OSS-Fuzz:
Mike Aizatskye84f13c2016-10-26 11:47:04 -070060- create a pull request with a change to [targets/README.md](targets/README.md) providing the following information:
Mike Aizatskyecf29db2016-10-27 14:05:31 -070061 * target home site and details
Mike Aizatsky8f24df72016-10-25 14:31:45 -070062 * source code repository location
Mike Aizatskyecf29db2016-10-27 14:05:31 -070063 * a link to target security issue reporting process *OR*
Mike Aizatsky8f24df72016-10-25 14:31:45 -070064 * an e-mail of the engineering contact person to be CCed on issue. This
Kostya Serebryany81545e12016-11-18 08:32:07 -080065 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 Aizatskyecf29db2016-10-27 14:05:31 -070068 established target committer (according to VCS logs).
Mike Aizatsky7e497062016-10-25 15:01:11 -070069 If this is not you or address differs from VCS, an informal e-mail verification will be required.
Mike Aizatskyb6652b52016-10-25 16:52:27 -070070 This e-mail will also be publicly listed in our [Targets](targets/README.md)
Mike Aizatsky8f24df72016-10-25 14:31:45 -070071 page.
inferno-chromium459050e2016-11-16 10:12:37 -080072- once accepted by an OSS-Fuzz project member, follow the [New Target Guide](docs/new_target.md)
Mike Aizatsky8f24df72016-10-25 14:31:45 -070073 to write the code.
74
75
Kostya Serebryanye9be2cf2016-10-25 18:39:20 -070076## Bug Disclosure Guidelines
Mike Aizatsky8f24df72016-10-25 14:31:45 -070077
78Following 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 -080079OSS-Fuzz will adhere to following disclosure principles:
Mike Aizatskya95b41b2016-10-25 16:36:29 -070080 - **90-day deadline**. After notifying target authors, we will open reported
Mike Aizatsky8f24df72016-10-25 14:31:45 -070081 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 Aizatskya95b41b2016-10-25 16:36:29 -070085 will expire but upstream engineers let us know before the deadline that a
Mike Aizatsky8f24df72016-10-25 14:31:45 -070086 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 Serebryany2b464882016-11-18 16:08:25 -080090## More Documentation
Mike Aizatsky3986fa32016-09-14 09:44:10 -070091
inferno-chromium459050e2016-11-16 10:12:37 -080092* [New Target Guide](docs/new_target.md) walks through steps necessary to add new targets to OSS-Fuzz.
Kostya Serebryany02915722016-11-18 15:48:16 -080093* [Ideal Integration](docs/ideal_integration.md) describes the ideal way to integrate fuzz targets with your project.
Mike Aizatsky3e3dcd22016-09-27 11:59:07 -070094* [Running and Building Fuzzers](docs/building_running_fuzzers.md) documents the process for fuzzers that are
Mike Aizatskyecf29db2016-10-27 14:05:31 -070095 *part of target* source code repository.
Mike Aizatsky3e3dcd22016-09-27 11:59:07 -070096* [Running and Building External Fuzzers](docs/building_running_fuzzers_external.md) documents the process for fuzzers that are
inferno-chromium459050e2016-11-16 10:12:37 -080097 *part of OSS-Fuzz* source code repository.
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.
inferno-chromium459050e2016-11-16 10:12:37 -0800100* [Targets List](targets/README.md) lists OSS targets added to 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)
102 while contains some chrome-specifics, is an excellent documentation on making your fuzzer better.
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700103
Oliver Changa25bf352016-10-07 18:28:27 -0700104## Build status
Oliver Chang6c315052016-10-25 20:39:39 -0700105[This page](https://oss-fuzz-build-logs.storage.googleapis.com/status.html)
106gives the latest build logs for each target.
Oliver Changa25bf352016-10-07 18:28:27 -0700107
Oliver Chang9e0c1432016-10-25 20:44:34 -0700108## Trophies
Mike Aizatsky26819642016-10-06 14:02:52 -0700109
Oliver Chang9e0c1432016-10-25 20:44:34 -0700110[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 -0800111gives a list of publically viewable (fixed) bugs found by OSS-Fuzz.
Mike Aizatsky26819642016-10-06 14:02:52 -0700112
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700113## References
Kostya Serebryanye751c6c2016-10-17 16:40:10 -0700114* [libFuzzer documentation](http://libfuzzer.info)
115* [libFuzzer tutorial](http://tutorial.libfuzzer.info)
Mike Aizatsky4407d872016-10-19 10:52:02 -0700116* [Chromium Fuzzing Page](https://chromium.googlesource.com/chromium/src/testing/libfuzzer/)
Mike Aizatsky3986fa32016-09-14 09:44:10 -0700117