By:Kong
2022 年 10 月 7 日,BNB Chian 跨链桥 BSC Token Hub 遭遇攻击。黑客利用跨链桥漏洞分两次共获取 200 万枚 BNB,超 5.7 亿美元。慢雾安全团队分析后以简析的形式分享给大家。(注:BSC Token Hub 是 BNB 信标链(BEP2)和 BNB 链(BEP20 或 BSC)之间的跨链桥)
简要分析
1. 在 BNB Chain 与 BSC 跨链的过程中,会由 BSC 上部署的跨链合约调用预编译的 0x65 合约对提交的 appHash、key、vaule、proof 进行 IVAL 树验证。IAVL 树是 AVL 树的变种即是一种为键值提供可验证根的 AVL 树的实现。
2. 验证主要由 IAVLValueOp 与 MultiStoreProofOp 两个 op 进行,IAVLValueOp 会先通过 ComputeRootHash 计算 roothash 并进行验证。验证通过后会将输出的 roothash 给到 MultiStoreProofOp,MultiStoreProofOp 将检查获得的 roothash 是否与 lightClient 获得的一致。
3. ComputeRootHash 将通过 leaf hash 与 rest path(innernode) 进行递归 hash 并检查是否与 last path node 的 right 一致。
4. 而在具体的 leafnode 与 innernode 的哈希计算中我们可以看到当 left 为空时将计算 leaf 与 right 的 hash,当 right 为空时将计算 leaf 与 left 的 hash。但当 left 与 right 都存在的情况下,那么将忽略 right,计算 leaf 与 left 的 hash,即 roothash 将不会受 right 影响。
5. 因此我们可以知道在 path 中,当 left 与 right 都存在的情况下将忽略 right,返回 leaf 与 left 的 hash,在递归哈希检查中则会检查此 hash 与 last path node 的 right 是否一致。这就出现了在递归检查中检查了 right,而在 roothash 计算中却又忽略了 right 的情况。导致攻击者可以在 path 中加入一个 leaf 与 innernode 的 hash 作为 last path node 的 right 并添加一个空的 innernode 确保可验证。使得在保持 roothash 不受影响的情况下插入了恶意的数据以窃取资金。
MistTrack 分析
据慢雾MistTrack 反洗钱追踪系统分析,这次黑客攻击的初始资金来自 ChangeNOW。
本次攻击事件的黑客地址曾与多个 DApp 交互,包括 Multichain、Venus Protocol、Alpaca Finance、Stargate、Curve、Uniswap、Trader Joe、PancakeSwap、SushiSwap 等。此外,黑客转移至以太坊上的480 万USDT已被Tether列入黑名单,AVAX 上的 170 万 USDT 已被列入黑名单,Arbitrum 上的 200 万枚 USDT 已被列入黑名单。而由于 BNB Chain 的及时暂停,黑客在 BSC 上的超 4.1 亿美元已无法转移。10月 8 日,黑客地址转移约 33,771 枚 ETH 至 0xFA0a3 开头的新地址,约合4,500 万美元。
慢雾MistTrack将持续监控被盗资金的转移。
参考:
https://twitter.com/samczsun/status/1578167198203289600
https://twitter.com/SlowMist_Team/status/1578159110708940801