重入攻击 + 管理漏洞:2000 万枚 OP 被盗事件分析_NFT:ISM价格

2022年6月9日消息,据Optimism与加密货币做市商Wintermute透露,2000万个Optimism代币被黑客盗取。6月9日,Optimism基金会向Wintermute授予了2000万枚OP代币。

交易发送完成后,Wintermute发现无法访问这些代币,因为提供的地址是他们尚未部署到Optimism/L2的Ethereum/L1多签地址。该Optimism/L2多签地址由黑客部署,2000枚OP代币也被黑客盗取。

一、事件分析

5月27日,Optimism基金会通过多签合约分两次向Wintermute的多签合约地址转账2000万OP代币,并且在26日转账1枚OP代币,3笔交易如下:

CZ:币安团队已检查Vyper可重入漏洞,用户不受影响:7月31日消息,CZ发推称,CEX喂价拯救了DeFi。币安用户不受影响。币安团队已检查Vyper可重入漏洞。币安只使用0.3.7或以上版本。保持最新的代码库、应用程序和操作系统非常重要。

据此前报道,因Vyper部分版本(0.2.15、0.2.16和0.3.0)存在功能失效的递归锁漏洞,Curve上alETH/ETH、msETH/ETH、pETH/ETH和CRV/ETH池遭遇攻击。[2023/7/31 16:09:06]

根据交易时间以及交易中OP代币数量,我们分析,在26日,Optimism基金会向Wintermute多签合约地址转账1枚OP代币作为测试,Optimism基金会在Wintermute确认收到代币后将2000万枚OP代币通过连续的两笔交易发送给Wintermute多签合约地址。接收地址是Wintermute在Ethereum/L1上已部署的多签合约地址,因此Wintermute仅仅验证是否接收到了代币,但并没有验证该地址在Optimism/L2上的所有权,而此时在Optimism/L2上并没有实际部署多签合约,这才给了黑客可乘之机。

黑客利用重入漏洞攻击Paraluni,获利逾170万美元,约1/3已流入Tornado:今日8时04分(HKT),BSC链上的元宇宙金融项目Paraluni遭受黑客攻击,黑客获利逾170万美元。据欧科云链链上天眼初步分析:

1、攻击者资金来自PancakeSwap的闪电贷;

2、问题出在项目方MasterCheif合约的depositByAddLiquidity方法,该方法未校验代币数组参数address memory _tokens是否和pid参数指向的LP相吻合,在涉及到LP数额变化时,也未加重入锁。

目前黑客在BSC链上的地址「0x94bc」的账户余额为3000.01 BNB(约112.58万美元),另有235.45 ETH(约60.86万美元)通过cBridge跨链到了ETH网络「0x94bc」。其中约1/3被盗资金(230 ETH)已流入Tornado Cash。

该事件提醒我们,在涉及到金额变动的合约方法中,一定要关注重入漏洞,尽量使用重入锁modifier。

链上天眼团队已对相关地址进行了监控,并将进一步跟进事件进展。[2022/3/13 13:54:09]

以上转账交易中的相关地址如下:

Origin称OUSD黑客攻击主要由合约中重入漏洞引发:去中心化共享经济协议OriginProtocol(OGN)联合创始人MatthewLiu更新关于“稳定币OUSD遭受攻击”一事称,“团队在采取措施以追回资金,包括与交易所以及其他第三方合作,以识别出黑客地址,并对资金进行冻结。黑客同时使用TornadoCash和renBTC来进行和转移资金,目前,黑客钱包中还有7137枚ETH和224.9万枚DAI。此次攻击是由合约中的一个重入漏洞(reentrancybug)引发。团队将在未来几天内采取措施,试图弥补用户资金,还将讨论OUSD持有者的补偿计划。”据此前报道,OUSD因此次攻击事件造成700万美元损失。Origin提醒称,“目前已禁用了vault存款,请不要在Uniswap或Sushiswap上购买OUSD。”[2020/11/17 21:03:47]

Optimism基金会在Optimism/L2上的多签合约地址:

0x2501c477d0a35545a387aa4a3eee4292a9a8b3f0

Wintermute在Ethereum/L1上的多签合约地址:

EOS挖矿项目珊瑚的wRAM遭黑客\"重入\"攻击,损失超12万EOS:据PeckShield态势感知平台数据显示,09月10日凌晨01:43分起,EOS生态DeFi流动性挖矿项目 “珊瑚”的wRAM遭到黑客攻击,损失逾12万EOS。截至目前已经有4.6万个EOS被转移至ChangeNOW实施。PeckShield安全人员进一步分析发现,ph***bj 攻击者账号采用了类似”重入攻击“的模式,对eoswramtoken合约实施了攻击。具体而言,攻击者在正常的转账操作内嵌入了一次inline transfer,使得wRAM合约在mint时判断RAM数额出现问题导致多发。PeckShield在此提醒用户,EOS生态内挖矿项目,合约层往往存在Active权限受控制,非多签账户可操纵账号资金等问题,且存在多种被攻击的可能,用户在参与DeFi流动性挖矿项目前务必确保所项目合约的安全性。[2020/9/10]

