宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > KuCoin > 正文

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

作者:

时间:1900/1/1 0:00:00

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

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

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

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

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

DefiLlama旗下NFT借贷项目llamalend完成智能合约部署:10月26日消息,据官方消息,NFT借贷项目llamalend已完成智能合约部署。

据此前报道,10月9日,DeFi数据网站DeFiLlama匿名创始人0xngmi宣布,NFT借贷项目llamalend即将推出,目前智能合约已完成并在Github开源。[2022/10/26 16:39:40]

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

漏洞详细过程分析

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

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

DeFi协议总锁仓量达731.1亿美元,24小时内涨1.5%:金色财经报道,据DefiLlama数据显示,DeFi协议总锁仓量(TVL)达到731.1亿美元,24小时涨幅为1.57%。TVL排名前五分别为MakerDAO(77.9亿美元)、AAVE(56.4亿美元)、Curve(50.8亿美元)、Lido(48.2亿美元)、Uniswap(47.5亿美元)。[2022/6/21 4:42:12]

火币研究院首席技术研究员马天元:当前Defi赛道锁定130亿美金:12月28日,火币Labs创业营六期开营暨跨年活动在深圳举行。火币研究院首席技术研究员马天元在Defi解析演讲中表示,Defi是区块链行业的创新赛道,伴随着IUO、流动性挖矿等创新玩法的涌现,Defi行业具有非常多的金融创新活力。截至2020年12月,Defi赛道整个锁定130亿美金。他在演讲中指出,Defi可分为Dex、稳定币、预言机、借贷、衍生资产五大赛道。其中,自动做市商(AMM)是Dex立身根本。[2020/12/28 15:51:24]

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

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

数据:顶级DeFi代币在过去30天里平均上涨22%:根据分析平台Santiment的数据,顶级DeFi代币在过去30天里平均上涨了22%:“在过去的30天里,DeFi项目绝对是爆炸式增长。排名前100位的DeFi代币平均回报率为22%。COMP、MKR、KNC、REP、AAVE、REN和LRC回报率均大幅超过30日平均值。”(CryptoSlate)[2020/6/20]

图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被重复使用的风险。

标签:ETHDEFIEFIDEFETH中文名Kong DefiIC DeFiMy Defi Legends

KuCoin热门资讯
冰河实验室与比特大陆AI芯片提供方96boards达成合作

北京时间8月5日,冰河分布式存储实验室与全球顶尖的开放芯片平台标准化组织96boards达成合作,冰河实验室为96Boards及其会员与合作伙伴提供针对AI芯片研发场景海量数据的分布式存储解决方案.

1900/1/1 0:00:00
辟谣:巴菲特投资“比特币挖矿”?其实是增持黄金股

17日北京时间凌晨,一条巴菲特投资比特币矿业的新闻在中文媒体疯传,尤其是中文矿工社群,而事情的真相究竟是什么? 首先这当然不是真的,因为没有任何英文媒体或者可靠信息,可以证实这一事实.

1900/1/1 0:00:00
比特币“明庄”灰度

作为首支主动接受SEC监管的加密数字货币基金,灰度的举动备受关注。尤其今年年初以来,灰度旗下的比特币信托(GBTC)表格10生效,开始按照SEC标准进行信息披露,管理规模不断创新高,灰度这头“巨鲸”在比特币市场上穿梭的身影更惹人注目.

1900/1/1 0:00:00
不止以太坊,条条大路通DeFi

DeFi生态系统正在快速崛起,从借贷协议、债券通证到加密货币衍生品、去中心化交易所,如今我们已经看到DeFi逐渐演变成为一股不可阻挡的新势力.

1900/1/1 0:00:00
DCEP如何成为经济「内循环」的未来加速器?

转自:第一财经 作者:程实 全球疫情正在长趋势地阻滞世界经济“外循环”,向“内循环”挖掘经济潜力成为大势所趋。但是,疫情时代全球货币政策已陷入多重困境,如何加力支撑“内循环”成为各国难题.

1900/1/1 0:00:00
7月链上数据扫描:币价终破万元,为何链上数据并未随之疯狂?

7月的大部分时间,比特币价格可谓平淡无奇,继续在9000到9500美元间震荡,但是在7月最后几天,比特币却紧随暴涨的ETH之后,突然发力连破10000、11000美元两大关口,并冲击12000美元.

1900/1/1 0:00:00