一、事件描述
2022年9月18日,以太坊合并完成后,PoW链遭到PoS链上交易的重放攻击,根本原因是网桥未正确读取并验证区块链的chainid。攻击者首先通过Gnosis链的Omni跨链桥转移了200WETH,然后在PoW链上重放了相同的消息,获得了额外的200ETHW。
SharkTeam对此事件进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。
IOHK官方提醒警惕以免费ADA赠送为名义的欺诈活动:Cardano开发团队IOHK发推特称,请注意,我们发现近期YouTube和其他社交渠道上的欺诈活动显著增加。记住,IOHK永远不会举办“赠品”促销活动。任何为你提供免费ADA的都是子,他们试图窃取你的资金。[2020/7/13]
二、事件分析
该事件涉及两个不同链的交易hash以及攻击者地址,分别如下:
PoS链交易hash:0xbddb0cc8bc9949321e1748f03503ed1a20dd618fbf0a51dc5734c975b1f8bdf5
哈尔滨市局:警惕以虚拟货币、 区块链为噱头的非法集资局:近年来,一些不法分子打着“金融创新”、“区块链”的旗号,通过“拆分资产”抵押、发行“虚拟货币”等方式吸收资金,侵害公众合法权益。近日,哈尔滨市局的经侦民警详细分析总结了此类非法集资的主要特征,希望能够帮助市民提高防范意识,远离非法集资。
1. 网络化运作,跨境化局。这种非法集资主要依托互联网、聊天工具进行交易,利用网上支付工具收支资金,风险波及范围广、扩散速度快。
2. 空投“糖果”,连蒙带,难发现。不法分子利用热点概念进行炒作,编造名目繁多的“高大上”理论,有的还利用名人、大V“站台”宣传,以空投“糖果”进行诱惑,宣称“币值只涨不跌”、“投资周期短、收益高、风险低”,具有较强蛊惑性。
3.“动静”相结合,你手段多样。不法分子通过公开宣传,以“静态收益”(炒币升值获利)和“动态收益”(发展下线获利)为诱饵,吸引公众投入资金,并利诱投资人发展下线人员加入,不断扩充资金池。盘子越做盘大,上当的人也越来越多,汪少受者到后来,都成了犯罪分子的帮手。(哈尔滨新闻网)[2020/6/21]
PoW链交易hash:0x9c072551861ce384203516f4d705176a2d2e262d5b571d853467425f1a861fb4
声音 | 天津市局:警惕以虚拟货币、区块链等为幌子的投资理财项目:据天津日报消息,天津市局经济犯罪侦查总队副总队长刘学铸表示,如遇以投资“虚拟货币”、“区块链”等为幌子的“投资”、“理财”项目务必警惕。[2019/4/9]
攻击者地址:0x82FaEd2dA812D2E5CCed3C12b3baeB1a522DC677
动态 | 乌鲁木齐晚报:警惕以投资“虚拟货币”、“区块链”等为幌子的投资”、“理财”项目:2月21日,乌鲁木齐晚报发布《防范非法集资常识》,务必警惕以投资“虚拟货币”、“区块链”等为幌子的“投资”、“理财”项目。[2019/2/24]
首先,我们对比发现两笔交易访问的合约相同,并且inputdata完全相同,即调用了同一个合约的同一个函数并且参数相同,根据相同的方法签名ID?0x23caab49可知,黑客调用safeExecuteSignaturesWithAutoGasLimit函数。
黑龙江巴彦县:警惕以投资“虚拟货币”、“区块链”等为幌子的非法集资活动:黑龙江省巴彦县法院网6月4日报道,黑龙江巴彦县部提醒公众特别警惕以投资“虚拟货币”、“区块链”等为幌子的“投资理财”项目。[2018/6/4]
因此,攻击者通过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,但是依旧要保持警惕,以防止积少成多,造成更大的损失。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。