Map

Nautilus

Wiki entityfuzzingsecurityresearch โ†ณ show in map Markdown
title
Nautilus
type
entity
summary
Grammar-based coverage-guided fuzzer; uses tree mutations on context-free grammars to produce structurally valid inputs that survive front-end parsing
tags
fuzzing, security, research
created
2026-05-12
updated
2026-05-12

Nautilus is the grammar-based fuzzer published by Aschermann, Schumilo, Blazytko, Gawlik, and Holz at NDSS 2019 (TU Berlin / Ruhr-Uni Bochum). It pairs a context-free grammar with coverage feedback: inputs are stored as derivation trees rather than byte strings, mutations rewrite subtrees, and the corpus is scheduled by coverage like AFL.

The structural choice is what makes it work โ€” a grammar fuzzer that stores inputs as strings ends up byte-mutating them and degrading to AFL with extra steps. Storing the tree means a single mutation is "replace this Number subtree with another Number subtree," which keeps the input structurally valid by construction.

Where it shows up

  • Embedded as the grammar engine inside other fuzzers (Honggfuzz extensions, AFL++ via custom mutators, gosentry's grammar mode)
  • The grammar-format conventions Nautilus introduced โ€” JSON arrays of [non-terminal, production] rules โ€” have been picked up by several downstream tools, including gosentry's --grammar mode

Grammar format

The standard form is a JSON array of two-element arrays, where the first element is the non-terminal name and the second is the production (with {Name} referring to other non-terminals). See grammar-based-fuzzing for the worked example.