CVE-2026-34063Nimiq的network-libp2p是一个基于libp2p的网络实现库。在1.3.0版本之前,该组件的发现机制使用的libp2p ConnectionHandler状态机存在逻辑缺陷。该处理器假设每个连接最多只存在一个入站和一个出站的发现子流。当远程对等点在同一连接上第二次打开或协商发现协议子流时,处理器会触发panic(“Inbound already connected”或“Outbound already connected”)路径,而不是优雅地失败关闭。这一漏洞导致远程对等点的网络任务崩溃,致使节点P2P网络下线,直到重启才能恢复。目前该漏洞已在v1.3.0版本中修复,暂无已知的变通方法。
该漏洞的根本原因在于Nimiq's network-libp2p库内部对libp2p ConnectionHandler状态机的实现存在逻辑缺陷。开发者假设每个连接中仅存在一个入站和一个出站的发现子流,但未对违反此假设的异常情况进行防御性编程(即Fail-Closed机制)。在Rust语言中,调用panic!会导致当前线程堆栈展开并终止。在P2P网络场景下,如果攻击者与受害节点建立连接后,恶意地在该连接上重复发起发现协议的子流协商或打开新的子流,程序逻辑将判定为状态异常,进而直接触发panic!("Inbound already connected")或panic!("Outbound already connected")。由于该panic中断了底层的Swarm任务,导致整个P2P网络模块崩溃。利用此漏洞无需任何身份认证,攻击者仅需网络可达,即可通过发送特制的协议流序列导致节点掉线,形成严重的拒绝服务攻击。