GHSA-465w-v9q3-7j98 json
Remote peer can panic quinn-proto with zero-length STREAM frames during unordered reads
published last mo. modified last mo. also RUSTSEC-2026-0338
- cvss
- —
- not scored
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- —
- no score, EPSS covers CVEs only
- public exploits
- 0
- none known
Summary
When a stream is read in unordered mode (for example through `RecvStream::read(false)` in quinn-proto or `read_unordered` in `quinn`), quinn-proto proactively deduplicates received data by recording received ranges in a `RangeSet` through its `replace` method. When an incoming STREAM frame carried an empty payload, the `Drop` implementation of the iterator returned by `replace` inserted an empty range into the set, violating the invariant that stored ranges are non-empty. Subsequent frames overlapping that region then caused a panic while processing the stream.
A remote peer can trigger this with five small STREAM frames (two of them zero-length) once the application has put the stream in unordered-read mode. The default ordered read path is not affected.
The flaw was corrected in 0.11.18 by ignoring empty ranges in `RangeSet::replace`.
Thanks to Otto Hermann ([@ojhermann](https://github.com/ojhermann)) for reporting this issue.
Patch / fix
Is GHSA-465w-v9q3-7j98 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerAffected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| crates.io | quinn-proto | >=0.7.0, <0.11.18 |
0.11.18 |
References
Sources
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.