BNB Chain Token Hub 跨链证明伪造事件复盘
基于公开披露资料的事后复盘,非 umibit 受托审计。2022-10-06,攻击者利用 BSC Token Hub 校验跨链 IAVL Merkle 证明的预编译(地址 0x65)的缺陷——证明校验未正确纳入路径节点的 right 子节点,使用户可 伪造出与合法根哈希匹配的证明,凭空铸出 200 万 BNB。验证人在约 90 分钟内协调停链,多数资金未能外流, 实际损失约 $1 亿+。Moran 硬分叉修复了该校验。
This page is a retrospective analysis of a real incident built from public disclosures, for security research and methodology — it does not imply any business relationship between umibit and BNB Chain · BSC Token Hub(原 Binance Bridge). Every claim can be independently checked against the sources below.
- Report number
- BSC-2022
- Affected project
- BNB Chain · BSC Token Hub(原 Binance Bridge)
- Chain
- BNB Beacon Chain · BNB Smart Chain
- Loss
- 铸出 ≈ $570M(2,000,000 BNB)· 实际外流 ≈ $100M+
- Report version
- 复盘 v1.0
- Incident date
- 2022-10-06
- Incident rating
- Critical risk
Related contracts / on-chain objects
Contracts / on-chain objects involved, with their verifiable identity (address / commit), compiled from public disclosures.
| Name | Type | commit | Address |
|---|---|---|---|
| iavlMerkleProofValidate(预编译 0x65) | 跨链证明校验预编译 | — | — |
| BSC Token Hub | 跨链桥 | — | — |
| 攻击者地址(BscScan 标注) | 链上地址 | — | 0x489A8756C18C0b8B24EC2a2b9FF3D4d447F79BEc |
Root causes & findings
Critical 2High 1| ID | Title | Severity | Status | Category |
|---|---|---|---|---|
| BSC-01 | IAVL 证明校验未正确纳入路径节点 right 子节点,可伪造匹配根哈希的证明 | Critical | Resolved | Merkle / cross-chain proof |
| BSC-02 | 用户可提交任意 right 字段与空内部路径,为恶意消息伪造合法包含证明 | Critical | Resolved | Merkle / cross-chain proof |
| BSC-03 | 复用旧区块(高度 110217401)短证明 + 当前 packageSequence 伪造提款包 | High | Resolved | Business logic |
公开事件复盘。 本页基于公开披露资料对一起真实安全事故做事后分析,用于安全研究与方法论说明, 并非 umibit 受托审计。文中数据请以「核验来源」所列公开资料为准。
事件概览
BSC Token Hub 是 BNB Beacon Chain(BEP2)与 BNB Smart Chain(BEP20)之间的原生跨链桥。2022-10-06, 攻击者伪造跨链证明,分两次共铸出 2,000,000 BNB,名义价值约 $5.7 亿。但由于 BNB Chain 验证人在 约 90 分钟内 协调停链,绝大部分 BNB 未能离开链,实际外流约 $1 亿+(另有约 $7M 经 Tether 冻结)。 这里要分清:$5.7 亿是被铸出的名义额、$1 亿+ 才是真正外流的损失。
根因:可伪造的 IAVL 跨链证明
Token Hub 通过一个 预编译合约(地址 0x65,iavlMerkleProofValidate,自 Cosmos 代码 fork) 校验入站跨链包的
IAVL Merkle 证明。缺陷在于:证明校验在计算根哈希时没有正确纳入路径节点的 right 子节点。
由于证明由用户提交,攻击者便在 right 字段塞入任意数据、并使用空的内部节点路径,仍能算出一个与某个合法已提交根
相匹配的根哈希——等于为一条任意的恶意消息伪造出「有效的包含证明」,进而让桥铸出 BNB。具体手法上,攻击者复制了
旧信标链区块(高度 110217401,空块、证明很短)的证明,并塞入带当前 packageSequence 与恶意载荷的伪造叶子。
影响与处置
- 验证人协调停链(约 90 分钟)是把损失从 $5.7 亿名义额压到 $1 亿+ 实际外流的关键——这也引出对链本身 中心化程度的讨论。
- 约 6 小时后以打补丁的客户端恢复;Moran 硬分叉(2022-10-12) 修复 IAVL 哈希校验、增加区块头顺序校验并 白名单化中继者;相关 Cosmos/IAVL 漏洞另发「Dragonberry」公告。
AI 视角 · 为什么这类风险只会更多
BSC 与 Wormhole、Nomad 同属一个家族:跨链桥的「证明/验签」环节出错。它们各自的 bug 形态不同(IAVL 子节点漏算 / Sysvar 账户没校验 / 可信根被初始化为零),但共性是——把对方链的状态「证明」给本链时,校验逻辑存在可被构造的缝隙, 而桥上压着的资金体量让每条缝隙都价值连城。
这类密码学/证明校验缺陷,恰是需要 对边界条件穷举、对 fork 来的底层代码逐处复核 的地方;人工很难穷尽所有路径, 而攻击者已在用自动化与 AI 系统性地寻找这类缝隙。把「跨链证明的每一条校验路径」纳入可规模化的覆盖与对拍,并在上线前 跑满,是抵御「桥类 0day」的现实前提。
Sources
The public material this page relies on; every data point and claim can be checked against it.
Cross-check the official root-cause analyses, security-firm reports and block explorers in Sources above to independently verify the incident date, loss, root cause and on-chain addresses.