Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

This article is not available in the current language yet. Showing the original version.
CZ:网络暂停,用户资金安全。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

作者:秦晓峰
原文:《解析:约5.66亿美元BNB被盗全过程》

北京时间今天上午, BNB Chian 跨链 桥 BSC Token Hub 遭遇攻击。黑客利用跨链桥漏洞分两次共获取 200 万枚 BNB,价值约 5.66 亿美元。(注:BSC Token Hub 是 BNB 信标链(BEP2)和 BNB 链(BEP20 或 BSC)之间的跨链桥。)

消息一出,BNB 价格在 2 小时内一度下跌近 5%,跌至 278.7 美元低点,现报价 284 美元,24 小时跌幅 4.24%。

根据 BNB Chain 的说法,从 BSC 提取的资金的初步估计在 1 亿美元至 1.1 亿美元之间。并且,Tether 也在第一时间将黑客地址列入黑名单。“感谢社区和我们的内部和外部安全合作伙伴,估计 700 万美元已经被冻结。”

Binance 创始人 CZ 在社交媒体上发文表示,目前 币安 已要求所有验证者暂停 BSC 网络,用户的资金是安全的,对于给用户带来的不便深表歉意,并将相应地提供进一步的更新。

针对具体的攻击方式, Paradigm 研究员 samczsun 在社交媒体上发文表示,链上数据及相关代码显示,BSC 跨链桥的验证方式存在 BUG,该 BUG 可能允许攻击者伪造任意消息;本次攻击中,攻击者伪造信息通过了 BSC 跨链桥的验证,使跨链桥向攻击者地址发送了 200 万枚 BNB。

samczsun 分析文章如下:

五小时前,攻击者从 Binance Bridge 窃取了 200 万 BNB(约 5.66 亿美元)。此后我一直在与多方密切合作致力于揭示这一切如何发生的。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

事情的起因是 @zachxbt 突然把攻击者的地址发给了我。当我点击进去的时候,我看到了一个价值数亿美元的账户;要么是有项目 rug 跑路,要么就是正在进行大规模的黑客攻击。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

一开始,我以为 @VenusProtocol 又被黑了。然而,很快我就确定了攻击者“真的”向 Venus 存入了超过 2 亿美元。这时我就需要弄清楚这些资金的来源。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

答案是,攻击者以某种方式说服了币安跨链桥,直接给他们(黑客)发送了 1,000,000 BNB,而且是两次。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

要么币安推出 Web3 有史以来最大的“礼包”,要么攻击者发现了一个严重的漏洞。我首先将攻击者的交易与合法提款进行比较。我注意到的第一件事是攻击者使用的高度始终相同——110217401,而合法提款使用的高度要大得多,例如 270822321。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

我还注意到攻击者的证明明显短于合法提款的证明。这两个事实使我确信,攻击者已经找到了一种方法来伪造该特定区块(110217401)的证明。现在,我必须弄清楚这些证明是如何工作的。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

在 Binance 上,有一个特殊的预编译合约用于验证 IAVL 树。如果您对 IAVL 树一无所知,也不要担心,因为有 95% 的内容我都不懂。幸运的是,你和我所需要的只是剩下的 5%。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

基本上,当你验证一个 IAVL 树时,你指定了一个“操作”列表。币安跨链桥通常需要两个操作:“iavl:v”操作和“multistore”操作。以下是它们的实现(implementation):https://github.com/bnb-chain/bsc/blob/46d185b4cfed54436f526b24c47b15ed58a5e1bb/core/vm/lightclient/multistoreproof.go#L106-L125

为了伪造证明,我们需要两个操作都成功,并且我们需要最后一个操作(multistore))返回一个固定值(指定块的哈希值:110217401)。

通过查看implementation,我们可以发现,操纵根哈希是不可能的,或者至少非常困难。这意味着我们需要我们的输入值等于其中一个提交 id。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

“multistore”操作的输入值是“iavl:v”操作的输出值。这意味着我们想以某种方式控制这里的根变量,同时仍然通过值验证。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程(12)那么如何计算根哈希?它发生在一个名为 COMPUTEHASH 的函数中。在非常高的层次上,它递归地遍历每条路径和叶节点并进行大量的哈希运算。

https://github.com/cosmos/iavl/blob/de0740903a67b624d887f9055d4c60175dcfa758/proof_range.go#L237-L290

实际上实现细节并不重要,重要的是,由于哈希函数的工作方式,我们基本上可以肯定地说,任何(path, nleaf)对都会产生唯一的哈希。如果我们想伪造证据,这些就得保持不变。

查看证明在合法交易中的布局方式,我们看到它的路径很长,没有内部节点,只有一个叶节点,这个叶节点包含我们恶意载荷的哈希值!如果我们不能修改这个叶节点,那么我们需要添加一个新的叶节点。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

当然,如果我们添加一个新的叶节点,我们还需要添加一个新的内部节点来匹配。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

现在我们只需要面对最后一个障碍。我们如何真正让 COMPUTEHASH 返回我们想要的根哈希?好吧,请注意,最终我们将需要一个包含非零右哈希的路径。当我们找到一个匹配时,我们断言它与中间根哈希匹配。

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

让我们稍微检测一下代码,这样我们就可以弄清楚我们需要什么哈希,然后剩下的就是把它们放在一起,我们将采用合法证明并对其进行修改,以便:

1)我们为伪造的有效负载添加一个新叶节点;

2)我们添加一个空白内部节点以满足证明者;

3)我们调整我们的叶节点以使用正确的根哈希提前退出

https://gist.github.com/samczsun/8635f49fac0ec66a5a61080835cae3db…

Paradigm研究员:3分钟了解5亿美元BNB失窃的全过程

值得注意的是,这不是攻击者使用的确切方法。他们的证明路径要短得多,我不确定他们究竟是如何生成的。但是,漏洞利用的其余部分是相同的,我相信展示了如何从头开始构建它是有价值的。

总之,币安跨链桥验证证明的方式存在一个错误,该错误可能允许攻击者伪造任意消息。幸运的是,这里的攻击者只伪造了两条消息,但损害可能要严重得多。

Share to:

Author: Odaily星球日报

Opinions belong to the column author and do not represent PANews.

This content is not investment advice.

Image source: Odaily星球日报. If there is any infringement, please contact the author for removal.

Follow PANews official accounts, navigate bull and bear markets together
PANews APP
All three major U.S. stock indexes closed lower, with COIN falling more than 7.59%.
PANews Newsflash