PeckShield揭示Opyn智能合约漏洞:攻击者的出其不意之举

OKX欧易app

OKX欧易app

欧易交易所app是全球排名第一的虚拟货币交易所,注册领取6万元盲盒礼包!

APP下载   官网注册

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

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

PeckShield安全团队获悉Opyn平台遭受攻击后,迅速定位到问题关键点在于:攻击者发现Opyn智能合约行权(exercise)接口对接收到的ETH存在某些处理缺陷,其合约并没有对交易者的实时交易额进行检验,使得攻击者可以在一笔对自己发起真实的交易之后,再插入一笔伪装交易骗得卖方所抵押的数字资产,进而实现空手套白狼。

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

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

漏洞详细过程分析

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

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

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

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

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

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

修复建议

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

本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/zx/53714.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年08月12日
下一篇 2023年08月12日

相关推荐

  • 合约倍数是什么意思,合约里的倍数是什么意思

    一、合约里的倍数是什么意思合约里的倍数是指交易金额相对于标的物的数量的放大程度。详细解释如下:在金融业务中,合约通常指的是金融衍生品合约,如期货、期权等。这些合约允许投资者通过少量现金投入,就能参与到大量的标的资产交易中。倍数在这里起到了关键作用,它代表了

    2024-12-23 10:00:01
    1 0
  • 比特币怎么做期货,什么是比特币期货合约

    一、币圈包括期货吗币圈里面的期货不能叫期货,因为这不是正经的合规合法的期货,所以叫了一段时间后,被币圈里面的人改了名字,现在币圈里面的期货都叫“合约”。但是长时间那么叫也习惯了,异客在这里就暂时先不改这称呼了,毕竟换汤不换药,大家都知道是什么回事。异客一直

    2024-12-22 19:00:01
    4 0
  • 永续合约什么情况下爆仓,永续合约爆仓了会欠钱吗

    一、永续合约会爆仓吗永续合约会通过自动减仓来减少对手的盘仓位,这样就降低了市场风险。同时永续合约的价格设计机制,也让其不容易被恶意爆仓,但是永续合约也会爆仓,只不过没有分摊和插针。所以永续合约投资并不是没有爆仓的风险,就看投资者怎么去操作了。二、永续合约爆

    2024-12-22 16:00:01
    2 0
  • 虚拟币区块怎么查询,如何查区块链合约地址信息

    一、怎么查询所有区块链公链公链在哪里查询公链在浏览器查询。随着区块链的大热,越来越多的科技公司开始研究和开发区块链。在区块链迅速发展的同时,也有少部分项目方打着区块链的名号,在市面上进行招摇撞骗。如何判断公链真假,对于现在许多想要进行数字货币交易的群体来说

    2024-12-22 04:30:01
    4 0
  • hotcoin交易平台是什么,Hotcoin是什么合约交易所

    一、热币Hotcoin交易所靠不靠谱1. Hotcoin(热币)交易所是一个靠谱的平台,拥有全球最大的用户增长之一。2.该平台专注于提供数字资产兑换交易服务,并且致力于区块链技术的创新与研发。3. Hotcoin旨在为全球用户提供一个安全、便捷、高效的数字资产兑换环境,努力成为全球领

    2024-12-20 10:00:01
    6 0
  • usdt现货是什么意思,usdt永续合约是什么意思

    一、砸盘吸筹是什么意思庄家坐庄时的巨大资金要想悄无声息地就进驻到某一只上市公司股票中,也非一日一时之功。往往需要在相对的价格低位上反复震荡,或者通过长期横盘的方式令短线客忍无可忍.最后敬而远之:或者通过上蹄下跳的股价跳跃方式引诱散户难耐寂寞而低抛高吸,使之最

    2024-12-18 02:30:01
    10 0

发表回复

8206
验证码

评论列表(0条)

    暂无评论

ok交易所
已有100万用户加入ok交易所

立即下载