北京时间2022年8月2日,CertiK安全团队监测到NomadBridge遭受攻击,导致了价值约1.9亿美元的损失。
合约的问题在于在initialize()函数被调用的时候,“committedRoot”被设成了0x00地址。因此,攻击者可以通过消息的验证,将在桥合约中的代币转移。
攻击步骤
①攻击者调用process()函数开始攻击。
②process()函数中调用了acceptableRoot(messages),这个函数检查了被提交的root以及OptimisticTimeOut是否过期。
何一:监管合规是大势所趋,Binance并未出于自身目的动用用户资金:6月28日消息,Binance 联合创始人何一近期在迪拜接受了彭博社的专访,对于 SEC,甚至世界各国市场监管机构近期对 Binance 的一系列监管动作,何一表示,Binance 尊重监管机构的态度,无论是支持还是反对加密货币的发展,我理解监管的总体意图是好的,是为了保护投资者。全球监管趋势是不可避免的,这不是喊几声斗争口号就能解决的事情。
在何一看来,Binance 提供的透明度比批评者声称的要高,并且一直在与美国监管机构合作。与针对 FTX 的指控不同,Binance 并未出于自身目的动用用户资金,也没有使用其原生 BNB 代币作为贷款抵押品。
在被问及和 CZ 是否考虑过没有他们的 Binance 时,何一表示,我和 CZ 都有正在接受培训的后备高管,目前暂时拒绝透露他们的姓名,我想我们会没事的。[2023/6/28 22:06:28]
③此时函数acceptableRoot(messages)返回了true,也就是说这条message就被批准了。这是因为0x0000在初始化过程中被设置为了true。
加拿大监管部门关于是否放弃调查Binance的听证会将于6月2日举行:金色财经报道,根据提交给法庭的一份文件,加拿大安大略省证券委员会上个月向Binance发出调查令,看它是否试图规避证券法监管。?Binance几天后宣布,由于与稳定币和投资者限制有关的新指南,它将离开加拿大。Binance随后要求证监会撤销调查,声称其范围极其广泛且在没有任何实际事实依据的情况下发布。?在5月18日的文件中,Binance 补充说,调查令没有合法目的,并且该交易所已经退出安大略省和加拿大。?
根据法庭的文件,关于是否放弃调查的听证会将于6月2日举行。[2023/6/2 11:53:55]
④当这条message被批准后,攻击者即可从桥中转移资金。
某LOOKS巨鲸提取350万枚LOOKS并转入MEXC:金色财经报道,Lookonchain监测数据显示,某LOOKS巨鲸提取350万枚LOOKS(103万美元),并转移到MEXC。
据悉,该巨鲸从MEXC和DEX买入LOOKS,平均买入价0.25美元。该巨鲸目前质押380万枚LOOKS(111万美元)和3128万枚X2Y2(590万美元),是X2Y2的最大质押者。[2023/2/13 12:03:23]
攻击交易
攻击示例:
○在MoonbeamBridge上转移了0.01WBTC:?https://moonscan.io/tx/0xcca9299c739a1b538150af007a34aba516b6dade1965e80198be021e3166fe4c?
○在EtheremBridge接受了100WBTC代币转移:https://etherscan.io/tx/0xa5fe9d044e4f3e5aa5bc4c0709333cd2190cba0f4e7f16bcf73f49f83e4a5460?
漏洞分析
在Replica合约中,“committedRoot”被错误地初始化为0?。
合约地址:https://etherscan.io/address/0x88a69b4e698a4b090df6cf5bd7b2d47325ad30a3
函数process通过调用函数acceptableRoot()确保messagehash能通过验证。
函数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可提供部署阶段后的附加服务——合约验证,其中包括对智能合约的分析和部署后合约验证的深入分析。
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。