Read the docs
TI-2024-21850 Aliases CVE-2024-32984GHSA-3999-5ffv-wp2r

Yamux Memory Exhaustion Vulnerability via Active::pending_frames property

Priority MEDIUM 40CWE-400Published · Updated

Key facts

Attack vector
Network
Privileges required
None
User interaction
None
Attack complexity
Low
Impact type
Denial of service
Confidentiality · integrity · availability
None · None · High
Fix status
Fixed

Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub. Impact type from CWE-400.

Summary

Yamux is a stream multiplexer over reliable, ordered connections such as TCP/IP. The Rust implementation of the Yamux stream multiplexer uses a vector for pending frames. This vector is not bounded in length. Every time the Yamux protocol requires sending of a new frame, this frame gets appended to this vector. This can be remotely triggered in a number of ways, for example by: 1. Opening a new libp2p Identify stream. This causes the node to send its Identify message. Of course, every other protocol that causes the sending of data also works. The larger the response, the more data is enqueued. 2. Sending a Yamux Ping frame. This causes a Pong frame to be enqueued. Under normal circumstances, this queue of pending frames would be drained once they’re sent out over the network. However, the attacker can use TCP’s receive window mechanism to prevent the victim from sending out any data: By not reading from the TCP connection, the receive window will never be increased, and the victim won’t be able to send out any new data (this is how TCP implements backpressure). Once this happens, Yamux’s queue of pending frames will start growing indefinitely. The queue will only be drained once the underlying TCP connection is closed. An attacker can cause a remote node to run out of memory, which will result in the corresponding process getting terminated by the operating system.

Why it matters now

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00761 55th percentileScored 2026-11-07
Fix Fixed rust-yamux (libp2p): 0.13.2yamux (crates.io): 0.13.2

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
None
Automatable
Yes
Technical impact
Partial

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
libp2prust-yamuxbefore 0.13.20.13.2Patch availableCNA
—yamux (crates.io)0.13.0 to before 0.13.20.13.2Patch availableGHSA-3999-5ffv-wp2r
  • rust-yamux Vendorlibp2p Affected before 0.13.2 Fixed in 0.13.2 Patch available CNA
  • yamux (crates.io) Vendor— Affected 0.13.0 to before 0.13.2 Fixed in 0.13.2 Patch available GHSA-3999-5ffv-wp2r

CPE names CISA-ADP · 1

CPEVersionsRoleVendor
cpe:2.3:a:libp2p:rust_yamux:0.13.0:*:*:*:*:*:*:*0.13.0—libp2p
  • cpe:2.3:a:libp2p:rust_yamux:0.13.0:*:*:*:*:*:*:* Versions 0.13.0 — ·libp2p

Remediation

  • Fix · CNA rust-yamux (libp2p) Fixed in 0.13.2
  • Fix · GHSA-3999-5ffv-wp2r yamux (crates.io) Fixed in 0.13.2 Advisory →

Timeline

  1. 2026-10-02 Threatist record created from CVE-2024-32984
  2. 2026-10-03 Alias added: GHSA-3999-5ffv-wp2r

References

  • TI-2026-60386 libp2p-rendezvous through 0.17.1 Denial of Service via Unbounded Registration TTL in Discovery Responses CVSS 4.0HIGH 8.7
  • TI-2026-58865 libp2p: PeerStore accepts attacker-signed PeerRecords for a victim peer ID and stores certified attacker addresses CVSS 3.1HIGH 8.2
  • TI-2026-44102 libp2p-quic: Remote panic via certificate expiry race during QUIC handshake CVSS 4.0HIGH 8.2
  • TI-2026-27587 libp2p-rust has unbounded rendezvous DISCOVER cookies enable remote memory exhaustion CVSS 3.1HIGH 8.2
  • TI-2026-58864 libp2p: Gossipsub StrictSign accepts attacker-signed messages as a victim RSA peer ID CVSS 3.1HIGH 7.5
  • TI-2026-53982 libp2p: Circuit relay v2 server reservation refresh leaks abort listeners and allows remote resource exhaustion CVSS 3.1HIGH 7.5
See all 26 →

Sources