首发 | DeFi平台Opyn智能合约漏洞详解 攻击者空手套白狼

北京时间2020年08月05日,DeFi 期权平台 Opyn 的看跌期权(Opyn ETH Put)智能合约遭到黑客攻击,损失约37万美元。

Opyn 是一个通用期权协议,于今年2月份转型为保险平台,通过 oTokens 为 DeFi 平台提供可交易的 ETH 看跌期权,以此锚定 ETH 市场价格,为高波动性的 DeFi 市场提供相对的稳定性。

PeckShield 安全团队获悉 Opyn 平台遭受攻击后,迅速定位到问题关键点在于:

攻击者发现 Opyn 智能合约行权(exercise)接口对接收到的 ETH 存在某些处理缺陷,其合约并没有对交易者的实时交易额进行检验,使得攻击者可以在一笔对自己发起真实的交易之后,再插入一笔伪装交易得卖方所抵押的数字资产,进而实现空手套白狼。

Binance Labs将投资入选MVB的7个项目:10月5日消息,MVB第五批结果揭晓,Binance Labs将本次投资入选的七个项目。包括去中心化域名协议Space ID、Web3基础设施 Overeality、互操作性通信协议Multichain Event Protocol(MEP)、手机策略游戏Meta Apes、代币化投资组合Velvet Capital、多链开放数据分析平台Web3Go、休闲游戏平台Gameta共7 个项目入选 。

“最有价值建设者”(MVB)是BNB Chain的Web3加速器计划,BNB Chain 和 Binance Labs生态系统将提供通用技术和产品、代币经济学咨询、社区和区域市场支持以及技术建议,并与BNB Chain、CoinMarketCap 和Trust Wallet基础设施支持进行整合,帮助项目快速增长,并融入整个生态系统。[2022/10/5 18:40:10]

简单来说,由于 Opyn ETH Put 智能合约中的行权函数 exercise() 没有对交易者的ETH 进行实时校验。根据 Opyn 平台的业务逻辑,看跌期权的买方给卖方转移相应价值的 ETH,即可获得卖方抵押的数字资产。狡猾的攻击者,先向自己发起伪装的交易,利用这笔 ETH 可以重复使用的特性,再次向卖方用户发起转账,进而取卖方已经抵押的数字资产。

ETH、HDOT、LAVA单币质押池将于今晚8点开启:据官方消息,LAVAswap的ETH、HDOT、LAVA单币质押池将于北京时间2021年2月2号晚上8点开启,一共延续4周。ETH:总空投量12万LAVA代币;HDOT:总空投量6万LAVA代币;LAVA:总空投量18万LAVA代币。

LAVAswap是基于火币生态链的全新DEX,包括空投池、流动性矿池、DEX、跨链资产桥等。更多详情见原文链接。[2021/2/2 18:39:56]

下面为您详细分析漏洞原因及攻击过程。

漏洞详细过程分析

先来说说,Opyn 平台的业务逻辑:当用户使用 Opyn 合约行权即买卖期货(exercise)时,需要买方向卖方转入相应数量的 ETH 或者 ERC20 Token,然后合约将销毁买方对应的 oToken,而后买方将获得卖方已经抵押的资产。

例如:小王认为行情进入了下跌趋势,看到 Opyn 上挂着一个小李对 ETH 330美元的看跌期权,于是进入交易系统,向小李转账一个 ETH,获得小李抵押的等额数字资产。若此刻行情已经跌至了300美元,小王便可获得其中的差价。

BTC合约多空持仓人数比0.85 季度合约基差提升至300美元上方:截至10月26日10:30,根据OKEx交易大数据,BTC合约多空持仓人数比为0.85,市场整体上多方人数稍下降;季度合约基差提升至300美元上方,永续合约资金费率为正,交割及永续合约持仓总量维持在10亿美元平台,短线多军强势;BTC交割及永续合约精英持仓方面,做空账户比为53%占据优势,多头持仓比为19.65%占据优势,精英账户多空双方有一定分歧,需要关注大户持仓变化。从期权合约数据来看,看涨/看跌主动买入量比为1.32,主动看涨量优势微弱。[2020/10/26]

图1. exercise() 函数中循环执行传入的 vaults 地址列表

如上面的合约代码片段所示,行权函数 exercise() 的内部是一个循环,依据参数中传递的 vaultsToExerciseFrom 中的地址数量依次调用真正的行权逻辑 _exercise() 函数。

