MAD:金色观察|“首次去中心化抢劫”:还原Nomad被攻击始末

8月2日7时,加密KOL /img/202281315038/0.jpg">对此,投资机构Paradigm研究员/img/202281315038/2.jpg">3,然而,在 Moonbeam 网络上进行了一些手动挖掘之后,确认虽然 Moonbeam 交易确实桥接了 0.01 WBTC,但以太坊交易以某种方式桥接了 100 WBTC。

4,此外,在 WBTC 中桥接的交易实际上并没有证明什么。它只是直接调用了`process`。可以说,能够在不首先证明的情况下处理消息是非常不好的

5,在这一点上,有两种可能性。要么是在较早的区块中单独提交了证明,要么是 Replica 合约存在严重错误。但是,绝对没有迹象表明最近有任何事情被证明。

6, 这只剩下一种可能性——副本合约存在致命缺陷。但是怎么做?快速浏览表明提交的消息必须属于可接受的根。否则,第 185 行的检查将失败。

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

8,事实证明,在例行升级期间,Nomad 团队将可信根初始化为 0x00。需要明确的是,使用零值作为初始化值是一种常见的做法。不幸的是,在这种情况下,它具有自动验证每条消息的微小副作用。

9,这就是黑客如此混乱的原因——你不需要了解 Solidity 或 Merkle Trees 或类似的东西。你所要做的就是找到一个有效的交易,用你的地址找到/替换对方的地址,然后重新广播它。

10,例行升级将零哈希标记为有效根,这具有允许在 Nomad 上消息的效果。攻击者滥用它来复制/粘贴交易,并在疯狂的混战中迅速耗尽了桥。

A16z应用安全成员Matt Gleason发推介绍了Nomad 被攻击的原因:

Nomad 桥以与 Qubit 的 QBridge 类似的方式获得。桥的不安全配置导致特定路径允许发送任何事务。错误出现在 Replica 的“进程”函数中。

Process 旨在确保消息已被证明,然后处理该消息,这通常应该没问题。

它使用acceptableRoot 来执行此操作,它将检查根是否已被证明或在当前时间之前已被确认。

出现这个问题是因为在 solidity 中,如果一个映射键在此之前没有被看到,那么它将默认为零,从而导致尝试确认根值为零。但是,由于它们初始化时使用的是 0 的 confirmed Root ,这意味着零在技术上是一个已确认的根。

因此,系统会接受任何以前从未见过的消息,并将其当作真实消息来处理,这意味着你所需要做的就是要求所有的桥的钱,你就会得到它。

Paradigm工程师@ParadigmEng420发推提醒用户如果在Nomad 、Evmos、Moonbeam、Milkomeda有任何资金,需要交换出游牧资产,并使用不同的跨链桥,尽快回到以太坊或另一个链。他还指出,Nomad 暂停了中继器,并试图使用观察者审查所有桥接交易,但是,这可能没什么帮助,因为漏洞利用是在合同方面而不是在基础设施方面。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

中币下载元宇宙:元宇宙社交 字节也跳不动了?

前天,不少网友发现,字节跳动旗下的派对岛APP悄悄从应用商店下架了。从今年1月上线上线各大应用商店,进行严密的内测,到7月12日开启公测,派对岛向公众开放的时间似乎连半个月都不到.

[0:15ms0-0:981ms