IMI:重入攻击 + 管理漏洞:2000 万枚 OP 被盗事件分析_Timicoin

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笔交易如下:

安全公司Dedaub因披露Uniswap重入漏洞获得4万美元漏洞赏金:1月3日消息,安全公司 Dedaub 团队宣布获得 Uniswap Labs 的 4 万枚 USDC 安全漏洞赏金,因为其披露 Uniswap 的一个严重漏洞,该漏洞有重入并耗尽用户的资金的可能性。不过,Uniswap 团队已解决该漏洞并在所有链上重新部署了 Universal Router 智能合约,资金是安全的。

Uniswap 在 2022 年 11 月份发布通用路由器Universal Router智能合约,可将 ERC20 和 NFT 兑换统一到一个交换路由器中,用户可以执行异构操作,例如,在一笔交易中交换多个 Token 和 NFT。

Dedaub 表示,该路由器为各种 Token 操作嵌入了脚本语言,此类命令可能包括向第三方(可能不受信任的)接收人的传输。如果在传输过程中的任何时候调用第三方代码,该代码可以重新进入 UniversalRouter 并在合约中临时认领任何 Token。Dedaub 建议 Uniswap 为新路由器的核心执行添加一个重入锁,并重新部署。[2023/1/4 9:50:22]

Akropolis重入攻击事件:攻击者使用自己构造token导致合约使用相同差值铸币两次:11月14日,慢雾发布DeFi协议Akropolis重入攻击事件简析。内容显示:

1. 攻击者使用自己创建的token进行deposit,此时Akropolis合约会先记录一次合约中所有代币的总量;

2. Akropolis合约调用用户自己创建的token的transferFrom函数的时候,攻击者在transferFrom函数中重入Akropolis合约的deposit函数,并转入DAI到Akropolis合约中;

3. 此时在重入的交易中,由于Akropolis合约会先获取合约中所有代币的总量,这个值和第一次调用deposit函数获取的合约代币总量的值一致;

4. Akropolis合约计算充值前后合约中代币总量的差值,攻击者在充值DAI后,会得到一定量的Delphi token,获得token的数量就是充值DAI的数量;

5. 铸币完成后,流程回到第一次deposit往下继续执行,这时合约会再次获取合约中所有代币的总量,这时由于在重入交易时,攻击者已经转入一定量的DAI,所以得到的代币总余额就是攻击者在重入交易完成后的代币总余额;

6. 此时合约再次计算差值,由于第一次deposit的时候合约中所有代币的总量已经保存,此时计算出来的差值和重入交易中计算的差值一致,Akropolis合约再次铸币给攻击者。总结:攻击者使用自己构造的token,对Akropolis合约的deposit函数进行重入,导致Akropolis合约使用相同的差值铸币了两次,但是只触发了一次转账,当攻击者提现的时候,就可以提两倍的收益,从而获利。[2020/11/14 20:48:37]

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

康奈尔大学教授:近期针对Lendf.Me的攻击与当年The DAO的重入Bug类似:AVA Labs联合创始人,康奈尔大学教授Emin Gün Sirer在社交媒体平台上表示,近期黑客从去中心化借贷协议Lendf.Me的Dapp中盗走约2500万美金的代币,出现的问题与当年The DAO的重入Bug类似。对此Sirer教授强调,此类问题对于以太坊来说是地方性的,而对于 Dapp,难以确定以不透明字节码表示的资产是否遭受重入。因此,加密资产应以能够防范重入的方式进行部署。在AVA的设计中资产是第一类对象(First Class Object),资产的行为由系统设定,不需要通过代码分析来确定发送一笔资产是否会导致 Dapp 的资产被抽走。[2020/4/20]

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

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

0x2501c477d0a35545a387aa4a3eee4292a9a8b3f0

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

金色晨讯 | 以太坊君士坦丁堡升级因“可重入”漏洞延期 51%双花攻击所得的ETC已归还完毕:1.南非或将开始跟踪加密货币交易。

2.以太坊君士坦丁堡升级因“可重入”漏洞延期。

3.美国立法者提出新法案 为部分加密初创公司提供“安全港”。

4.2018年中国区块链专利申请量领跑全球 达到2913件。

5.保加利亚政府对加密货币交易利润征收10%的税款。

6.IBM使用区块链平台跟踪金属行业的供应链。

7.印度政府将于1月17日批准创业激励计划并与区块链基金会合作。

8.慢雾: 51%双花攻击所得的所有ETC已归还完毕。

9.Ripple:仅2015年8月之前的私钥易受攻击。[2019/1/17]

0x4f3a120E72C76c22ae802D129F599BFDbc31cb81

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

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

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

动态 | DAO损失1.2亿美金的“重入漏洞” 重现江湖:近日,降维安全实验室(johnwick.io)监测到成人娱乐系统spankchain支付通道(payment channel)关联的智能合约LedgerChannel遭到了重入攻击。某黑客发现了该支付通道合约的重入漏洞(Reentrancy),并于北京时间2017年10月7日上午8时许创建了恶意攻击合约,随后成功从该合约窃取了165.38 ETH,约合3.8万美元价值的以太币。[2018/10/10]

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:0ms0-4:946ms