比特派钱包官方网址|Cosmos联创:BNB Chain攻击事件中黑客通过RangeProof伪造Merkle证明

PANews 10月9日消息,对于近日BSC跨链桥攻击事件,Cosmos联合创始人Ethan Buchman在推特上表示,此次事件问题的关键在于黑客能够伪造Merkle证明。这本不应该,因为Merkle证明应该提供高完整性。区块链轻客户端(和IBC)建立在Merkle证明之上,许多区块链将数据存储在Merkle树中,这样就可以生成证明,证明某些数据包含在树中。币安的情况是攻击者能够证明某些数据在树中,但它实际上不在树中。Cosmos链使用一种称为IAVL的Merkle树,IAVL存储库公开了一个使用范围证明“RangeProof”的API,但事实证明RangeProof的内部工作存在严重错误。一个证明应该由一个叶节点和一系列内部节点组成,这些节点勾勒出树中从叶到根的路径,具有足够的信息来计算树的Merkle根哈希并验证叶实际上是树的一部分。因为这是一个二叉树,所以每个内部节点都可以有一个左分支和右分支。但证明是通过跟踪树中的路径,所以内部节点应该只包含其左分支或右分支哈希,另一个是根据证明中其他节点的哈希构造的。IAVL RangeProof的代码问题在于其允许填充InnerNode中的Left和Right字段,攻击者基本上利用了将信息粘贴到Right字段中的优势,这些信息从未得到验证,也从未影响哈希计算,以使验证者相信某些叶节点是树的一部分。因此,他们成功地伪造了Merkle证明。

Buchman表示,虽然使用RangeProof不是一个好主意,但有一个方式或可以解决这个问题,即当任何内部节点同时填充了左右字段时,则预先拒绝证明。虽然RangeProof是核心Cosmos存储库 (IAVL) 的一部分,但它实际上并未用于Cosmos堆栈中的区块链协议。IAVL树本身被所有Cosmos-SDK链使用,但RangeProof不是。对于IBC中的Merkle证明,IBC没有使用IAVL树的内置RangeProof系统,而是使用ICS23标准从IAVL树生成和验证Merkle证明,ICS23代码没有这个漏洞,它可明确“拒绝”范围证明(RangeProof)。

据悉,Cosmos旧版本存在RangeProof相关漏洞,目前Cosmos链经过多次迭代更新,根据Buchman的说法,虽然币安是Cosmos软件的最大用户,但其不关注Cosmos进展,所以导致此次攻击事件。