Chain:警惕以太坊合并后的重放攻击:Omni跨链桥被攻击事件分析

一、事件描述

2022年9月18日,以太坊合并完成后,PoW链遭到PoS链上交易的重放攻击,根本原因是网桥未正确读取并验证区块链的chainid。攻击者首先通过Gnosis链的Omni跨链桥转移了200WETH,然后在PoW链上重放了相同的消息,获得了额外的200ETHW。

SharkTeam对此事件进行了技术分析,并总结了安全防范手段,希望后续项目可以引以为戒,共筑区块链行业的安全防线。

二、事件分析

西甲联赛与Dapper Labs将推出基于Flow的数字收藏平台:10月8日消息,西班牙足球甲级联赛(LaLiga)和Dapper Labs将于10月27日合作推出基于Flow的数字收藏平台LaLiga Golazos封闭测试版,该平台将允许购买购买、拥有和出售LaLiga Golazos Moments,该系列将包含从2005年至今的西甲赛场经典时刻。(PRNewswire)[2022/10/8 12:49:15]

该事件涉及两个不同链的交易hash以及攻击者地址,分别如下:

PoS链交易hash:0xbddb0cc8bc9949321e1748f03503ed1a20dd618fbf0a51dc5734c975b1f8bdf5

基于Flow的NFT借贷平台Flowty完成450万美元首轮融资:4月22日消息,基于Flow的NFT借贷平台Flowty完成450万美元首轮融资,Greenfield One和Lattice Capital共同领投,Dapper Labs、Stermion、TinyVC、Luno Expeditions和Red Beard Ventures参投。该笔资金将用于平台开发和充实开发团队。

Flowty是一个P2PNFT借贷市场。Flowty从每笔贷款中收取费用,并负责监管抵押资产,直到贷款期限结束。(CoinDesk)[2022/4/22 14:42:23]

Yearn Finance创始人推出基于Fantom的NFT市场Artion:9月25日消息,Yearn Finance创始人Andre Cronje推出基于Fantom的NFT市场Artion,目前已上线Beta版本。用户可以用 MetaMask 和 Coinbase 钱包访问 Artion 。每次铸造NFT会收取10FTM,销售没有提成。此外,创作者可以在铸造NFT时设置版税,并在二级市场销售中获得收入。[2021/9/25 17:05:38]

PoW链交易hash:0x9c072551861ce384203516f4d705176a2d2e262d5b571d853467425f1a861fb4

Animoca Brands将基于Flow构建MotoGP?收藏品游戏:2月26日消息,区块链游戏发行商Animoca Brands宣布将基于公链平台Flow构建基于MotoGP?的收藏品游戏平台MotoGP? Ignition,第一次内容销售将于3月26日开始。通过MotoGP? Ignition,粉丝们可以在区块链上拥有和交易他们最喜爱的MotoGP?摩托车和人物收藏品。

首次MotoGP? Ignition销售中将使用法定货币购买收藏品,并通过信用卡付款。此外,也会使用区块链摩托车游戏所用的实用型代币和游戏内货币REVV。[2021/2/26 17:55:00]

攻击者地址:0x82FaEd2dA812D2E5CCed3C12b3baeB1a522DC677

首先,我们对比发现两笔交易访问的合约相同,并且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,但是依旧要保持警惕,以防止积少成多,造成更大的损失。

来源:金色财经

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

XRPAIN:基于Fab开发亿币钱包可以连接所有的公链

我们之前详细解释过亿币去中心化钱包不用通过跨链桥,就能够链接不同的公链,实现不同公链上的代币,例如BTC、ETH、LTC、Doge、BNB等等代币,可以直接转入亿币钱包,在亿币钱包中进行转账.

[0:15ms0-7:534ms