Skip to main content

Overview

The Fuzzing package provides AFL++ orchestration for discovering vulnerabilities through intelligent mutation-based fuzzing. It manages fuzzing campaigns, collects crashes, and integrates with crash analysis.

Purpose

Automate fuzzing campaigns with:
  • AFL++ integration: Industry-standard coverage-guided fuzzing
  • Parallel workers: Multiple fuzzer instances for speed
  • Corpus management: Smart seed generation and management
  • Crash collection: Automatic deduplication and triage
  • Binary instrumentation detection: ASAN and AFL instrumentation checks

Architecture

Quick Start

Basic Fuzzing

Parallel Fuzzing

Crash Collection

Core Classes

AFLRunner

Orchestrates AFL++ fuzzing campaigns.
Path
required
Path to target binary
Optional[Path]
Seed corpus directory (auto-generated if None)
Optional[Path]
Output directory for fuzzing results
Optional[Path]
AFL dictionary file for smarter mutations
str
default:"stdin"
Input mode: “stdin”, “file”, or “network”

CrashCollector

Collects and deduplicates crashes.

Crash

Represents a single crash.
str
Unique crash identifier
str
Signal that caused crash (SIGSEGV, SIGABRT, etc.)
str
Hash of stack trace for deduplication
Path
Path to crashing input
str
Exploitability estimate (exploitable, likely, unlikely, unknown)

CorpusManager

Manages fuzzing corpus.

Fuzzing Workflow

Complete Campaign

Binary Preparation

AFL Instrumentation

Check Instrumentation

Corpus Generation

Automatic Seeds

Import Existing Corpus

Minimize Corpus

Configuration

AFL++ Options

Memory Limits

System Configuration (macOS)

Output Structure

Performance

Execution Speed

  • Instrumented binary: 100K-500K execs/sec
  • QEMU mode (no instrumentation): 10K-50K execs/sec
  • ASAN enabled: 50K-200K execs/sec (slower but finds more bugs)

Parallel Speedup

Integration

With Binary Analysis

With LLM Analysis

Best Practices

  1. Use AFL instrumentation for maximum speed
  2. Enable ASAN to catch more bugs
  3. Start with good seeds (real-world inputs)
  4. Run parallel workers (num_cpus - 1)
  5. Monitor fuzzer_stats for stalls
  6. Minimize corpus regularly for efficiency