https://medium.com/@numencyberlabs/bsc-chain-cross-chain-bridge-hacking-analysis-24338f9a80
攻击的简要描述
黑客(地址:0x489a8756c18c0b8b24ec2a2b9ff3d4d447f79bec)利用跨链桥消息验证机制基础库代码IAVL TREE中的漏洞,伪造恶意提现消息,导致跨链桥分别发送两笔交易到黑客,每个价值 100 万个 BNB,总计约 6 亿美元。
CoinSec 的及时响应遏制了攻击,使他们挽救了大部分资产,结果仅损失了大约 1 亿美元。尽管如此,在公众和 BNBChain 的眼中,这仍然被认为是一笔不小的数目。
交易地址:
https://bscscan.com/tx/0xebf83628ba893d35b496121fb8201666b8e09f3cbadf0e269162baa72efe3b8b
漏洞利用方法论分析
攻击发生在币安桥为 BSC 提供流动性价值的 BSC 链上。根据我们的分析,我们确定攻击背后的关键组件是IAVL树 在 BSC L1 上,最初由 COMOS 实现并由 BSC Chain 使用。这种利用被称为跨链攻击。
IAVL树用于验证发送到币安跨链桥的消息的合法性。
通常,IAVL 树会自动拒绝黑客伪造的消息。然而,这次攻击者在 IAVL 验证过程中发现了一个漏洞,从而可以诱使 IAVL 树接受任意消息。这允许黑客通过仔细构建和伪造消息从跨链桥中提取 2M BNB。
IAVL 树,顾名思义,是一种自平衡二叉搜索树,以其发明者 Georgy Adelson-Velsky 和 Evgenii Landis 的名字命名。其数据结构的目的是为键值对提供持久存储,例如存储账户余额),以便确定性的 Merkle 根哈希可以是计算机。
黑客调用了BSC跨链桥接合约中的handlePackage函数,随后又调用了预编译合约来验证MerkleProof的合法性。
什么是预编译?
预编译在操作系统中起着类似于系统调用的作用。当操作系统接受了这个系统调用号(这个号类似于0x65),就会执行相应的系统调用。一般情况下,合约地址是在部署合约的时候生成的,然后直接写死 0x65 。当BSC L1找到这个地址后,直接去调用MerkleProof流程,也就是去调用IAVLTree。
攻击简而言之
通过部署合约,黑客调用了BSC跨链桥接合约的handlePackage函数
(https://bscscan.com/address/0x000000000000000000000000000000000002000#code#L1082 )
伪造证明数据,通过IAVL树校验和,从而使跨链桥向黑客转移2M BNB。
最后,
Samczsun 已对该漏洞的性质进行了一些推测,但尚未确认所有细节是否准确。我们目前也正在对这次攻击进行分析,等到更多细节被揭露后,我们会继续发布更多信息。我们鼓励您继续关注并关注我们对攻击的后续分析。