What the Experiments Establish—and What They Do Not
The BIND 9 study contains numbers that are easy to repeat and easy to misuse: several 100% success rates, high-90s results, and a load test that stayed above 94% for one variant. This chapter asks what those measurements actually establish. The useful judgment is neither “the attack always works” nor “it was only a lab result.” It is that the authors measured a serious, highly reliable weakness under specified BIND versions and conditions, while deliberately leaving broad questions about production configurations, prevalence, and current exploitation open.
Strong baseline results under stated conditions
The baseline experiment used BIND 9.18.38, 9.20.11, and 9.21.10 compiled with default configurations. QNAME minimization and prefetching were enabled, and the test domains did not have DNSSEC records. The authors used controlled infrastructure and repeated the baseline variants over both UDP and TCP. These details are not decoration around the percentages. They define the system that produced them.
The reported baseline results were:
| Variant and BIND version | UDP | TCP |
|---|---|---|
| RRset, 9.20.11 | 100% | 100% |
| RRset, 9.21.10 | 100% | 100% |
| RRset-ANY, 9.20.11 | 100% | 100% |
| RRset-ANY, 9.21.10 | 100% | 100% |
| RR-QMA, 9.18.38 | 97% | 92% |
| RR-QMA, 9.20.11 | 100% | 99% |
| RR-QMA, 9.21.10 | 96% | 97% |
The table is not a league table in which TCP, a later release, or a named variant can be declared protective by itself. The client-side RRset paths appear in the later branches, while the RR-QMA path is the one reported for the older 9.18 branch. Within RR-QMA, the protocol and branch combinations differ: the older branch’s TCP result is lower than its UDP result, while the later branches remain in the high 90s. That pattern points to implementation and scheduling conditions, not to a simple rule such as “TCP fixes poisoning” or “the newest tested branch always behaves the same way.”
The percentages also combine two different kinds of information. A cache-poisoning rate tells us how often the complete measured path succeeded in the stated setup. It does not reveal whether every attempt recovered state equally well, whether a failed attempt lost the response race, or whether a response was rejected after a correct prediction. The paper’s separate prediction and offset measurements help explain those stages, but they should not be collapsed into the headline rate. Keeping the stages separate is what lets an operator ask the right diagnostic question when a local reproduction does not match the paper.
These are cache-poisoning success rates for the authors’ baseline experiments, not probabilities that can be assigned to an arbitrary BIND installation. They show that the shared PRNG weakness was not merely a theoretical ability to recover a few bits. In the tested setup, state recovery could be followed by a successful poisoning attempt at a very high rate. They also show that the older branch and the RR-QMA path behaved differently from the later branches and the RRset-based paths. A version label and a variant label belong next to every number.
The experiments also separated prediction from poisoning.