时间:2023-06-12|浏览:225
2022年9月18日,在以太币合拼结束后,PoW链遭受PoS链上交易的重放攻击。攻击者利用Gnosis链的Omni跨链桥控制200WETH,并在PoW链上重放了同样的信息,赢得了200ETHW。
根源在于网桥未正确载入并认证区块链的chainid。
SharkTeam对此展开技术指标分析并总结安全防护方式,希望其他新项目能够以此为戒,共同维护区块链行业的安全防线。
该事件涉及两种不同链的交易hash及其攻击者详细地址:
(1) PoS链交易hash:0xbddb0cc8bc9949321e1748f03503ed1a20dd618fbf0a51dc5734c975b1f8bdf5
(2) PoW链交易hash:0x9c072551861ce384203516f4d705176a2d2e262d5b571d853467425f1a861fb4
(3) 攻击者详细地址:0x82FaEd2dA812D2E5CCed3C12b3baeB1a522DC677
最初,大家发现几笔交易浏览的合约相同,inputdata完全一致,即启用了同一个合约的同一个函数公式且主要参数相同。依据同样的方法签名ID0x23caab49得知,攻击者调用safeExecuteSignaturesWithAutoGasLimit函数。
因此,攻击者利用OmniBridge迁移了200WETH,并在PoW链上重放了同样的Inputdata,赢得了额外200ETHW。
但对于此事,有人持怀疑态度。因为以太坊网络在硬分叉以前就强制实行EIP-155,导致ETHPoS链上交易不可在PwO链上重复交易。在正常交易中,可通过nonce进行筛选交易,防止重复交易。在跨链中,我们可依据chianid开展鉴别链的种类,例如以太币主网上线的chainid是1,ETHW主网上线的chainid是10001。
SharkTeam阐述了OmniBridge对应的源代码,也查看了OmniBridge认证chainid的逻辑性。发现,chainid来源于unitStorage中储存数值,而非根据操作码CHAINID(0x46)立即载入的链上chainid。
unitStorage是合约EternalStorage里的初始条件,sourceChainId函数公式所属的合约BasicAMB继承BasicBridge和VersionableAMB。其中,BasicBridge相继继承合约EternalStorage。这儿储存的chainid是事先储存好的,如果出现区块链的硬分叉且chainid未重设或chainid人为因素设定不正确,没有根据操作码获得的chainid将无法恰当认证跨链信息的具体chainid。攻击者可利用这种系统漏洞进行攻击。
难题梳理总结:Omni应用的solidity版原是0.4.24,使用的是手动式储存和更新chainid的方法,并没有根据EIP-1344所规定的CHAINID(0x46)操作码开展具体chainid获得。
引起此次安全性事件的原因是因为在PoW更新PoS环节中,OmniBridge对chainid未妥善处理。过旧的solidity版本里,存有历史遗留问题。建议在后期新项目迭代更新中,采用必要的代码设计对策以解决新情况。尽管Gnosis链上OmniBridge有每天最大迁移货币数量限制250个WETH,但仍需提高警惕,以避免积少成多,导致更多的损害。
SharkTeam旨在全方位维护Web3全球的安全性。团队由遍布北京、南京、苏州、美国硅谷的安全性专业人员和研究人员构成,熟悉区块链和智能合约的最底层基础理论,提供专业的智能合约审计、链上剖析和应急处置等服务。已与OKC、polygon、HuobiGlobal、Polkadot、imToken、ChainIDE等区块链生态体系的重要参与者建立了合作关系。
联系方式:
Telegram:https://t.me/sharkteamorg
Twitter:https://twitter.com/sharkteamorg
了解更多区块链安全咨询和分析,请访问:
链上风险性审查https://m.chainaegis.com
转载:驼鸟区块链
用戶喜愛的交易所
已有账号登陆后会弹出下载