区块链安全 | 用户余额无故消失?Opyn ETH Put逻辑漏洞技术分析

事件简述

8月5日凌晨四点,有用户在opyn论坛反馈自己的账户余额无故消失,并有用户发现可疑的交易信息,如下图所示:

Opyn项目方再对情况初步分析后做出回应表示:已经转移了资金,并正在寻找问题原因

截至发稿前,官方发文回应此次事件:遭到黑客攻击,并已对可能遭受攻击的资产进行转移,但此次漏洞只涉及ETH合约,并不影响其他合约。如下图所示:

云南企业首进国家区块链信息服务备案名单:在国家网信办发布的第4批境内区块链信息服务备案的公告中,云南有5家企业入围备案名单,实现了云南省在国家区块链信息服务备案体系中“零”的突破。入围备案名单的包括云南群林科技有限公司、云南云烁巴克云科技有限公司、云南易见纹语科技有限公司、云南云链未来科技有限公司、瑞丽市利讯科技有限公司等5家企业的5项区块链服务。这对于云南省发展区块链产业,构建安全、规范、合法的区块链产业生态,指导区块链信息服务提供者建立健全服务规范具有重要意义。(昆明日报)[2020/11/6 11:47:23]

成都链安-安全实验室第一时间对本次事件进行跟踪分析,以下是态势感知系统检测盗的攻击者合约地址:

A股开盘:深证区块链50指数下跌0.26%:金色财经消息,A股开盘,上证指数报3444.56点,开盘下跌0.19%,深证成指报13741.27点,开盘下跌0.20%,深证区块链50指数报4084.66点,开盘下跌0.26%。区块链板块开盘下跌0.28%,数字货币板块下跌0.46%。区块链板块258只概念股中,80只上涨,29只平盘,149只下跌。数字货币板块34只概念股中,8只上涨,3只平盘,23只下跌。[2020/8/19]

0xe7870231992ab4b1a01814fa0a599115fe94203f

0xb837531bf4eb8ebfa3e20948bd14be067c18cbd3

0xb72e60ea1d0c04605f406c158dce9ac6ae6d224c

攻击者攻击方式还原:

攻击者调用合约向合约发送n个USDC增加抵押,并得到合约币oETH

攻击者调用合约发送ETH进行抵押,并销毁oETH以赎回自己的USDC

声音 | 人民网:区块链占据创新制高点需做到四大点:人民网发布了题为“人民网评‘解析区块链’之二:如何占据创新制高点”的文章。文章表示,2018年我国已拥有全球超八成区块链专利,但基础理论、产业生态、人才培养等方面短板日益凸显,如何占据创新制高点?1、要做好区块链基础理论研究。2、要实现核心技术的自主可控。3、要打造完整的产业生态链。4、要打造高水平人才队伍。[2019/10/30]

攻击者赎回自己抵押的ETH。

如下图所示:

在步骤二中,攻击者调用exercise函数,并向其传递了两个地址A、B和两倍自己应得的USDC,程序正常执行,这导致地址B的资金受损。

行情 | A股收盘:区块链板块整体上涨0.07%:A股收盘,区块链板块整体上涨0.07%。79只概念股中,52只上涨、20只下跌、3只平盘,4只停牌。涨幅前三为:信息发展(+5.13%)、创维数字(+3.01%)、华软股份(+2.75%)。跌幅前三为:赢时胜(-9.98%),高升控股(-9.93%),易见股份(-9.61%)。[2018/9/28]

技术分析

以交易0x56de6c4bd906ee0c067a332e64966db8b1e866c7965c044163a503de6ee6552a为例,攻击者通过合约0xe7870231992ab4b1a01814fa0a599115fe94203f对合约0x951D51bAeFb72319d9FBE941E1615938d89ABfe2发动攻击,此笔交易中共获利$9907。如下图所示:

日本经济产业省国际事务副部长:日本政府正准备逐步引入区块链相关法律:经济产业省国际事务副部长藤原忠雄在达沃斯论坛上表示日本的区块链发展面临着两个挑战,一是目前的法律系统没有相关匹配,金融法律没有预料到区块链的发展,因此日本政府正准备逐步引入相关法律;二是如果区块链进入金融支付系统,原有的技术将面临巨大挑战。因此如何顺畅的实现这些转变是个重大课题。[2018/1/23]

攻击者首先调用了addERC20CollateralOption函数,向合约中发送了9900个USDC,如下图所示:

此函数中的addERC20Collateral(msg.sender,amtCollateral);负责代理转账USDC;函数中的issueOTokens(amtToCreate,receiver);负责铸币oETH,此笔交易铸币30个oETH并发送给了攻击者,如下图所示:

在此完成后,攻击者的vault参数进行了变化。vault.oTokensIssued和vault.collateral分别更新300000000和9900000000为如下图所示:

然后攻击者开始将oETH兑换出来。

调用exercise,构造参数oTokensToExercise为60,vaultsToExerciseFrom为两个地址,其中一个是也满足条件的他人地址。如下图所示:

Exercise函数运行_exercise(vault.oTokensIssued,vaultOwner);分支,将30oETH相应比例的USDC发送给调用者,如下图所示:

我们可以注意到,在最终转账时,_exercise是将USDC转给了msg.sender,也就是攻击者。

我们回头看exercise中存在者for循环,攻击者输入的oTokensToExercise为60,所以合约再验证了第二个地址符合条件的情况下,依旧会将余额转给msg.sender,也就是攻击者。这就使得攻击者可以获得两次USDC,从而获得利润。

总结建议

此次事件攻击者利用了exercise函数的逻辑缺陷。此函数在进行最后转账前并未验证调用者是否有权限赎回此地址的USDC,只是简单的验证了地址是否可以赎回。属于代码层的逻辑漏洞,并且根据官方回复,此合约是经过安全审计的。成都链安在此提醒各项目方:

项目上线前应当进行足够有效的安全审计,最好是多方审计

对于合约的应当设置暂停合约交易等功能,在发生安全事件时,可以以保证资金安全

安全是一个持续的过程,绝非一次审计就能保平安,与第三方安全公司建立长期的合作至关重要

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

银河链

[0:31ms0-2:839ms