事件简述
8月5日凌晨四点,有用户在opyn论坛反馈自己的账户余额无故消失,并有用户发现可疑的交易信息,如下图所示:
Opyn项目方再对情况初步分析后做出回应表示:已经转移了资金,并正在寻找问题原因
截至发稿前,官方发文回应此次事件:遭到黑客攻击,并已对可能遭受攻击的资产进行转移,但此次漏洞只涉及ETH合约,并不影响其他合约。如下图所示:
成都链安-安全实验室第一时间对本次事件进行跟踪分析,以下是态势感知系统检测盗的攻击者合约地址:
0xe7870231992ab4b1a01814fa0a599115fe94203f
NBA芝加哥公牛队合作NFT项目Ghxsts发布Mxnsters路线图:计划于3月13日投放:金色财经报道,NBA芝加哥公牛队合作NFT项目Ghxsts在社交媒体宣布了两项更新,一项涉及 Mxnsters 路线图,另一项宣布即将推出“Elemxnts” 。Mxnsters 路线图介绍了如何获取 Edition Pieces、Hybrid Cards、Evolved Mxnsters 和 Mxnstrosities,而 Ghxsts 生态系统的某些成员将能够以折扣价铸造 Elemxnt,Elemxnts 计划于 3 月 13 日投放,届时 Zxdiac 持有者将在公开发售开始前有一个 24 小时的铸造窗口,他们只需要支付 0.06 ETH 来铸造 Elemxnts,而公众则将支付 0.12 ETH。[2023/2/17 12:13:45]
0xb837531bf4eb8ebfa3e20948bd14be067c18cbd3
芝加哥市为接种新冠疫苗的青少年铸造NFT以鼓励疫苗接种:5月20日消息,美国芝加哥市为接种新冠疫苗的青少年铸造NFT以鼓励疫苗接种,该NFT由NFT多媒体平台VAST提供,包含接种者的肖像以及芝加哥音乐家Keith Harris的作品节选。(theblockcrypto)[2022/5/20 3:29:46]
0xb72e60ea1d0c04605f406c158dce9ac6ae6d224c
攻击者攻击方式还原:
1、攻击者调用合约向合约发送n个USDC增加抵押,并得到合约币oETH
2、攻击者调用合约发送ETH进行抵押,并销毁oETH以赎回自己的USDC
马斯克:对收购推特的情况感到兴奋:金色财经报道,特斯拉CEO埃隆·马斯克表示,对(收购)推特的情况感到兴奋。[2022/10/20 16:30:50]
3、攻击者赎回自己抵押的ETH。
如下图所示:
在步骤二中,攻击者调用exercise函数,并向其传递了两个地址A、B和两倍自己应得的USDC,程序正常执行,这导致地址B的资金受损。
技术分析
以交易
0x56de6c4bd906ee0c067a332e64966db8b1e866c7965c044163a503de6ee6552a
WEMADE与Blockdaemon签署谅解备忘录以支持WEMIX 3.0生态:8月2日消息,韩国游戏巨头 Wemade与机构级区块链基础设施公司Blockdaemon签署了一份谅解备忘录,以支持WEMIX3.0生态系统的发展。Blockdaemon 同时成为 Wemix 节点委员会合作伙伴(NCP)的第 7位成员。
Blockdaemon 作为核心基础设施平台,将成为 WEMIX3.0 生态系统的关键决策者之一,也是 Wemade 自有区块链主网高效去中心化的驱动力。谅解备忘录的条款允许对技术、咨询和安全条款进行战略性扩展。(PR Newswire)[2022/8/2 2:52:43]
为例,攻击者通过合约
0xe7870231992ab4b1a01814fa0a599115fe94203f对合约0x951D51bAeFb72319d9FBE941E1615938d89ABfe2
发动攻击,此笔交易中共获利$9907。如下图所示:
攻击者首先调用了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,只是简单的验证了地址是否可以赎回。属于代码层的逻辑漏洞,并且根据官方回复,此合约是经过安全审计的。成都链安在此提醒各项目方:
1、项目上线前应当进行足够有效的安全审计,最好是多方审计
2、对于合约的应当设置暂停合约交易等功能,在发生安全事件时,可以以保证资金安全
3、安全是一个持续的过程,绝非一次审计就能保平安,与第三方安全公司建立长期的合作至关重要
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。