「我们不用多签,我们用证明」这句话的价值,取决于那个证明验证函数是否真的验证了它声称在验证的东西。
撰文:AliceLord
2026 年 4 月 13 日 03:55:23 UTC,以太坊上一笔交易安静地完成了。从部署合约到铸出十亿枚桥接 DOT,到进 Uniswap V4 抛售,到 108.2 枚 ETH 落袋,全程单笔原子交易,没有任何中间停顿。
随后,加密社交媒体上的第一波标题几乎都是「Polkadot 被黑了」。
这句话说对了三分之一。被黑的是 Hyperbridge 部署在以太坊上的跨链网关合约,以及由它托管的桥接 DOT 代币。Polkadot 中继链、原生 DOT 的发行规则、平行链生态,没有被碰。把这个区别说清楚不是在替谁减压,而是分析这件事的前提——只有搞清楚哪个信任边界断了,才能知道该修什么。
先把链上可查的硬事实列清楚。所有地址均为以太坊网络。
同日稍早,同一漏洞路径已被另一个地址利用,盗走约 1.2 万美元的 MANTA 和 CERE 代币,属于同一系列攻击的前哨。
Hyperbridge 由 Polytope Labs 开发,走的是「以证明替代多签」的跨链互操作路线,核心协议是 ISMP(Interoperable State Machine Protocol,互操作状态机协议)。它的 EVM 侧由三个关键模块构成:
IHost(IsmpHost):状态存储核心。持有共识状态、状态承诺、请求承诺和回执、响应承诺和回执。每一笔跨链操作最终都要在这里留下可查的账本痕迹。
IHandler(HandlerV1):无状态入口。所有 ISMP 消息的接收端,负责执行共识证明和状态证明的验证,是这次攻击的核心突破口。
TokenGateway:代币网关。处理资产的跨链逻辑,接收经 IHandler 验证通过的消息,执行具体的代币操作——铸造、销毁、管理员变更等。
设计逻辑上,IHandler 承担验证门卫的角色,只有通过验证的消息才能被 TokenGateway 接收执行。两层分离,职责清晰。攻击者的突破口,就在第一层的验证逻辑里。
BlockSec Phalcon 的分析定位到了 HandlerV1 合约中 VerifyProof() 函数存在输入验证缺失的问题:该函数没有校验 leaf_index 是否小于 leafCount,在特定参数组合下,MMR 计算可能将被请求的承诺完全排除在外。这个缺口让攻击者可以将证明与实际消息解耦,伪造出看似有效的跨链消息。
MMR(Merkle Mountain Range)是 Polkadot 生态常用的链上状态承诺结构,Hyperbridge 用它来证明跨链消息的合法性。正常情况下,一个有效的 MMR 证明必须同时绑定两件事:这个状态真实存在于源链,以及这个状态对应的就是当前这条请求消息。少了后半句,就成了「证明过去某个状态有效」,而不是「证明这条请求消息有效」。
据 TheStreet 的报道,CertiK 的分析指出攻击者提交了一个伪造的「证明」,复用了此前某笔合法交易中的数据。根验证函数在处理单条数据条目时,未能确认数据与其对应请求之间的绑定关系,从而使重放攻击成为可能——攻击者得以将一条已获批准的历史消息当作全新的有效消息重新使用。
更关键的一个细节来自 CoinDesk 的链上追踪:链上记录显示,攻击者通过 dispatchIncoming 提交伪造消息,消息被路由至 TokenGateway.onAccept。原本应将消息与 Polkadot 有效跨链状态承诺进行核对的请求回执检查,存储的是全零值,说明这条特定调用路径上的证明验证要么完全缺失,要么可被绕过。
还有一个加速漏洞利用的设计细节:合约的挑战期被设置为 0。没有任何争议窗口,伪造证明被系统即时接受,攻击者不需要等待任何时间延迟。
把这三个因素叠在一起:leaf_index 越界未校验 + 证明与请求体之间缺乏绑定校验 + 挑战期为零。结果是攻击者可以用一个历史上合法的 MMR 证明,配上一条精心伪造的 ChangeAssetAdmin 请求,让整个系统相信这条消息是真实来自 Polkadot 的授权指令。
整个攻击发生在单笔交易内,分为五个阶段。
阶段一:筹备(攻击前 33 天)
攻击者核心 EOA(0xC513...F8E7)通过 Railgun 隐私池和 Synapse Bridge 完成初始资金注入,进行地址匿名化处理,累计完成超 50 笔链上测试操作,完成漏洞验证和攻击合约调试。
阶段二:部署(单笔交易内)
攻击者在单笔交易内同步部署了一个主合约和一个辅助合约。辅助合约负责构造并提交伪造的状态证明,主合约负责接收权限并执行后续操作。
阶段三:伪造证明,突破 HandlerV1
辅助合约向存在漏洞的 HandlerV1 合约(0x6C84...D64)提交伪造的状态证明,绕过验证检查,HandlerV1.handlePostRequests() 函数将其作为有效证明接受。这一步是整个攻击的核心:验证门卫接受了一张假证件。
阶段四:夺权,执行 ChangeAssetAdmin
伪造证明触发了一条恶意的「ChangeAssetAdmin」操作,通过 TokenGateway.onAccept() 路径执行,将桥接 DOT 合约(0x8d01...b8)的管理员和铸造者权限转移至攻击者地址。这一步的意义在于:攻击者不需要破解任何私钥,只需要让系统相信这条「行政变更」消息来自合法的跨链治理流程。
阶段五:铸币、抛售、归集
拿到管理员权限后,攻击者调用 mint,从零地址铸出 10 亿枚桥接 DOT。10 亿枚 DOT 被路由进 Odos Router 和 Uniswap V4 的流动性池,获得约 108.2 ETH。攻击前该池内桥接 DOT 的流通量约为 35.6 万枚,一次性涌入 10 亿枚,池子瞬间见底,价格从 1.22 美元跌至接近零。所得 ETH 经多层中间合约归集回攻击者 EOA,随后以 15 枚为单位分批进入 Railgun 混币。
这个反差值得单独说,因为它揭示的不是「攻击不成功」,而是跨链桥攻击的变现上限逻辑。
安全机构的警告是:同类型的桥接漏洞若发生在流动性更深的池子或更高价值的资产上,损失规模将截然不同。这次攻击者能变现的上限,由以太坊上桥接 DOT 池的深度决定,而不是由铸出的名义数量决定。池子里有多少 ETH,攻击者就最多换多少——10 亿枚桥接 DOT 的「市值」,在铸出的瞬间就已经是幻象。
所以衡量这次事件严重程度的不是 23.7 万美元,而是攻击者获得了完整的资产管理权限,而这个权限在任何流动性更深的环境下都会带来更大的破坏。
把 Hyperbridge 这次放进跨链桥攻击历史里,它的位置很清晰:
Ronin(2022)是控制平面被攻破。攻击者获取了足够数量的验证节点私钥,可以直接签署假提款指令。漏洞在运营安全,不在验证逻辑。
Wormhole(2022)是验证绕过引发合成资产铸造。攻击者在 Solana 侧注入伪造的系统账户,绕过 complete_wrapped 的验证,铸出 12 万枚 wETH。证明逻辑被骗,而不是签名被盗。
Nomad(2022)是验证默认值失效。一次合约升级让系统进入了「特定构造的交易不经完整验证即被接受」的状态,随后演变为公开复制粘贴式的集体攻击。
Hyperbridge 这次最接近 Wormhole 的家族谱系:验证逻辑被欺骗,目标链侧的授权因此失效,攻击者无需动原生资产就能在目标链侧完成铸造。三者共同揭示的规律是——跨链桥往往因为实现层面的缺陷而被攻击,而非设计层面的根本失败;Hyperbridge 的案例同样如此,问题出在具体的验证检查缺失,而非跨链证明模型的整体崩溃。
Hyperbridge 在被黑之前一直把「以证明替代多签」作为核心安全主张。这个方向是对的。但证明系统的安全性不在设计理念,在实现细节——VerifyProof() 里一个缺失的越界检查,加上证明与请求体之间没有绑定校验,就让这个方向上的全部投入在一笔交易里归零。
「我们不用多签,我们用证明」这句话的价值,取决于那个证明验证函数是否真的验证了它声称在验证的东西。
这不是第一次,也不会是最后一次。仅 2026 年第一季度,黑客从 34 个 DeFi 协议中盗取了超过 1.68 亿美元,相比 2025 年同期的 15.8 亿美元大幅下降。数字在改善,但跨链桥作为生态最薄弱的一环,依然是最值得下功夫的地方。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。
