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

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

Beosin:JPEG'd 遭受攻击原因为重入攻击:金色财经报道,据Beosin安全团队分析,JPEG'd 项目遭遇攻击的根本原因在于重入,攻击者在调用remove_liquidity函数移除流动性时通过重入add_liquidity函数添加流动性,由于余额更新在重入进add_liquidity函数之前,导致价格计算出现错误。

此前报道,JPEG'd项目遭遇攻击,损失至少约1000万美元。[2023/7/31 16:07:53]

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

Gnosis Chain硬分叉成功执行,已升级容易受到重入攻击的代币合约:4月20日消息,Gnosis Chain硬分叉已成功执行,此次硬分叉更新了桥接代币,旨在升级容易受到重入攻击(reentrancyattack)的代币合约(Agave和Pored Finance等)。

此前报道,3月16日Gnosis Chain上Hundred Finance与Agave遭遇闪电贷攻击,损失超1100万美元。[2022/4/20 14:36:20]

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

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

0x2501c477d0a35545a387aa4a3eee4292a9a8b3f0(简记为0x2501)

(2)Wintermute 在 Ethereum/L1 上的多签合约地址(Wintermute Exploiter Multisig):

0x4f3a120E72C76c22ae802D129F599BFDbc31cb81(简记为0x4f3a)

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

黑客利用重入漏洞攻击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/L2 上的 0 x4 f3 a 合约部署交易:

txHash是0x00a3da68f0f6a69cb067f09c3f7e741a01636cbc27a84c603b468f65271d415b

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

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

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

黑客重放了 3 笔交易,尤其是最后的 Gnosis Safe: Proxy Factory 1.1.1 合约创建的交易,如下所示:

(1)Ethereum/L1 上的交易如下:

(2)Optimism/L2上的交易:

通过重放交易,黑客在 Optimism/L2 上面创建了跟 Ethereum/L1 上完全相同(地址与合约代码相同)的 Gnosis Safe: Proxy Factory 1.1.1 合约,其中创建代理合约函数如下:

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

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

txHash: 0x69ee67800307ef7cb30ffa42d9f052290e81b3df6d3b7c29303007e33cd1c240

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

整个过程从时间上看,

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

(2)6 月 1 日,黑客地址 0 x8 bcf 部署合约 0 xe714。

(3)6 月 5 日,黑客通过重放 Ethereum/L1 上的交易创建了 Gnosis Safe: Proxy Factory 1.1.1 合约,其地址与 Ethereum/L1 上一样;然后地址 0x60b2 通过合约 0 xe714 部署了多签合约 0 x4 f3 a,合约所有权归黑客所有,因此 5 月 27 日转入的 2000 万 OP 被黑客盗取。

(4)6 月 5 日,多签合约 0 x4 f3 a 在接收到 2000 万 OP 后,将 100 万 OP 转账给黑客地址 0 x60 b2,然后将 100 万 OP 兑换成了 720.7 Ether。

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

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

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

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

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

金星链

屎币DID:DID如何构建链上画像?

正如Vitalik在《去中心化社会:找寻Web3的灵魂》一文中所说,Web3在原生的社会身份层面(DID)上有所缺失。首先,Web3还依赖着Web2的社会身份结构.

[0:15ms0-1:155ms