图2. 重用传入合约的 ETH 来获得抵押资产

函数处理 ERC20 Token 时,和大部分的 DeFi 项目做法一样,使用 transferFrom(),如代码 1882 行所示,从 msg.sender 转账到 address(this)。

但是当函数处理的资产为 ETH 时,处理的方式就完全不一样了。因为在 Solidity 中,msg.value 的意思是合约调用者在调用具有 payable 接口时所转给该合约的 ETH 数量,仅是一个量值,所以在合约代码的 1879 行中,检查 msg.value == amtUnderlyingToPay 仅能确保合约确实收到了 amtUnderlyingToPay 数量的 ETH,并不会对 msg.value 的值造成任何影响。

但是正如上面讲到的在 exercise() 中会循环调用 _exercise() 函数,这导致尽管合约实际只收到一次ETH,然而在循环过程中却可以重复使用。

攻击点就在这里,由于合约少了一步对 ETH 实时数量的检验,使得攻击者可以先伪造一笔指向自己的交易,然后再把已经花掉的本金再次利用,和平台其他用户完成一笔正常交易。

图3. 攻击交易分析

在图3中,我们通过 Bloxy 浏览器显示的调用过程来展示攻击的过程。由于攻击者吃掉了很多笔订单,我们以其中一笔交易为例,向大家展示其攻击逻辑:

1、攻击者先从 Uniswap 购入了 75 oETH 为进一步调用函数行权做好筹备;2、攻击者创建了一个 Vault 地址,作为看空期权卖方,并且抵押24,750 USDC 铸造出75 oETH,但并未卖出这些期权,等于自己同时买入了以 330 的价格卖出75 ETH 的权利;3、攻击者在 Opyn 合约中调用了 exercise(),在持有 150 oETH 看空期权的情况下,先向自己的 Vault 地址转入了75个 ETH,获得自己事先抵押的 24,750 个 USDC,再重利用了这75个 ETH,成功吃掉了另一个用户的 24,750 个 USDC,进而实现非法获利。

修复建议

PeckShield 安全团队建议,在 Solidity 中,合约可使用一个局部变量 msgValue 来保存所收到 ETH(即 msg.value 的值)。这样,在后续的步骤中通过操作 msgValue ,就能准确的标记有多少 ETH 已经被花费,进而避免资产被重复利用。此外,我们还可以使用 address(this).balance 来检查合约余额来规避 msg.value 被重复使用的风险。

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

波场谷燕西:酒店使用权 新型数字资产交易所的下一个交易品种

在未来的数字资产交易所当中,会有新型的交易品种。 这些交易品种可能是所有权,如不动产和艺术品的所有权,也可能是债权,如基于个人消费贷款和房屋贷款的债权。同样也可能是使用权。在当代的商业模式发展和消费方式的发展当中,相对于传统的所有权,使用权越来越受到欢迎。这些使用权譬如汽车的租赁和度假酒店的共享等等。

Uniswap互联网巨头是聚合器捕获绝大多数价值 YFI会成为新的聚合器么?

在互联网时代,聚合器捕获了绝大多数价值。谷歌聚合了各种网站的内容、Facebook聚合了社交关系和内容、亚马逊聚合了商品和交易、Airbnb聚合了客房......这些科技巨头颠覆了传统行业,并构建起近乎垄断的地位。 为什么这些科技巨头形成近乎垄断的地位?随着聚合的用户、内容以及商品越来越多,其成本不会增加,只会摊薄,并在此基础上形成网络效应。

ADA400亿案Plus Token落网 你的钱还能要回来吗?

Plus Token 案主犯尚在瓦努阿图时,就有嫌疑人家属联络希望在这个太平洋小岛寻找靠谱的代理律师。他们回国后,又有其他家属来咨询过本案。 因此,飒姐对于案情细节不便多说,今天主要针对投资者是否能够要回投资的BTC、ETH等发表几点个人观点,仅供参考。

EthereumOKEx指用户“盗取”比特币 在国内诉讼维权

数字货币历经10多年的发展日渐成熟,在法律和监管层面的条例也愈发清晰。一直以来,加密货币交易平台最担心安全事件的就是受到黑客的攻击,在平台的安全审计和运维方面都是下重金维护。但是,这两股力量在此消彼长,黑客总能抓住加密货币交易平台的漏洞,进行各式各样的攻击。

[0:15ms0-0:515ms