CVE-2026-34064Nimiq-account库在1.3.0版本之前存在一处严重的拒绝服务漏洞。该漏洞源于VestingContract合约在处理余额变动时的逻辑错误。当检测到余额不足时,代码尝试计算差值以构建错误信息,却未对操作数进行大小校验,导致整数下溢引发运行时Panic。攻击者可利用此漏洞,通过构造特殊的合约创建数据绕过验证,进而触发节点崩溃,严重影响了区块链网络的可用性。
该漏洞位于Nimiq Rust实现的nimiq-account组件中,具体涉及VestingContract::can_change_balance方法。漏洞的触发条件是由于合约创建时的数据校验缺失。在创建VestingContract时,系统未严格验证total_amount是否小于等于交易的实际转入值(transaction.value),这使得攻击者能够构造一个total_amount极大的恶意合约。当该合约尝试执行余额变更操作时,若new_balance小于min_cap(由total_amount衍生),代码会进入错误处理分支。此时,程序试图计算self.balance - min_cap来生成错误详情,但忽略了min_cap可能远大于balance的情况。在Rust语言中,Coin::sub操作在发生下溢时会直接触发Panic,导致进程终止。攻击者只需广播一笔触发该路径的交易,即可导致运行该版本的Nimiq节点崩溃,造成严重的拒绝服务后果。