一、事件描述
2022年9月18日,以太坊合并完成后,PoW链遭到PoS链上交易的重放攻击,根本原因是网桥未正确读取并验证区块链的chainid。攻击者首先通过Gnosis链的Omni跨链桥转移了200WETH,然后在PoW链上重放了相同的消息,获得了额外的200ETHW。
SharkTeam对此事件进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。
Ripple CEO:Ripple不急于上市或进行新融资:5月19日消息,Ripple首席执行官Brad Garlinghouse表示,关于Ripple的上市计划,Garlinghouse表示,他们“不急于上市,不需要筹集更多资金”。他补充说,“因此,如果我们考虑(上市),那将是一个合理的时间和地点。我们不会这么做,除非我们觉得它确实能提高业务增长的能力和客户体验。”[2023/5/20 15:14:46]
二、事件分析
该事件涉及两个不同链的交易hash以及攻击者地址,分别如下:
PoS链交易hash:0xbddb0cc8bc9949321e1748f03503ed1a20dd618fbf0a51dc5734c975b1f8bdf5
以太坊触及1300美元,24小时涨幅6.84%:金色财经报道,以太坊上涨触及1300美元,现报价1298美元,24小时涨幅6.84%。行情波动较大,请做好风险控制。[2022/12/1 21:13:54]
PoW链交易hash:0x9c072551861ce384203516f4d705176a2d2e262d5b571d853467425f1a861fb4
以太坊客户端Akula开发人员将不再维护或运行该项目:金色财经报道,以太坊客户端项目Akula开发人员宣布将不再维护或运行该项目,因为他们无法与新宣布的具有类似功能且由知名加密风险投资公司 Paradigm 运营的竞争对手项目Reth竞争。但Akula代码仍然可用,因为它是开源的。
据悉,Akula 是一个用 Rust 编写的高性能以太坊客户端。以太坊客户端是允许节点读取网络上的块并与智能合约交互的软件应用程序。以太坊核心开发人员 Artem Vorotnikov 于 2021 年开始与一小群开发人员将该项目构建为开源客户端实现。(the block)[2022/11/24 8:05:15]
香港安盛保险公司入驻The Sandbox元宇宙:9月28日消息,据官方公告,The Sandbox宣布与香港安盛保险公司(AXA Hong Kong)达成合作,使AXA成为第一家进入The Sandbox元宇宙的香港保险公司,AXA购买了其一块3x3的地块,它将为其客户提供新型互动空间。(Medium)[2022/9/28 5:56:55]
攻击者地址:0x82FaEd2dA812D2E5CCed3C12b3baeB1a522DC677
首先,我们对比发现两笔交易访问的合约相同,并且inputdata完全相同,即调用了同一个合约的同一个函数并且参数相同,根据相同的方法签名ID?0x23caab49可知,黑客调用safeExecuteSignaturesWithAutoGasLimit函数。
美国国税局新版纳税指南草案将“虚拟货币”更改为“数字资产”,涵盖NFT等:10月19日消息,美国国税局发布了2022年度纳税指南草案,将旧类别“虚拟货币”替换为更广泛的“数字资产”新语言,并明确涵盖NFT等资产。根据指南草案,“数字资产是记录在加密保护的分布式账本或任何类似技术上的任何数字价值表示。例如数字资产包括NFT和虚拟货币、加密货币和稳定币。”根据最新文件,“如果公民在2022年通过出售、交换、赠与或转让的方式处置了任何作为资本资产持有的数字资产”,加密货币投资者将必须计算并报告应纳税收入。据悉,前一年美国税务申报指南中的“虚拟货币”部分是数字代币的狭义定义,“其功能是记账单位、价值储存或交易媒介”。最终的税务指南尚未发布,所以加密货币部分在正式发布前仍有可能进行调整。(CoinDesk)[2022/10/19 17:31:50]
因此,攻击者通过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,但是依旧要保持警惕,以防止积少成多,造成更大的损失。
来源:金色财经
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。