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

北京时间2020年08月05日,DeFi期权平台Opyn的看跌期权智能合约遭到黑客攻击,损失约37万美元。Opyn是一个通用期权协议,于今年2月份转型为保险平台,通过oTokens为DeFi平台提供可交易的ETH看跌期权,以此锚定ETH市场价格,为高波动性的DeFi市场提供相对的稳定性。PeckShield安全团队获悉Opyn平台遭受攻击后,迅速定位到问题关键点在于:攻击者发现Opyn智能合约行权接口对接收到的ETH存在某些处理缺陷,其合约并没有对交易者的实时交易额进行检验,使得攻击者可以在一笔对自己发起真实的交易之后,再插入一笔伪装交易得卖方所抵押的数字资产,进而实现空手套白狼。简单来说,由于OpynETHPut智能合约中的行权函数exercise()没有对交易者的ETH进行实时校验。根据Opyn平台的业务逻辑,看跌期权的买方给卖方转移相应价值的ETH,即可获得卖方抵押的数字资产。狡猾的攻击者,先向自己发起伪装的交易,利用这笔ETH可以重复使用的特性,再次向卖方用户发起转账,进而取卖方已经抵押的数字资产。下面为您详细分析漏洞原因及攻击过程。漏洞详细过程分析

Compound Treasury获得标准普尔B-信用评级,为首个获得主要信用评级机构评级的DeFi产品:官方消息,Compound宣布,Compound Treasury获得国际评级机构标准普尔(S&P Global Ratings)的B-信用评级,成为第一个由主要信用评级机构评级的机构去中心化金融 (DeFi) 产品,并标志着随着传统机构开始判断数字资产驱动的金融产品的风险,加密行业的成熟度取得了巨大进展。

在授予其评级和稳定展望时,标准普尔引用了USDC的不确定监管制度、稳定币兑换法定货币的风险、Compound Treasury目前有限的资本基础和4.00%的回报义务。

作为与标准普尔正在进行的讨论的一部分,Compound Treasury的评级可能会上调,例如数字资产行业的监管更加明确,或者业绩稳定的记录更长。

据悉,Compound Treasury是专为机构设计的加密货币现金管理解决方案。合格的投资者可以通过每日流动性赚取4%的USD和USDC。[2022/5/9 3:01:28]

先来说说,Opyn平台的业务逻辑:当用户使用Opyn合约行权即买卖期货时,需要买方向卖方转入相应数量的ETH或者ERC20Token,然后合约将销毁买方对应的oToken,而后买方将获得卖方已经抵押的资产。例如:小王认为行情进入了下跌趋势,看到Opyn上挂着一个小李对ETH330美元的看跌期权,于是进入交易系统,向小李转账一个ETH,获得小李抵押的等额数字资产。若此刻行情已经跌至了300美元,小王便可获得其中的差价。

ZG. COM将于5月13日上线DeFi挖矿宝第二期:据ZG.COM官方公告,DeFi挖矿宝第一期USDT产品已提前售罄,第二期活动将于2021年5月13日12:00上线。本期参与方式为USDT,最小起投金额为1,000USDT,总额度为1,000,000USDT,认购时间截止至5月18日12:00。

DeFi挖矿宝是ZG.COM打造的一款全新DeFi挖矿产品,给用户提供便捷的产品管理服务。用户可认购一定数量的BTC、ETH、USDT等币种,享受赚币收益。[2021/5/12 21:53:32]

DeFi协议ETHA Lend及其原生代币ETHA即将推出:12月25日,可组合DeFi收益优化器ETHA Lend已经宣布了即将推出的协议及其原生代币ETHA的细节,后者将作为该协议的治理和实用型代币。ETHA Lend协议与多个DeFi协议交互,使流动性提供者获得最佳收益。此外,该协议集成了Gas代币,允许用户节省高达52%的gas网络费用。更多细节将于数周内公布。(Globe Newswire)[2020/12/25 16:32:17]

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

OKEx DeFi播报:DeFi总市值97.5亿美元,OKEx平台DMD领涨:据OKEx统计,DeFi项目当前总市值为97.5亿美元,总锁仓量为134.9亿美元;

行情方面,今日DeFi代币普涨,OKEx平台DeFi币种涨幅前三位分别是DMD、NMR、AAVE;

截至17:00,OKEx平台热门DeFi币种如图所示。[2020/11/2 11:26:37]

图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。这样,在后续的步骤中通过操作msgValue,就能准确的标记有多少ETH已经被花费,进而避免资产被重复利用。此外,我们还可以使用address(this).balance来检查合约余额来规避msg.value被重复使用的风险。

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

金星链

屎币INT:各类资产的涨幅逻辑

这几天数字货币整体行情的大涨让行业热闹了起来,昨天比特币最高价超过了11000美元,各个主流币之间开始发生轮动,莱特币,BCH等也都有了相当不错的涨幅.

[0:15ms0-0:967ms