一、事件描述
2022年9月18日,以太坊合并完成后,PoW链遭到PoS链上交易的重放攻击,根本原因是网桥未正确读取并验证区块链的chainid。攻击者首先通过Gnosis链的Omni跨链桥转移了200WETH,然后在PoW链上重放了相同的消息,获得了额外的200ETHW。
SharkTeam对此事件进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。
数据:0xde3开头鲸鱼地址或已开始抛售GRT代币:金色财经报道,据Spot On Chain监测,GRT代币交易者可能想把0xde3开头的鲸鱼地址(可能是投资者)添加到他们的观察名单上。
这头鲸鱼最近可能已经开始抛售GRT代币,在11小时和9小时之前,他向Binance和Coinbase存入了1100万枚GRT,并在DEX卖出了75万枚GRT。
GRT代币价格在他转移后跌幅已经达到10%以上。[2023/7/4 22:17:22]
二、事件分析
该事件涉及两个不同链的交易hash以及攻击者地址,分别如下:
PoS链交易hash:0xbddb0cc8bc9949321e1748f03503ed1a20dd618fbf0a51dc5734c975b1f8bdf5
另一个Offchain Labs地址于5小时前从币安转出约50万ARB:6月19日消息,据Lookonchain监测,另一个与Offchain Labs有关的地址0x011d于5小时前从币安转出约50万ARB(约合501K美元)。
该地址在过去2个月中已经积累了1080万枚ARB(约合1080万美元)
此前消息,Offchain Labs过去7日从币安转出约722万枚ARB。[2023/6/19 21:47:34]
美联储梅斯特:需要保持加息 将利率提高到5%以上:金色财经报道,美联储梅斯特表示,新的通胀数据证实了美联储未来更多加息的理由;美联储需要保持加息,将利率提高到5%以上,并保持一段时间,直到通胀趋势下降;美联储需要更多的紧缩措施才能使通胀率回到2%;强劲的通胀压力“仍在我们身边”。[2023/2/25 12:28:33]
PoW链交易hash:0x9c072551861ce384203516f4d705176a2d2e262d5b571d853467425f1a861fb4
LooksRare更新挂单奖励规则,提升合规用户获得奖励的价值:10月20日消息,NFT交易所LooksRare平台对挂单奖励规则进行更新:1.更新后,每个钱包地址只有5个NFT系列合集的挂单可以获得奖励;更新前,每个钱包地址有资格同时获得奖励的有15个NFT系列合集。
2.更新后,每个钱包地址的每个合集最多200个符合条件的挂单获得奖励,这将由挂单价格按升序确定;更新前,在1.4 倍以内的所有挂单都可以获得奖励。
以上规则从2022年10月20日上午9:00 (UTC) 开始的挂单奖励期开始生效。本次更新(连同上一次更新)旨在为合规用户增加挂单奖励的价值,同时更有效地为热门NFT系列创造有意义的流动性。[2022/10/20 16:32:28]
攻击者地址:0x82FaEd2dA812D2E5CCed3C12b3baeB1a522DC677
以太坊质押协议Rocket Pool推出支持合并的v1.6.0版本:8月25日消息,以太坊质押协议 Rocket Pool Smartnode 堆栈推出支持合并的 v1.6.0 版本,仍在使用 v1.4.x 版本的用户必须在 8 月 29 日之前升级至支持 Redstone 更新的版本,在使用 v1.5.x 版本的用户则需要在 9 月 6 日之前升级至支持 Bellatrix 硬分叉的版本。[2022/8/25 12:47:46]
首先,我们对比发现两笔交易访问的合约相同,并且inputdata完全相同,即调用了同一个合约的同一个函数并且参数相同,根据相同的方法签名ID?0x23caab49可知,黑客调用safeExecuteSignaturesWithAutoGasLimit函数。
因此,攻击者通过OmniBridge转移200WETH,然后在PoW链上重放了相同的Inputdata,获得了额外的200ETHW。
此时,我们对这里的重放操作抱有怀疑态度。因为,以太坊网络在硬分叉之前强行执行EIP-155,这就说明ETHPoS链上交易不能在PoW链上重复交易。在正常的交易中,我们通过nonce来进行排序交易,避免重复交易。在跨链中,我们会根据chianid进行识别链的类型,比如以太坊主网的chainid是1,ETHW主网的chainid是10001。
对此,我们分析了OmniBridge相应的源码。我们查看一下OmniBridge验证chainid的逻辑,发现chainid的来源于unitStorage中存储的值,而不是通过操作码CHAINID直接读取的链上chainid。
unitStorage是合约EternalStorage中的状态变量,sourceChainId()函数所在的合约BasicAMB继承了BasicBridge和VersionableAMB。其中,BasicBridge陆续继承了合约EternalStorage。这里保存的chainid是预先存储好的,如果发生区块链的硬分叉而chainid又没有重新设置或者chainid人为设置有误,从合约层面上来说,由于不是通过操作码获取的chainid,不会正确验证跨链消息的实际chainid。这样的漏洞,容易被攻击者利用。
问题分析总结:主要是Omni使用的solidity版本是0.4.24,采用的是手动存储和更新chainid的方式,并未通过EIP-1344中规定的CHAINID操作码进行实际chainid获取。
三、安全建议
引发本次安全事件的原因是在PoW升级PoS过程中,OmniBridge对chainid未及时处理。导致过旧的solidity版本中,存在历史遗留问题。建议在后续项目迭代中,及时应对新问题,采取必要的代码优化措施。虽然Gnosis链上OmniBridge有每日最大转移代币数量限制250个WETH,但是依旧要保持警惕,以防止积少成多,造成更大的损失。
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。