Fuzzing DNS Zone Parsers
cambus.net
cambus.net
There is really no good reason for DNS servers to be written in C anymore.
I’m a little behind on docs, but we have a pretty decent start on one in Rust: https://github.com/bluejekyll/trust-dns
We still need an AXFR, IXFR, or replication solution.
Also, I haven’t had time to fuzz the zone parsers, so I can’t guarantee we’re resilient to the above yet, but the packet parsers are getting pretty widely used across multiple Rust projects now through the trust-dns-resolver library.
Right now a restart would be required.
I fuzzed a few zone file parsers several years ago, but to find the differences between implementations rather than crashes.
The problem is the format is really poorly specified, has been refined over about 10 RFCs, and still riddled with ambiguities. Every implementation out there handles things slightly differently.
I'll just dump some notes I wrote at the time, containing a list of RFCs and some findings, to gist:
https://gist.github.com/nlyan/2a958fa476182e1b07955a945f0d70...