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

CVE-2026-33184 Nimiq core-rs-albatross 整数溢出致拒绝服务

披露日期: 2026-04-03

漏洞信息

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

相关标签

CVE-2026-33184DoSInteger UnderflowNimiqRustPanic

漏洞概述

nimiq/core-rs-albatross 是基于 Albatross 共识算法的 Nimiq 权益证明协议的 Rust 实现。在 1.3.0 版本之前,该组件存在安全漏洞。漏洞原因是发现处理器在握手过程中接受了对等方控制的限制值并未经修改直接存储。当攻击者将 limit 设置为 0 时,初始握手确认路径会返回 0 个联系人,使会话看起来正常。但在会话建立后的周期性更新路径中,代码计算 `self.peer_list_limit.unwrap() as usize - 1`,由于 limit 为 0,导致整数下溢为 `usize::MAX`,进而触发内存分配溢出 panic,导致服务崩溃。该问题已在 1.3.0 版本中修复。

技术细节

该漏洞是一个典型的整数下溢导致的拒绝服务漏洞。受影响的产品在处理 P2P 握手时,未对参数 `limit` 进行边界检查。攻击者可以构造一个恶意的握手请求,将 `limit` 字段设为 0。受害节点接收后,会将其存储。当会话状态变为 Established 并执行周期性任务时,代码尝试计算 `limit - 1`。在 Rust 语言中,`usize` 是无符号整数类型,`0 - 1` 不会变成 -1,而是回绕为该类型的最大值 `usize::MAX`(在 64 位系统上是一个非常大的数)。随后,程序调用 `Vec::with_capacity(amount)` 尝试分配该大小的内存,这显然超出了系统可用的内存范围,导致容量溢出并引发 `panic`,从而强制终止节点进程,导致拒绝服务。

攻击链分析

STEP 1
1. 建立连接
攻击者与运行受影响版本的 nimiq/core-rs-albatross 节点建立网络连接。
STEP 2
2. 发送恶意握手
攻击者在握手消息中将 `peer_list_limit` 参数设置为 0。
STEP 3
3. 绕过初始检查
目标节点接收参数,`HandshakeAck` 路径处理 limit=0,返回空列表,会话看起来正常,进入 Established 状态。
STEP 4
4. 触发整数下溢
节点执行周期性更新任务,计算 `0 - 1`,导致整数下溢为 `usize::MAX`。
STEP 5
5. 拒绝服务
程序尝试分配超大内存,触发 Capacity Overflow Panic,节点进程崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// This is a conceptual Proof of Concept demonstrating the vulnerability trigger. // It simulates the vulnerable logic in nimiq/core-rs-albatross prior to v1.3.0. fn trigger_vulnerability(peer_limit: usize) { // Simulating the state where the session is Established // and the periodic update path is running. // The vulnerable code path calculates the amount for vector allocation // based on the peer-controlled limit. // Vulnerability: `peer_limit - 1` where peer_limit = 0 causes underflow. let amount = peer_limit - 1; println!("Allocating vector with capacity: {}", amount); // This mimics the call chain inside rand 0.9.2 choose_multiple() // Vec::with_capacity will panic if the calculation overflows/is too large. let _vec: Vec<u8> = Vec::with_capacity(amount); println!("Allocation successful (should not reach here if limit was 0)"); } fn main() { // Attack scenario: Peer sends limit = 0 during handshake let malicious_limit = 0; println!("Triggering vulnerability with limit = {}", malicious_limit); trigger_vulnerability(malicious_limit); }

影响范围

nimiq/core-rs-albatross < 1.3.0

防御指南

临时缓解措施
建议立即应用官方补丁升级到修复版本。如果暂时无法升级,应严格限制对等节点的连接来源,仅允许受信任的节点连接,以减少被攻击的风险。

参考链接

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