HTTP/2 cookie crumb join expands a small HPACK header block into an unbounded allocation in Bandit
Impact
The Bandit HTTP/2 implementation is vulnerable to improper handling of highly compressed data, allowing an unauthenticated remote attacker to exhaust server memory. This affects Bandit versions from 0.3.3 before 1.14.0. An attacker can send a small HPACK-compressed HEADERS block to cause a large allocation.
Summarized by @cf/meta/llama-3.3-70b-instruct-fp8-fast. Verify details against the original sources.What to do
On 1.12.2 and later, set a finite decoded header list limit, for example http_2_options: [default_local_settings: [max_header_list_size: 65_536]], which resets the stream before the cookie crumbs are joined. From 0.7.0, disabling HTTP/2 with http_2_options: [enabled: false] removes the vulnerable path.
Affected packages
Affected products
Vendor version evidence. Product records are separate from automatic dependency matching.
mtrudel · EEF
bandit
1 range
mtrudel · EEF
bandit
Package identity
pkg:hex/banditExplore bandit →Identity supplied by EEF. Version matching requires compatible range evidence.
Compare with this publisher’s ranges. This does not inspect your installation.
affected
0.3.3 → before 1.14.0
semver versions
Other versions: unaffected
Product identifiers (CPE)
cpe:2.3:a:mtrudel:bandit:*:*:*:*:*:*:*:*mtrudel · EEF
bandit
1 range
mtrudel · EEF
bandit
Package identity
pkg:github/mtrudel/banditIdentity supplied by EEF. Version matching requires compatible range evidence.
Compare with this publisher’s ranges. This does not inspect your installation.
affected
44bf969cd59851622fb6ee4d16227fbc39a77fb4 → before 220b9dfd27f9a21305be2afc75cbe585ddc24e7a
git versions
Other versions: unaffected
Product identifiers (CPE)
cpe:2.3:a:mtrudel:bandit:*:*:*:*:*:*:*:*Original source description
Improper Handling of Highly Compressed Data (Data Amplification) vulnerability in the HTTP/2 implementation of mtrudel bandit allows an unauthenticated remote attacker to exhaust server memory via a small HPACK-compressed HEADERS block. The block stores one large cookie value in the HPACK dynamic table and then references it tens of thousands of times with 1-byte indexed fields. In the reporter's run, a 49 KB block made a server with default settings allocate a 183 MB cookie binary before any application code ran, and every concurrent stream can repeat the cost.
Bandit.HTTP2.Connection caps only the compressed block (max_header_block_size), and its check of the decoded list against max_header_list_size never fires because that setting defaults to :infinity. combine_cookie_crumbs/1 in lib/bandit/http2/stream.ex then joins every crumb into one binary.
This issue affects bandit: from 0.3.3 before 1.14.0.
Inside the record
Evidence available
Describes the evidence in this view, not whether the product is safe.
Original records
CVE-2026-109584View the latest unmodified CVE JSON from the official source. It may be newer than this imported page.
cve.new JSON →Underlying weaknesses
The source’s classification of what caused the vulnerability.
Environment requirements
These conditions apply together as specified by the publisher. A matching product name alone does not establish exposure.
EEF · platform conditions
All conditions must hold
Any condition may hold
Vulnerable product
cpe:2.3:a:mtrudel:bandit:*:*:*:*:*:*:*:*From (inclusive): 0.3.3
Before: 1.14.0
Original applicability statements
[
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:a:mtrudel:bandit:*:*:*:*:*:*:*:*",
"versionEndExcluding": "1.14.0",
"versionStartIncluding": "0.3.3",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
],
"operator": "AND"
}
]Contributing organizations · 2
Assigning organization
Additional data publisher
What changed
Follow changesLarge field values are marked as truncated previews. Original source snapshots remain retained.