2022年8月1日,Nomad桥的各种资产被抽走了1.9亿美元。这次的漏洞特别在于,它是第一次由普通公众积极参与的黑客攻击。
Nomad Bridge的黑客攻击最初是由一个人策划的,但很快,普通用户就能发现最初黑客利用的bug,并通过简单地使用Ctrl+C,Ctrl+V来利用它。
本文将深入研究这种攻击最初是如何成为可能的。
Nomad是一个跨链桥,允许用户在链之间转移加密资产,但转移从未真正发生。Nomad运行多个智能合约,在原始链上销毁资产,并在新链上铸造资产。这就是为什么当我们利用跨链转移资产时,我们将拥有wETH而不是ETH。Wrapped Ether是与其他链兼容的Ether的镜像版本。
Nomad黑客的分析
黑客攻击发生在前天,攻击发起者发现并开始利用一个弱点。人们很快就明白了被利用的是什么,并开始复制粘贴漏洞,以便自己从Nomad桥中吸走资产。这实际上掏空了Nomad的钱包——几小时内从1.9亿美元减至700美元。
这种前所未有的机会主义攻击之所以成为可能,是因为它非常容易复制。为了复制黑客,我们所要做的就是复制黑客的交易调用数据,并用自己的地址替换原来的地址。
该漏洞是由nomad智能合约文件Replica.sol中的一个错误造成的。此外,根据Nomad GitHub存储库中的审计报告,审计团队实际上已经标记了这个特殊的弱点,并得到了团队的承认。
更具体地说,问题源于下面的process()函数,在 Replica.sol 文件的第 192 行:
require(acceptableRoot(messages[_messageHash]), "!proven");
这一行本身并没有本质上的错误,因为它通常会确保请求来自智能合约认为可接受的根。
require()是一个内置的Solidity函数,它确保只有授权的地址才能在特定的智能合约上执行操作。不幸的是,在41天前,该团队在合约merkle根启动过程中犯了一个错误,添加了0x00作为可接受的根。这意味着每个人的钱包地址都是该合约的可接受根,并且能够成功地调用合约的各种函数。
一个糟糕的merkle根初始化是这个问题的根本原因。一旦漏洞被发现,它就非常容易被复制,人们开始从Nomad中吸走资金。一些人承诺把钱还回去。
Source:https://cryptomaton.medium.com/the-great-nomad-bridge-hack-inside-the-first-decentralised-crowd-looting-event-98af2c5444f8
ChinaDeFi - ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。
Layer 2道友 - 欢迎对Layer 2感兴趣的区块链技术爱好者、研究分析人与Gavin(微信: chinadefi)联系,共同探讨Layer 2带来的落地机遇。敬请关注我们的微信公众号 “去中心化金融社区”。