libp2p: Gossipsub StrictSign accepts attacker-signed messages as a victim RSA peer ID
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- None
- Attack complexity
- Low
- Impact type
- Security bypass
- Confidentiality · integrity · availability
- None · High · None
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub. Impact type from CWE-345.
Summary
libp2p is a JavaScript implementation of the libp2p networking stack. From 15.0.0 until 16.0.5, @libp2p/gossipsub uses the default StrictSign policy in packages/gossipsub/src/utils/buildRawMessage.ts, where validateToRawMessage verifies a signature with attacker-controlled msg.key but skips binding that key to msg.from when the claimed author is an RSA peer ID that does not inline a public key. An unauthenticated attacker can place a victim RSA peer ID in msg.from, sign the message with the attacker's private key, and supply the attacker's public key in msg.key, causing the message to be accepted and propagated as authored by the victim. Applications that trust message.from for validators, authorization, accounting, moderation, reputation, or audit logging can process attacker-controlled data under false origin attribution. The issue is fixed in version 16.0.5.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- 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
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| libp2p | js-libp2p | 15.0.0 to before 16.0.5 | 16.0.5 | Patch available | CNA |
| — | @libp2p/gossipsub (npm) | 15.0.0 to before 16.0.5 | 16.0.5 | Patch available | GHSA-c3gv-825q-fvmp |
- js-libp2p Vendorlibp2p Affected 15.0.0 to before 16.0.5 Fixed in 16.0.5 Patch available CNA
- @libp2p/gossipsub (npm) Vendor— Affected 15.0.0 to before 16.0.5 Fixed in 16.0.5 Patch available GHSA-c3gv-825q-fvmp
Remediation
- Fix · CNA js-libp2p (libp2p) Fixed in 16.0.5
- Fix · GHSA-c3gv-825q-fvmp @libp2p/gossipsub (npm) Fixed in 16.0.5 Advisory →
Timeline
- 2026-10-02 Threatist record created from CVE-2026-86038
- 2026-10-03 Alias added: GHSA-c3gv-825q-fvmp
References
Other 5
- https://github.com/libp2p/js-libp2p/security/advisories/GHSA-c3gv-825q-fvmp
- https://github.com/libp2p/js-libp2p/pull/3569
- https://github.com/libp2p/js-libp2p/commit/cec2b1f349d130065e561349a0336a239528267f
- https://github.com/libp2p/js-libp2p/releases/tag/gossipsub-v16.0.5
- https://github.com/libp2p/js-libp2p
More libp2p vulnerabilities
- 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-53982 libp2p: Circuit relay v2 server reservation refresh leaks abort listeners and allows remote resource exhaustion CVSS 3.1HIGH 7.5
- TI-2026-51658 py-libp2p: yamux connection DoS via oversized data frame CVSS 3.1HIGH 7.5
Sources
- CVE-2026-86038 · CVE Program
- CVE-2026-86038 · NVD
- FIRST EPSS
- GHSA-c3gv-825q-fvmp · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences