In NLnet Labs Unbound 1.22.0 up to and including 1.25.1, when downstream DNS-over-QUIC (DoQ) is enabled, the first two bidirectional streams on a new QUIC connection (stream_id 0 and 4) bypass the per-stream 'quic-size' gate entirely, and large input buffers are allocated later, after only the 2-byte length prefix has been received from the initial streams. As a result, a remote client can make Unbound exceed the configured 'quic-size' limit with low-cost input. Using only one connection and two streams, each sending a declared 65535-byte length prefix and then holding the streams open, a client can already trivially make Unbound roughly allocate double that amount. This is a remote availability issue / memory-accounting bypass in the downstream DoQ implementation that leads to denial of service for new DoQ clients. This vulnerability needs Unbound to be compiled with DoQ support ('--with-libngtcp2') and the 'quic-port' to be configured for the listening interfaces.
{
"binaries": [
{
"binary_name": "libunbound8",
"binary_version": "1.13.1-1ubuntu5.15"
},
{
"binary_name": "python3-unbound",
"binary_version": "1.13.1-1ubuntu5.15"
},
{
"binary_name": "unbound",
"binary_version": "1.13.1-1ubuntu5.15"
},
{
"binary_name": "unbound-anchor",
"binary_version": "1.13.1-1ubuntu5.15"
},
{
"binary_name": "unbound-host",
"binary_version": "1.13.1-1ubuntu5.15"
}
]
}{
"binaries": [
{
"binary_name": "libunbound8",
"binary_version": "1.19.2-1ubuntu3.8"
},
{
"binary_name": "python3-unbound",
"binary_version": "1.19.2-1ubuntu3.8"
},
{
"binary_name": "unbound",
"binary_version": "1.19.2-1ubuntu3.8"
},
{
"binary_name": "unbound-anchor",
"binary_version": "1.19.2-1ubuntu3.8"
},
{
"binary_name": "unbound-host",
"binary_version": "1.19.2-1ubuntu3.8"
}
]
}{
"binaries": [
{
"binary_name": "libunbound8",
"binary_version": "1.24.2-1ubuntu2.1"
},
{
"binary_name": "python3-unbound",
"binary_version": "1.24.2-1ubuntu2.1"
},
{
"binary_name": "unbound",
"binary_version": "1.24.2-1ubuntu2.1"
},
{
"binary_name": "unbound-anchor",
"binary_version": "1.24.2-1ubuntu2.1"
},
{
"binary_name": "unbound-host",
"binary_version": "1.24.2-1ubuntu2.1"
}
]
}{
"binaries": [
{
"binary_name": "libunbound2",
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3"
},
{
"binary_name": "python-unbound",
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3"
},
{
"binary_name": "unbound",
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3"
},
{
"binary_name": "unbound-anchor",
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3"
},
{
"binary_name": "unbound-host",
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3"
}
]
}{
"binaries": [
{
"binary_name": "libunbound2",
"binary_version": "1.5.8-1ubuntu1.1+esm3"
},
{
"binary_name": "python-unbound",
"binary_version": "1.5.8-1ubuntu1.1+esm3"
},
{
"binary_name": "unbound",
"binary_version": "1.5.8-1ubuntu1.1+esm3"
},
{
"binary_name": "unbound-anchor",
"binary_version": "1.5.8-1ubuntu1.1+esm3"
},
{
"binary_name": "unbound-host",
"binary_version": "1.5.8-1ubuntu1.1+esm3"
}
]
}{
"binaries": [
{
"binary_name": "libunbound2",
"binary_version": "1.6.7-1ubuntu2.6+esm4"
},
{
"binary_name": "python-unbound",
"binary_version": "1.6.7-1ubuntu2.6+esm4"
},
{
"binary_name": "python3-unbound",
"binary_version": "1.6.7-1ubuntu2.6+esm4"
},
{
"binary_name": "unbound",
"binary_version": "1.6.7-1ubuntu2.6+esm4"
},
{
"binary_name": "unbound-anchor",
"binary_version": "1.6.7-1ubuntu2.6+esm4"
},
{
"binary_name": "unbound-host",
"binary_version": "1.6.7-1ubuntu2.6+esm4"
}
]
}{
"binaries": [
{
"binary_name": "libunbound8",
"binary_version": "1.9.4-2ubuntu1.11+esm1"
},
{
"binary_name": "python-unbound",
"binary_version": "1.9.4-2ubuntu1.11+esm1"
},
{
"binary_name": "python3-unbound",
"binary_version": "1.9.4-2ubuntu1.11+esm1"
},
{
"binary_name": "unbound",
"binary_version": "1.9.4-2ubuntu1.11+esm1"
},
{
"binary_name": "unbound-anchor",
"binary_version": "1.9.4-2ubuntu1.11+esm1"
},
{
"binary_name": "unbound-host",
"binary_version": "1.9.4-2ubuntu1.11+esm1"
}
]
}