AFL++ Fuzzing Reproduces a libwebp Huffman Table Overflow
· 24:11 · Watch on YouTube ↗
Summary
A LiveOverflow tutorial uses AFL++ persistent-mode fuzzing to reproduce a libwebp Huffman-table buffer overflow. Broad fuzzing did not find it; the video explains how shared table allocation obscured the overflowing condition.
Key points
- Fuzzing the full DWebP program did not trigger a crash; the presenter says that campaign remained in progress after more than 100 days.
- Another tester later said a corrupted WebP file had accidentally entered the campaign behind his apparent two-day discovery, correcting the initial result.
- A focused harness for libwebp’s Huffman-table function produced crashes in an AddressSanitizer build in under a minute; the regular build did not crash.
- The presenter validated a generated input that required 414 table entries against a 410-entry allocation, and another test reached 520 entries with a 500-entry table.
- The video attributes the difficulty to multiple Huffman tables sharing a buffer: earlier tables affect the offset and size needed for a later overflow.
- The tutorial recommends precise fuzz targets and code that is easier to fuzz, while stressing that fuzzing is not a silver bullet.
Article Details
- Topics
- [00:00] AFL++ fuzzing and the attempt to reproduce a libwebp vulnerability
- [02:38] Building a libwebp harness and instrumented fuzzing environment
- [06:31] AFL++ coverage strategies, sanitizer builds, and parallel fuzzers
- [10:36] The unsuccessful full-program campaign and the corrected fuzzing report
- [15:49] Persistent-mode fuzzing of the Huffman-table function
- [21:18] Why shared table allocation obscures the overflow and lessons for fuzzable code
