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

By [Dfax_official](https://paragraph.com/@dfax-official) · 2022-10-10

---

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/bb771357f68ab80b8bbd39a7176e9523fc7018dcbe6252970c08006be0b6b3d2.jpg)

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

原文：[《解析：约5.66亿美元BNB被盗全过程》](https://www.odaily.news/post/5182163)

北京时间今天上午， 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失窃的全过程](https://storage.googleapis.com/papyrus_images/55bc184928b8202eb900916ac90287ba2631cf9403ec12bede372cef57242211.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/b01733ed5644c057a648a7b6899a647c246f6499a8437321c016f9393da0b8eb.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/8a6cfba50240bb5e49f75fdfa038657c5a755516a88f55526728f82acda2d6cd.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/880ae5741767648c07550ed853ecdecd7883cff91137b6e6138de46eaa6da71c.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/abdf10f1a2f697ef488cdaa9fc88afb294401d5f20b78fc90bc93a26f1b83450.jpg)

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/a4dac535b783d58b057805cc761246fe139114ae7fdfc35e45707731bf0746a5.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/f6362ea1599e8d750c939f3080fec0ba067fc6d9e2d055663a118e081699c908.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/964c54e510ad72055cc87cbb4e76f3c65dd120600e7052fef756aee85c37fd7c.jpg)

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

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

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/038ea15c00e2ecf639d0be0398d13acd4cb941c3e9aecc32cff56eae0e17c3fe.jpg)

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/edb7b4fa8b9d399b3e5a7ac6f328e58ae014b727d94c7bc44ddb32c815e48b95.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/6145279bad67a191dc4f742e291d5a3c1487ede624b347fa23e4f8d94ccac844.jpg)

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/30561ff33d90017884b3c54e4833d61159dfffb48ba70cfff18d8b2f91725c27.jpg)

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

[https://github.com/cosmos/iavl/blob/de0740903a67b624d887f9055d4c60175dcfa758/proof\_range.go#L237-L290](https://github.com/cosmos/iavl/blob/de0740903a67b624d887f9055d4c60175dcfa758/proof_range.go#L237-L290)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/ed15c031ec69dae338bc5ae84e88902203be71f388976af7e70339ff014e1213.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/e07e152bb56d6fedb72e6635e3aeef6d252780278d11804101751a68a3bf256e.jpg)

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

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

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/8a5984fc1372c6e8b97b20b311ee56cbc9e6d972ac6e3503f308a582e587fbe0.jpg)

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

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

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

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

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

[https://gist.github.com/samczsun/8635f49fac0ec66a5a61080835cae3db…](https://gist.github.com/samczsun/8635f49fac0ec66a5a61080835cae3db%E2%80%A6)

![Paradigm研究员：3分钟了解5亿美元BNB失窃的全过程](https://storage.googleapis.com/papyrus_images/6e186c2385a23277ed80dab686f38adef0cd93ee256f7c68abf5896c9cd1fa58.jpg)

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

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

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

---

*Originally published on [Dfax_official](https://paragraph.com/@dfax-official/paradigm-3-5-bnb)*
