Every CVESearch/Get API key

CVE-2026-61544

libp2p-quic: Remote panic via certificate expiry race during QUIC handshake

8.2 HighFix available

CVE-2026-61544 is a high vulnerability (CVSS 8.2) in Libp2p Rust-libp2p, published July 10, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.28%, the 21st percentile. Fixed in libp2p-quic 0.13.1.

What does this mean?
Severity
8.2 HighCVSS 4.0, CVE List
Exploit chance
0.28%EPSS, 21st percentile
Exploitation
None knownNot on CISA’s or ENISA’s lists
Fixed in
0.13.1libp2p-quic +3 more

Description

libp2p-rust is the official Rust language implementation of the libp2p networking stack. Prior to 0.13.1, libp2p-quic could panic during an inbound QUIC handshake when a remote peer presented a valid short-lived libp2p TLS certificate and delayed the final TLS 1.3 handshake fragment until after the certificate expired. In the Quinn post-handshake upgrade path, transports/quic/src/connection/connecting.rs called libp2p_tls::certificate::parse a second time in remote_peer_id and used expect on the result. The repeated wall-clock validity check could reject the now-expired certificate, causing the expect call to terminate any application exposing an affected libp2p-quic listener. This vulnerability is fixed in 0.13.1.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
High
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
High

Exploit likelihood

0.28%Up 0.1 points since Sep 16, 2026
90%50%10%1%

Affected products

Affected packages

Affected packages
PackageAffectedFixed
libp2p-quic
crates.io
before 0.13.1
0.13.1
libp2p-quic
crates.io
0.0.0-0 up to 0.13.1
0.13.1
rust-libp2p-identity
Ubuntu:26.10
All versions, plus listed versions
0.2.13+ds-1
None known
rust-libp2p-identity
Ubuntu:26.04:LTS
All versions, plus listed versions
0.2.10+20250205+ds-10.2.12+20250805+ds-20.2.13+ds-1
None known

What each source reports

CVE List Score used8.2

libp2p-quic: Remote panic via certificate expiry race during QUIC handshake

libp2p-rust is the official Rust language implementation of the libp2p networking stack. Prior to 0.13.1, libp2p-quic could panic during an inbound QUIC handshake when a remote peer presented a valid short-lived libp2p TLS certificate and delayed the final TLS 1.3 handshake fragment until after the certificate expired. In the Quinn post-handshake upgrade path, transports/quic/src/connection/connecting.rs called libp2p_tls::certificate::parse a second time in remote_peer_id and used expect on the result. The repeated wall-clock validity check could reject the now-expired certificate, causing the expect call to terminate any application exposing an affected libp2p-quic listener. This vulnerability is fixed in 0.13.1.

Record
CVE-2026-61544
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-248
Updated
2026-11-02
EUVDEUVD-2026-795018.2

libp2p-rust is the official Rust language implementation of the libp2p networking stack. Prior to 0.13.1, libp2p-quic could panic during an inbound QUIC handshake when a remote peer presented a valid short-lived libp2p TLS certificate and delayed the final TLS 1.3 handshake fragment until after the certificate expired. In the Quinn post-handshake upgrade path, transports/quic/src/connection/connecting.rs called libp2p_tls::certificate::parse a second time in remote_peer_id and used expect on the result. The repeated wall-clock validity check could reject the now-expired certificate, causing the expect call to terminate any application exposing an affected libp2p-quic listener. This vulnerability is fixed in 0.13.1.

Record
EUVD-2026-79501
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-5hq8-qhww-jm7q8.2

libp2p-quic: Remote panic via certificate expiry race during QUIC handshake

Summary

libp2p-quic can panic on an inbound QUIC handshake if a malicious peer presents a valid, short lived libp2p TLS certificate and delays the final TLS 1.3 handshake fragment until the certificate expires.

This is remotely reachable by a network peer and can crash applications exposing a libp2p QUIC listener.

Details

During the TLS handshake, libp2p-tls parses and validates the peer certificate. After Quinn reports handshake completion, libp2p-quic re-parses the same certificate in the post-handshake upgrade path and assumes this cannot fail:

https://github.com/libp2p/rust-libp2p/blob/969b707bf1177ebebd1febc285c3fd22793b95c5/transports/quic/src/connection/connecting.rs#L65-L66

However, libp2p_tls::certificate::parse() re-runs certificate verification on every call, including a wall-clock validity check. A certificate that was valid during the first handshake time parse can expire before the second post-handshake parse, causing the expect(...) to panic.

PoC

A malicious peer can trigger this by:

  1. Opening a QUIC connection to a libp2p QUIC listener.
  2. Presenting a valid libp2p TLS certificate with a very short lifetime.
  3. Allowing the initial handshake-time certificate validation to succeed.
  4. Withholding the final client handshake fragment packet until after the certificate expires, but before the QUIC handshake timeout elapses.
  5. The listener completes the handshake and hits the post-handshake certificate re-parse, which panics.

Impact

Remote unauthenticated denial of service. Any application exposing an affected libp2p-quic listener can be crashed by a network peer that performs a valid-looking QUIC/TLS handshake with attacker-controlled timing. No malformed packets are required.

