被盗1.9亿美元,史上最混乱的ENS实名群殴

1年前
标签:黑客/被盗110519
文章来源: 区块律动BlockBeats

原文作者:Samczsun


原文编译:TechFlow intern

 

在一次升级中合约将 0x00 标记为有效的根,这就导致了 Nomad 充满了虚假信息。攻击者利用这一点来复制/粘贴有效的交易地址,在混乱中,跨链桥的资产被迅速耗尽了。

 

Nomad 是我在 Web3 见过的最混乱的黑客攻击之一,截至目前被榨干了超过 1.5 亿美元。这究竟是如何发生的,根本原因是什么?请允许我带你了解幕后情况。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图1

 

这一切都始于 CIA Officer 在 ETHSecurity Telegram 频道分享 Spreek 的推文,虽然我当时不知道发生了什么,但大量的资产离开跨链桥显然是一个不好的迹象。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图2

 

我的第一个想法是,Token 小数点的配置有误。毕竟,从我的视角看来,似乎跨链桥正在运行一个 「发送 0.01 WBTC,返还 100 WBTC」的促销活动。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图3

 

开始还不相信,然而,在 Moonbeam 网络上进行了一些人工挖掘后,我确认,事实的确是此,从 Moonbeam 只转出了 0.01 WBTC,但以太坊上却不知为什么收到了 100 WBTC。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图4

 

此外,WBTC 这次桥接交易实际上并没有 Prove 这一步骤,它只是直接调用了`Process`。只能说,在没有证明的情况下就能处理一个消息是非常不好的。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图5

 

在这种情况有两种可能,要么证明是在较早的区块中单独提交的,要么就是 Replica 合约出了极大的问题。然而,完全没有迹象表明最近有什么信息被单独证明了。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图6

 

所以,就只剩下一种可能——Replica 合约中存在致命的缺陷,但怎么会呢?通过快速浏览信息发现了,提交的消息必须属于可接受的根,否则,第 185 行的检查会失败。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图7

 

幸运的是,有一种简单的方法可以检查这个假设。我知道一个未被证明消息的根是 0x00,因为 messages[_messageHash] 显示未初始化,我所要做的就是检查合约是否会接受这个根。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图8

 

合约接受了......

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图9

 

事实证明,在升级期间,Nomad 团队将可信根初始化为 0x00。说白了,使用 0 值作为初始化值是一种常见的做法。不幸的是,在这种情况下,它有一个很小的副作用,即会自动验证每一条消息。

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图10

 

被盗1.9亿美元,史上最混乱的ENS实名群殴_aicoin_图11

 

这就是此次事件如此混乱的原因——你不需要知道 Solidity 或默克尔树(Merkle Trees)之类的东西。你所要做的就是找到一个有效的交易,用你的地址找到/替换对方的地址,然后重新广播。

 

原文链接

免责声明:本文章仅代表作者个人观点,不代表本平台的立场和观点。本文章仅供信息分享,不构成对任何人的任何投资建议。用户与作者之间的任何争议,与本平台无关。如网页中刊载的文章或图片涉及侵权,请提供相关的权利证明和身份证明发送邮件到support@aicoin.com,本平台相关工作人员将会进行核查。

评论
2022-08-03 06:00
程序员的锅