0x4f3a120E72C76c22ae802D129F599BFDbc31cb81

同时,Optimism/L2上的0x4f3a也是黑客部署的多签合约地址。

动态 | 以太坊君士坦丁堡升级因“可重入”漏洞延期:据PeckShield消息,今天凌晨,以太坊君士坦丁堡代码突然爆出“可重入”漏洞,该漏洞可以用来攻击相关合约修改用户余额或其他关键变量。PeckShield安全人员初步分析发现,在分叉之前一个存储操作至少需要5000gas,这个是远超缺省转账激励的2300gas。但分叉后一个存储只需200gas,这个造成了现有合约再处理转帐时候,如调用了攻击者合约,可以用来修改调用者合约的内部变量,其中可能包括账号余额等。由于该漏洞,以太坊君士坦丁堡升级延期,具体的升级时间将在周五的下一次核心开发者电话会议选出。[2019/1/16]

接下来,我们将从链上交易的角度详细分析一下黑客的攻击行为以及原理。

首先,我们看一下Optimism/L2上的0x4f3a合约部署交易:

txHash是0x00a3da68f0f6a69cb067f09c3f7e741a01636cbc27a84c603b468f65271d415b

注意到,该合约部署时间是6月5日,其中Wintermute/OPExploiter是黑客的一个地址,简记为0x60b2。

该交易是如何准确生成0x4f3a合约地址的呢?

黑客重放了3笔交易,尤其是最后的GnosisSafe:ProxyFactory1.1.1合约创建的交易,如下所示:

Ethereum/L1上的交易如下:

Optimism/L2上的交易:

通过重放交易,黑客在Optimism/L2上面创建了跟Ethereum/L1上完全相同的GnosisSafe:ProxyFactory1.1.1合约,其中创建代理合约函数如下:

GnosisSafe:ProxyFactory1.1.1合约使用的是0.5版本的Solidity,使用new来创建合约时使用的是create命令,而不是create2。使用create命令创建合约,合约地址是msg.sender以及nonce来计算的。在Ethereum/L1上面,创建多签合约0x4f3a的msg.sender就是GnosisSafe:ProxyFactory1.1.1的地址,黑客在Optimism/L2通过重放交易来创建于GnosisSafe:ProxyFactory1.1.1合约的主要目的就是为了保证在Optimism/L2上创建合约0x4f3a的msg.sender与在Ethereum/L1上一致,那么黑客可以很方便的通过智能合约调用createProxy函数来创建出地址是0x4f3a的合约。在该交易中创建过程如下所示:

另外,合约0xe714的部署是在6月1日的以下交易中完成的:

txHash:0x69ee67800307ef7cb30ffa42d9f052290e81b3df6d3b7c29303007e33cd1c240

发起交易地址是0x8bcfe4f1358e50a1db10025d731c8b3b17f04dbb,这也是黑客所持有的地址。同时,这笔交易也是0x8bcf发起的第一笔交易,资金来源于Tornado:

整个过程从时间上看,

5月27日,Optimism地址0x2501向Optimism/L2上的0x4f3a地址转账2000万OP,0x4f3a地址在Ethereum/L1上是Wintermute的多签合约地址,但此时在Optimism/L2上面并没有部署合约;

6月1日,黑客地址0x8bcf部署合约0xe714。

6月5日,黑客通过重放Ethereum/L1上的交易创建了GnosisSafe:ProxyFactory1.1.1合约,其地址与Ethereum/L1上一样;然后地址0x60b2通过合约0xe714部署了多签合约0x4f3a,合约所有权归黑客所有,因此5月27日转入的2000万OP被黑客盗取。

6月5日,多签合约0x4f3a在接收到2000万OP后,将100万OP转账给黑客地址0x60b2,然后将100万OP兑换成了720.7Ether。

6月9日,合约0x4f3a将其中的100万OP转账给了账户地址0xd8da,

其他的1800万OP仍然在合约0x4f3a中。

二、安全建议

引发本次安全事件的根本原因是交易重放、Solidity旧版本漏洞以及主链和侧链交易签名验证等综合因素,并不是因为项目方合约代码存在漏洞。

另外,针对本次事件,项目方反应不及时、对合约管理不严格等也给了黑客可乘之机;从攻击时间线和攻击准备上看,也不排除OP内部有内鬼串通作案的可能。

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

金宝趣谈

[0:15ms0-7:386ms