Web3 漏洞复盘:Verus 跨链桥 1158 万美元“数据结构错位“事件
2026 年 5 月 18 日,Verus-Ethereum Bridge 在一笔交易内被攻击者卷走 1625 ETH、103 tBTC 以及 14.7 万 USDC,合计约 1158 万美元。令人意外的是,这并不是一起私钥泄露或闪电贷操纵事件,而是一次典型的跨链序列化形态歧义导致的灾难。
一、事件速览 ⏱️
时间:2026 年 5 月 18 日 上午(UTC+8)
目标:Verus 与 Ethereum 之间的官方跨链桥
损失:约 1158 万美元
攻击特征:单笔交易完成,未触发任何异常告警
根因定性:跨链数据结构解析不一致 + 固定偏移读取 + 金额未与哈希绑定
二、漏洞核心:一套数据,两种「体型」🧩
问题的本质在于:Verus 侧链在导出跨链转账数据时,使用了名为 CCrossChainExport的结构体。这个结构体在序列化时存在两种形态:
第一种是默认的 Full Export,包含完整的转账元数据;第二种是 Supplemental Export,仅包含精简字段,通常用于补充信息。这两种形态的字段顺序和内存布局完全不同。
然而,以太坊端的智能合约在解析这些数据时,采用了固定偏移(Fixed Offset)的读取方式。这意味着合约假设自己收到的永远是 Full Export,并严格按照 Full Export 的字段位置去读取「转账金额」和「接收地址」。
📌 致命的疏忽就在这里:以太坊端没有校验数据头部的 FLAG_SUPPLEMENTAL标志位,也没有根据标志位切换解析逻辑。当 Supplemental Export 被提交时,合约依然按老规矩办事,结果把「非金额字段」错误解读成了「巨额转账金额」。
三、攻击链路拆解 🔓
Verus 桥的资金出口主要依赖 TokenManager.processTransactions。攻击者精心构造了以下攻击路径:
准备阶段:通过 Tornado Cash 获取 ETH 作为 Gas,抹去资金来源痕迹。
构造恶意 Export:在 Verus 侧构造一条带有 FLAG_SUPPLEMENTAL标志的交易导出数据。在 Verus 原生语义中,这是一条合法的补充导出,但在以太坊端看来,它的字段布局是错位的。
提交并欺骗验证:调用 submitImports将恶意数据提交到以太坊。在 proveImports阶段,由于数据本身的格式是合规的,Merkle 证明顺利通过,系统误以为这是一笔真实的跨链转账。
错位出金:TokenManager按照被错误解析出的「巨额数值」向攻击者地址打款。
如果用伪代码来还原这个漏洞,逻辑大致如下:
// 以太坊端存在缺陷的解析逻辑
function parseExport(bytes calldata raw) internal pure returns (address to, uint256 amount) {
// ❌ 假设 raw 永远是 full export 形态
// 偏移 64 处被硬编码认定为 amount
to = address(uint160(bytes20(raw[32:52])));
amount = uint256(raw[64:96]);
}
// 攻击者传入的是 supplemental export
// raw[64:96] 实际上存储的是其他控制字段
// 但 parseExport 毫无察觉,直接将其作为金额读出
攻击者甚至不需要破解任何私钥,也不需要伪造 Merkle 树,仅仅利用了两端对数据结构语义理解的割裂,就实现了千万美元级别的盗取。
四、为什么这个漏洞更具警示意义 ⚠️
回顾过去几年的跨链桥黑客事件,大多集中在 Guardian 签名验证绕过、多签私钥泄露或管理员权限滥用等传统安全领域。Verus 这次事件标志着攻击面的转移:
威胁已经从「谁能签证明」转向了「证明到底证明了什么」。
当源链和目标链由不同团队开发、使用不同语言、采用不同序列化框架时,任何一个被忽略的 Flag、任何一个为了「兼容性」而保留的隐式行为,都可能成为突破口。在这个案例中,Merkle 证明本身是完美的,签名也是有效的,唯一失效的是人类对数据含义的共识。
五、防守建议 🛡️
针对此类「语义不一致」漏洞,BitsLab 提出了三点核心防御策略:
显式校验数据结构版本与 Flag
接收到跨链数据后的第一件事,必须是校验其形态标识。对于不支持或无法识别的数据结构,应当直接回滚(Revert),坚决杜绝「优雅降级」带来的隐性风险。
放弃固定偏移解析
严禁在代码中硬编码 raw[64:96]这类偏移量。应当使用带长度前缀的强类型反序列化方案(如 ABI 编码或 Scale Codec),让解析器在解码阶段自动拦截形态不匹配的数据。
金额与哈希双向绑定
在 proveImports阶段,不仅要证明数据存在,还要证明数据中的金额与后续出金逻辑中的金额完全一致。将 (amount, recipient, txHash)在证明阶段就进行强绑定,防止出金路径被恶意构造的 serializedTransfers劫持。
结语
Base 排序器事件是「执行层日志没清干净」,Verus 事件是「序列化 Flag 没校验」。两者相隔半个月,发生在不同层级,但根子上指向同一个真理:在 Web3 世界里,状态和数据结构的生命周期管理,容不得半点「差不多就行」的侥幸。
跨链桥作为连接万亿资产的超级枢纽,其安全边界早已不再局限于密码学证明,更在于代码对数据语义的精确掌控。🌐
维铂叁(Web3)是一家聚焦于区块链与数字资产领域法律前沿的专业研学与能力发展机构。我们专注于为律师、企业法务及司法从业者,提供该领域的系统性知识更新、实务技能研习与合规思维赋能。
在Web3技术浪潮与全球监管格局快速演进的背景下,我们深知法律人面临的挑战与机遇。维铂叁的核心价值在于 “前沿洞察、实务研习、生态链接” ,致力于搭建一个连接学界智慧与实务经验的跨界交流平台。
我们的课程与研学内容,由来自顶尖法学院校的学者,以及在该领域拥有丰富实践经验的专家共同设计研发。内容涵盖技术原理、全球监管动态比较、典型司法案例剖析及创新业务模式观察等多个维度,旨在帮助法律从业者构建系统性的知识框架,提升在该新兴领域的专业研判能力。
维铂叁坚信,专业的价值在于持续学习与深度思考。我们的使命是陪伴法律职业群体,在数字经济的变革中,夯实专业根基,拓展认知边界,以更完备的知识储备应对未来的挑战,共同促进区块链技术在合规框架内的创新与应用。
