IPBUF安全漏洞报告
English
CVE-2026-34063 CVSS 7.5 高危

CVE-2026-34063 Nimiq network-libp2p 拒绝服务漏洞

披露日期: 2026-04-22

漏洞信息

漏洞编号
CVE-2026-34063
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Nimiq network-libp2p

相关标签

拒绝服务CVE-2026-34063NimiqP2PRustlibp2p

漏洞概述

Nimiq的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网络模块崩溃。利用此漏洞无需任何身份认证,攻击者仅需网络可达,即可通过发送特制的协议流序列导致节点掉线,形成严重的拒绝服务攻击。

攻击链分析

STEP 1
侦察
攻击者扫描网络寻找暴露了P2P端口的Nimiq节点。
STEP 2
建立连接
攻击者与目标节点建立libp2p TCP连接,并完成基本的协议握手。
STEP 3
协议协商
攻击者在已建立的连接上正常发起第一次发现协议子流协商。
STEP 4
触发漏洞
攻击者在同一连接上再次发起发现协议子流协商。由于代码未处理此情况,触发panic。
STEP 5
服务中断
目标节点的网络任务因panic而崩溃,导致P2P网络功能瘫痪。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import asyncio import logging # This is a conceptual PoC to demonstrate the vulnerability trigger logic. # Actual exploitation requires implementing the libp2p protocol handshake. async def trigger_vulnerability(target_ip, target_port): logging.basicConfig(level=logging.INFO) # 1. Establish a connection to the target Nimiq node # In a real scenario, this would be a libp2p TCP connection logging.info(f"Connecting to {target_ip}:{target_port}...") # reader, writer = await asyncio.open_connection(target_ip, target_port) # 2. Perform libp2p handshake (Multistream-select) # Assuming handshake succeeds and connection is established logging.info("Connection established. Simulating discovery substream...") # 3. Open first discovery substream (Normal behavior) # The handler accepts this and sets state to 'connected' logging.info("Opening first discovery substream...") # send_protocol_request(writer, "/nimiq/1.0.0/discovery") # 4. Open second discovery substream (Trigger vulnerability) # The handler expects only one substream. Opening a second one # triggers the panic: "Inbound/Outbound already connected" logging.info("Opening second discovery substream (Triggering Panic)...") # send_protocol_request(writer, "/nimiq/1.0.0/discovery") # Result: The remote node's task panics and crashes, taking the P2P network offline. logging.info("Attack packet sent. Remote node should crash.") # writer.close() # await writer.wait_closed() if __name__ == "__main__": # Replace with actual target asyncio.run(trigger_vulnerability("127.0.0.1", 8444))

影响范围

nimiq/network-libp2p < 1.3.0

防御指南

临时缓解措施
目前没有已知的变通方法。建议管理员尽快将受影响的组件升级到v1.3.0版本以修复此漏洞。在升级前,可以通过网络防火墙限制对P2P端口的访问,仅允许受信任的对等节点连接,以降低被恶意攻击的风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表