CVE-2026-33040libp2p-rust是libp2p网络协议栈的官方Rust语言实现,广泛用于构建去中心化应用。在0.49.3版本之前,其Gossipsub实现模块存在一个高危安全漏洞。该漏洞源于组件在处理PRUNE控制消息时,错误地接受了攻击者控制的退避参数,并在后续的状态更新逻辑中执行了未检查的时间算术运算。远程攻击者可以通过发送特制的PRUNE消息,其中包含极大的backoff值(例如u64::MAX),触发目标系统在计算持续时间时发生溢出。这将导致网络状态机发生panic,进而使应用程序崩溃。该漏洞利用条件低,无需用户交互或身份认证,且攻击者可以通过重连重复触发攻击,对服务可用性造成严重影响。
该漏洞的根本原因在于libp2p-rust的Gossipsub组件缺乏对输入参数的有效验证,特别是针对PRUNE控制消息中的backoff参数。PRUNE消息通常用于告知对等方在一段时间内不要重新连接。受影响的版本直接将攻击者提供的backoff值用于时间计算,而没有检查该值是否会导致算术溢出。
具体利用过程中,攻击者建立一个libp2p连接并发送一个恶意的PRUNE消息,设定backoff为u64::MAX(即2^64 - 1)。当受害节点尝试使用这个巨大的数值更新其内部计时器时,执行`Instant::checked_add`或类似操作(或溢出的加法),导致时间计算溢出。在Rust中,这通常会导致panic或逻辑错误,从而终止当前线程或整个进程。
由于libp2p常用于P2P网络,攻击者只需能连接到目标节点的监听端口即可发起攻击。由于没有身份验证要求,且Panic会导致服务不可用,这使得该漏洞成为高效的远程拒绝服务攻击向量。修复方案是在处理backoff值前进行严格的范围检查或使用安全的算术运算方法。