Skip to content

RUSTSEC-2026-0341 GHSA-qfwj-vfxf-92j2

Stream reassembly memory-exhaustion guard in quinn-proto can be bypassed

High crates.io
Severity
7.5 / 10
High · CVSS 3.1
Exploit chance (EPSS)
—
No score published
Known exploited
No
Not in CISA's catalog
Weakness
—
Not classified
Fix
0.11.17
Upgrade quinn-proto to this version or later

Description

The fix for RUSTSEC-2026-0185 in 0.11.15 added a cap on the number of chunks buffered by the Assembler that reassembles out-of-order stream data. However, the cap was only checked inside the branch that triggers defragmentation, which only runs when the estimated over-allocation exceeds a threshold proportional to the amount of buffered data. Frames handled entirely by the unordered-read deduplication loop returned before the check ran at all.

A peer sending one small gapped STREAM frame per packet (for example, 6-byte frames separated by 1-byte gaps) keeps the per-chunk overhead below the defragmentation threshold, so the cap is never evaluated and the chunk count grows until stream-level flow control stops the peer. With the default TransportConfig (100 concurrent unidirectional streams and a 1.25 MB stream receive window), a remote, unauthenticated peer can pin roughly 3 GB of receiver memory using about 125 MB of accounted stream data. The memory is not reclaimed until the affected streams or the connection are closed.

The flaw was corrected in 0.11.17 by checking the chunk count after every insert (including in the unordered deduplication loop) and compacting the buffer once it passes a watermark above the cap. A stream is rejected once compaction can no longer bring the chunk count back under the cap.

Versions before 0.11.15 are affected by the original, broader issue described in RUSTSEC-2026-0185.

Thanks to Otto Hermann (@ojhermann) for reporting and fixing this issue.

Affected versions

crates.io

PackageVulnerableFixed in
quinn-proto
>= 0.11.15, < 0.11.17
0.11.17

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

quinn-proto crates.io → 0.11.17

cargo
cargo update -p quinn-proto --precise 0.11.17

Severity breakdown

CVSS 3.1 7.5

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

References

Timeline

  1. Published
  2. Last updated by the source
AdvisorySeverityWhy it's related
GHSA-4w2j-m93h-cj5j
Quinn: Remote memory exhaustion in quinn-proto from unbounded out-of-order stream reassembly
High Linked by the source
RUSTSEC-2026-0343
Outgoing datagram buffer accounting can panic the sender in quinn-proto
High Also affects quinn-proto
RUSTSEC-2026-0340
Peer minimum ACK delay can panic quinn-proto when ACK_FREQUENCY transmission is enabled
High Also affects quinn-proto
RUSTSEC-2026-0338
Remote peer can panic quinn-proto with zero-length STREAM frames during unordered reads
Not rated yet Also affects quinn-proto
RUSTSEC-2026-0342
Zero-length DATAGRAM frames bypass the receive buffer limit in quinn-proto
Not rated yet Also affects quinn-proto
RUSTSEC-2026-0339
Unbounded growth of pending connection ID retirements in quinn-proto
Not rated yet Also affects quinn-proto
GHSA-6xvm-j4wr-6v98
Quinn affected by unauthenticated remote DoS via panic in QUIC transport parameter parsing
Medium Also affects quinn-proto
GHSA-vr26-jcq5-fjj8
Denial of service in quinn-proto when using `Endpoint::retry()`
High Also affects quinn-proto
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor