Convert Figma logo to code with AI

google logooss-fuzz

OSS-Fuzz - continuous fuzzing for open source software.

10,307
2,191
10,307
452

Top Related Projects

2,826

A self-hosted Fuzzing-As-A-Service platform

The fuzzer afl++ is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, and a lot more!

Security oriented software fuzzer. Supports evolutionary, feedback-driven fuzzing based on code coverage (SW and HW based)

Quick Overview

OSS-Fuzz is a continuous fuzzing infrastructure for open source software projects. It aims to make common open source software more secure and stable by automatically finding bugs using fuzzing techniques. OSS-Fuzz works with the open source community to integrate projects and improve the security of the overall software ecosystem.

Pros

  • Automated and continuous fuzzing for open source projects
  • Integrates with multiple fuzzing engines (e.g., libFuzzer, AFL++)
  • Provides scalable fuzzing infrastructure using Google Cloud Platform
  • Helps discover and fix vulnerabilities before they can be exploited

Cons

  • Limited to open source projects that meet certain criteria
  • Requires effort to integrate and maintain fuzz targets for each project
  • May generate false positives that need manual triage
  • Learning curve for developers unfamiliar with fuzzing techniques

Getting Started

To get started with OSS-Fuzz:

  1. Check if your project meets the requirements.
  2. Submit your project for integration.
  3. Set up your project:
    • Create a project.yaml file in the projects/ directory
    • Implement fuzz targets for your project
    • Create a Dockerfile for building your project
  4. Test your integration locally using the provided scripts
  5. Submit a pull request to add your project to OSS-Fuzz

For detailed instructions, refer to the Getting Started guide in the OSS-Fuzz documentation.

Competitor Comparisons

2,826

A self-hosted Fuzzing-As-A-Service platform

Pros of OneFuzz

  • More flexible and customizable fuzzing platform
  • Better integration with Azure cloud services
  • Supports a wider range of programming languages and frameworks

Cons of OneFuzz

  • Less mature and established compared to OSS-Fuzz
  • Smaller community and fewer contributed fuzzers
  • More complex setup and configuration process

Code Comparison

OneFuzz (Python):

from onefuzz import Onefuzz

of = Onefuzz()
job = of.jobs.create(project="example", name="my-fuzzing-job")
job.target.add_exe_target("my_target", "path/to/target")
job.fuzzing.add_libfuzzer_task()

OSS-Fuzz (Bash):

#!/bin/bash -eu
# Compile fuzz targets
$CXX $CXXFLAGS -std=c++11 -I. \
    $SRC/target_fuzzer.cc -o $OUT/target_fuzzer \
    $LIB_FUZZING_ENGINE

# Copy seed corpus
cp -r $SRC/seed_corpus $OUT/

Both projects aim to improve software security through fuzzing, but they differ in their approach and implementation. OneFuzz offers more flexibility and cloud integration, while OSS-Fuzz provides a more established and streamlined process for open-source projects.

The fuzzer afl++ is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast++ power schedules, MOpt mutators, unicorn_mode, and a lot more!

Pros of AFLplusplus

  • More flexible and customizable fuzzing options
  • Supports a wider range of target programs and architectures
  • Actively maintained by the community with frequent updates

Cons of AFLplusplus

  • Steeper learning curve for beginners
  • Requires more manual configuration and setup
  • May have less integration with cloud-based fuzzing infrastructure

Code Comparison

AFLplusplus example:

#include "afl-fuzz.h"

int main(int argc, char **argv) {
  AFL_INIT_ARGV();
  // ... fuzzing setup and execution
}

OSS-Fuzz example:

import atheris

def TestOneInput(data):
    # ... fuzzing logic

atheris.Setup(sys.argv, TestOneInput)
atheris.Fuzz()

AFLplusplus offers more low-level control and is typically used with C/C++ targets, while OSS-Fuzz provides a higher-level Python interface for easier integration with various projects. OSS-Fuzz is designed to work seamlessly with Google's infrastructure, making it easier to set up continuous fuzzing for open-source projects. AFLplusplus, on the other hand, offers more advanced fuzzing techniques and customization options for power users.

Security oriented software fuzzer. Supports evolutionary, feedback-driven fuzzing based on code coverage (SW and HW based)

Pros of honggfuzz

  • Lightweight and easy to set up, with minimal dependencies
  • Supports persistent fuzzing mode for improved performance
  • Includes unique features like hardware-based feedback fuzzing

Cons of honggfuzz

  • Limited integration with continuous integration systems
  • Smaller community and ecosystem compared to OSS-Fuzz
  • Fewer built-in sanitizers and analysis tools

Code comparison

honggfuzz:

int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) {
    if (len < 8) return 0;
    if (memcmp(buf, "FUZZ", 4) == 0) {
        abort();  // Crash on specific input
    }
    return 0;
}

OSS-Fuzz:

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    FuzzedDataProvider fdp(data, size);
    std::string input = fdp.ConsumeRandomLengthString();
    fuzz_target(input);
    return 0;
}

Both projects use similar entry points for fuzz targets, but OSS-Fuzz provides additional utilities like FuzzedDataProvider for easier input handling. honggfuzz's example is more straightforward, while OSS-Fuzz's approach offers more flexibility in input processing.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

OSS-Fuzz: Continuous Fuzzing for Open Source Software

Fuzz testing is a well-known technique for uncovering programming errors in software. Many of these detectable errors, like buffer overflow, can have serious security implications. Google has found thousands of security vulnerabilities and stability bugs by deploying guided in-process fuzzing of Chrome components, and we now want to share that service with the open source community.

In cooperation with the Core Infrastructure Initiative and the OpenSSF, OSS-Fuzz aims to make common open source software more secure and stable by combining modern fuzzing techniques with scalable, distributed execution. Projects that do not qualify for OSS-Fuzz (e.g. closed source) can run their own instances of ClusterFuzz or ClusterFuzzLite.

We support the libFuzzer, AFL++, and Honggfuzz fuzzing engines in combination with Sanitizers, as well as ClusterFuzz, a distributed fuzzer execution environment and reporting tool.

Currently, OSS-Fuzz supports C/C++, Rust, Go, Python, Java/JVM, and JavaScript code. Other languages supported by LLVM may work too. OSS-Fuzz supports fuzzing x86_64 and i386 builds.

Overview

OSS-Fuzz process diagram

Documentation

Read our detailed documentation to learn how to use OSS-Fuzz.

Trophies

As of August 2023, OSS-Fuzz has helped identify and fix over 10,000 vulnerabilities and 36,000 bugs across 1,000 projects.

Blog posts