北京时间2022年8月2日,CertiK安全团队监测到NomadBridge遭受攻击,导致了价值约1.9亿美元的损失。
合约的问题在于在initialize()函数被调用的时候,“committedRoot”被设成了0x00地址。因此,攻击者可以通过消息的验证,将在桥合约中的代币转移。
攻击步骤
①攻击者调用process()函数开始攻击。
②process()函数中调用了acceptableRoot(messages),这个函数检查了被提交的root以及OptimisticTimeOut是否过期。
Matrixport发行短期美债代币STBT,市值已超1500万美元:3月9日消息,吴忌寒旗下数字资产金融服务平台Matrixport发行短期美债代币STBT,旨在为稳定币持有者提供美债收益。该产品基于以太坊发行,100%由美债作为底层资产,仅面向可接受国家的合格投资者发售,目前市值1517万美元。[2023/3/9 12:51:31]
③此时函数acceptableRoot(messages)返回了true,也就是说这条message就被批准了。这是因为0x0000在初始化过程中被设置为了true。
韩国游戏巨头Wemade与CertiK建立长期合作关系:1月6日消息,韩国游戏巨头Wemade与区块链安全机构CertiK签署了一份谅解备忘录,据谅解备忘录的条款,Wemade和CertiK将建立长期的安全伙伴关系,并发起联合营销活动。CertiK将帮助Wemade提高WEMIX3.0生态系统的安全性和效率。[2023/1/6 10:58:14]
④当这条message被批准后,攻击者即可从桥中转移资金。
攻击交易
攻击示例:
○在MoonbeamBridge上转移了0.01WBTC:https://moonscan.io/tx/0xcca9299c739a1b538150af007a34aba516b6dade1965e80198be021e3166fe4c
Quasar预计于2022年底在Cosmos主网上线:10月10日消息,DeFi项目Quasar联合创始人Valentin Pletnev表示,如果一切按计划进行,Quasar将于2022年底在Cosmos主网上线,为新手提供参与DeFi投资的机会。
据此前报道,Quasar Finance完成600万美元融资,Polychain Capital、Blockchain Capital、Figment Capital、Lightshift Capital和Galileo等参投。Quasar Finance旨在DeFi生态系统中创建一系列可访问的结构化投资产品,投资者和流动性提供者都可以从中受益。(CoinDesk)[2022/10/11 10:30:15]
○在EtheremBridge接受了100WBTC代币转移:https://etherscan.io/tx/0xa5fe9d044e4f3e5aa5bc4c0709333cd2190cba0f4e7f16bcf73f49f83e4a5460
美国财政部本月将公开一系列报告,明确提出加密货币风险:9月11日消息,知情人士称,美国财政部将在本月公开的一系列报告中阐述其认为加密货币会对消费者和金融系统构成的风险。美国财政部的报告将着重对加密货币市场的分析,但不会提供太多具体的政策建议。每份报告将集中讨论四个主题中的一个,这些主题包括支付系统、消费者保护、非法融资和金融稳定。(金十)[2022/9/11 13:23:09]
漏洞分析
在Replica合约中,“committedRoot”被错误地初始化为0。
合约地址:https://etherscan.io/address/0x88a69b4e698a4b090df6cf5bd7b2d47325ad30a3
函数process通过调用函数acceptableRoot()确保messagehash能通过验证。
以太坊链上NFT销售总额突破260亿美元 创历史新高:金色财经报道,据最新数据显示,以太坊链上NFT销售总额突破260亿美元,创下历史新高,本文撰写时为26,006,887,976美元,链上交易数量为9,552,070笔。 据历史数据显示,以太坊链上NFT销售总额在2022年1月7日突破130亿美元,这意味着在不到四个月时间里,以太坊链上NFT总销售额增长超过130亿美元,涨幅超过100%。[2022/5/6 2:55:36]
函数acceptableRoot()会检查root是否已经被proven,processed或者confirmed。
然而在初始化的交易中0x53fd92771d2084a9bf39a6477015ef53b7f116c79d98a21be723d06d79024cad,owner传入了0x00并且它对应的`confirmAt`也会在初始化中被设为1。
因此0x00可以被当作一个`acceptableRoot`,这也可以在replica合约中查询到https://etherscan.io/address/0xb92336759618f55bd0f8313bd843604592e27bd8。
Prove函数的实现导致了一条unprovenmessage的root是0,而0作为一个有效的confirmedroot可以通过require的检查。攻击者只需调用process函数就能从桥中转移资金。
资金去向
大约价值1.9亿美元的代币从桥合约中转移出去。
https://defillama.com/protocol/nomad?denomination=USD
写在最后
由于该问题是由部署参数中的错误引起的,我们假设所有的部署和配置都是正确的,那么在传统的审计中确实很难发现该问题。然而,在包含验证部署过程等更广泛的审计过程中,是可以有效指出该问题的。
CertiK可提供部署阶段后的附加服务——合约验证,其中包括对智能合约的分析和部署后合约验证的深入分析。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。