Skills

Fuzzing Obstacles

Patches past the barriers that stop a fuzzer making progress, checksum and hash...

Install

npx skills add trailofbits/skills --skill fuzzing-obstacles -g -a claude-code -y
Repository
trailofbits/skills7.9k
Category
Engineering
Updated
7d ago
License
CC-BY-SA-4.0
Context cost
Mediumabout 3,000 tokens
Runs scripts
No, instructions only

What it does

Patches past the barriers that stop a fuzzer making progress, checksum and hash verification, magic-value validation, time-based seeds, and other non-deterministic global state. Covers locating the blocking check, neutering it behind a fuzzing build flag, and avoiding the false positives a patch can introduce. Use when a fuzzer is stuck at validation, when coverage shows large regions behind a checksum, or when valid inputs are impractical to generate.

Overcoming Fuzzing Obstacles

Codebases often contain anti-fuzzing patterns that prevent effective coverage. Checksums, global state (like time-seeded PRNGs), and validation checks can block the fuzzer from exploring deeper code paths. This technique shows how to patch your System Under Test (SUT) to bypass these obstacles during fuzzing while preserving production behavior.

Overview

Many real-world programs were not designed with fuzzing in mind. They may:

  • Verify checksums or cryptographic hashes before processing input
  • Rely on global state (e.g., system time, environment variables)
  • Use non-deterministic random number generators
  • Perform complex validation that makes it difficult for the fuzzer to generate valid inputs

These patterns make fuzzing difficult because:

  1. Checksums: The fuzzer must guess correct hash values (astronomically unlikely)
  2. Global state: Same input produces different behavior across runs (breaks determinism)
  3. Complex validation: The fuzzer spends effort hitting validation failures instead of exploring deeper code

The solution is conditional compilation: modify code behavior during fuzzing builds while keeping production code unchanged.

Key Concepts

ConceptDescription
SUT PatchingModifying System Under Test to be fuzzing-friendly
Conditional CompilationCode that behaves differently based on compile-time flags
Fuzzing Build ModeSpecial build configuration that enables fuzzing-specific patches
False PositivesCrashes found during fuzzing that cannot occur in production
DeterminismSame input always produces same behavior (critical for fuzzing)

When to Apply

Read the whole SKILL.md on GitHub

More in Engineering