Record
GHSA-5hq8-qhww-jm7q
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
NVD8.2

libp2p-rust is the official Rust language implementation of the libp2p networking stack. Prior to 0.13.1, libp2p-quic could panic during an inbound QUIC handshake when a remote peer presented a valid short-lived libp2p TLS certificate and delayed the final TLS 1.3 handshake fragment until after the certificate expired. In the Quinn post-handshake upgrade path, transports/quic/src/connection/connecting.rs called libp2p_tls::certificate::parse a second time in remote_peer_id and used expect on the result. The repeated wall-clock validity check could reject the now-expired certificate, causing the expect call to terminate any application exposing an affected libp2p-quic listener. This vulnerability is fixed in 0.13.1.

Record
CVE-2026-61544
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Weakness
CWE-248
Updated
2026-11-02
OSV8.2

libp2p-quic: Remote panic via certificate expiry race during QUIC handshake

libp2p-rust is the official Rust language implementation of the libp2p networking stack. Prior to 0.13.1, libp2p-quic could panic during an inbound QUIC handshake when a remote peer presented a valid short-lived libp2p TLS certificate and delayed the final TLS 1.3 handshake fragment until after the certificate expired. In the Quinn post-handshake upgrade path, transports/quic/src/connection/connecting.rs called libp2p_tls::certificate::parse a second time in remote_peer_id and used expect on the result. The repeated wall-clock validity check could reject the now-expired certificate, causing the expect call to terminate any application exposing an affected libp2p-quic listener. This vulnerability is fixed in 0.13.1.

Record
CVE-2026-61544
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-248
Updated
2026-11-13
OSVGHSA-5hq8-qhww-jm7q8.2

libp2p-quic: Remote panic via certificate expiry race during QUIC handshake

Summary

libp2p-quic can panic on an inbound QUIC handshake if a malicious peer presents a valid, short lived libp2p TLS certificate and delays the final TLS 1.3 handshake fragment until the certificate expires.

This is remotely reachable by a network peer and can crash applications exposing a libp2p QUIC listener.

Details

During the TLS handshake, libp2p-tls parses and validates the peer certificate. After Quinn reports handshake completion, libp2p-quic re-parses the same certificate in the post-handshake upgrade path and assumes this cannot fail:

https://github.com/libp2p/rust-libp2p/blob/969b707bf1177ebebd1febc285c3fd22793b95c5/transports/quic/src/connection/connecting.rs#L65-L66

However, libp2p_tls::certificate::parse() re-runs certificate verification on every call, including a wall-clock validity check. A certificate that was valid during the first handshake time parse can expire before the second post-handshake parse, causing the expect(...) to panic.

PoC

A malicious peer can trigger this by:

  1. Opening a QUIC connection to a libp2p QUIC listener.
  2. Presenting a valid libp2p TLS certificate with a very short lifetime.
  3. Allowing the initial handshake-time certificate validation to succeed.
  4. Withholding the final client handshake fragment packet until after the certificate expires, but before the QUIC handshake timeout elapses.
  5. The listener completes the handshake and hits the post-handshake certificate re-parse, which panics.

Impact

Remote unauthenticated denial of service. Any application exposing an affected libp2p-quic listener can be crashed by a network peer that performs a valid-looking QUIC/TLS handshake with attacker-controlled timing. No malformed packets are required.

Record
GHSA-5hq8-qhww-jm7q
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-13
OSVUBUNTU-CVE-2026-615448.2

libp2p-rust is the official Rust language implementation of the libp2p networking stack. Prior to 0.13.1, libp2p-quic could panic during an inbound QUIC handshake when a remote peer presented a valid short-lived libp2p TLS certificate and delayed the final TLS 1.3 handshake fragment until after the certificate expired. In the Quinn post-handshake upgrade path, transports/quic/src/connection/connecting.rs called libp2p_tls::certificate::parse a second time in remote_peer_id and used expect on the result. The repeated wall-clock validity check could reject the now-expired certificate, causing the expect call to terminate any application exposing an affected libp2p-quic listener. This vulnerability is fixed in 0.13.1.

Record
UBUNTU-CVE-2026-61544
CVSS 4.0
8.2 HighCVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
OSVRUSTSEC-2026-0525No score

Remote panic when a peer certificate expires during the QUIC handshake

After the QUIC handshake finished, the peer's libp2p TLS certificate was parsed a second time to get its peer ID, and the result was unwrapped with expect, on the assumption that it could not fail because the certificate had already been validated. Parsing checks the certificate's validity period again against the current time. A remote peer can present a certificate that is about to expire and delay the end of the handshake until it has expired, so the second parse fails and the process panics. No authentication is needed; any application with a reachable QUIC listener is affected.

The fix returns a connection error instead of panicking when the peer identity or certificate cannot be read after the handshake. It is in 0.13.1, and was backported to the main branch in libp2p/rust-libp2p#6525 for 0.14.0.

Record
RUSTSEC-2026-0525
Updated
2026-11-13

History

History
RecordedChangedSources
affected, aliases, facts, published, referencesOSV
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

References

Show 6 moreShow less
MoveEnter Open