黑客获利超700万美元 Op链上Exactly Protocol遭黑客攻击事件分析
2023年8月18日,据Beosin-Eagle Eye态势感知平台消息, Optimism链的DeFi借贷协议Exactly Protocol遭受黑客攻击,黑客获利超700万美元。
攻击发生之后,Exactly Protocol在社交媒体上表示,正在尝试与攻击者沟通,以归还被盗资产,已向警方提交报告。
三天之后的8月21日,Exactly Protocol发文表示协议现已解除,用户可以执行所有操作,也没有发生任何清算。为了明确起见,黑客攻击只影响到使用外围合约(DebtManager)的用户。没有使用该合约的用户没有任何损失,协议仍在正常运行。
Beosin安全团队第一时间对本次事件进行了分析,结果如下。
事件相关信息
●攻击交易
0x3d6367de5c191204b44b8a5cf975f257472087a9aadc59b5d744ffdef33a520e
0x1526acfb7062090bd5fed1b3821d1691c87f6c4fb294f56b5b921f0edf0cfad6
0xe8999fb57684856d637504f1f0082b69a3f7b34dd4e7597bea376c9466813585
●攻击者地址
0x3747dbbcb5c07786a4c59883e473a2e38f571af9
●攻击合约
0x6dd61c69415c8ecab3fefd80d079435ead1a5b4d
0x995a24c99ea2fd6c87421d516216d9bdc7fa72b4
●被攻击合约
0x16748cb753a68329ca2117a7647aa590317ebf41
漏洞分析
漏洞合约中的多个Market地址参数可被操控。 攻击者通过传入恶意的Market合约地址,成功绕过permit检查,执行了恶意的deposit函数,窃取了用户的抵押品USDC并清算用户资产,最终实现了攻击者的盈利目的。
攻击流程
我们以0x3d6367…这笔交易为例
攻击准 备阶段:
1.攻击者创建了多个恶意Market合约
攻击阶段
1.攻击者调用漏洞合约的leverage函数(杠杠函数)传入伪造的market合约地址,由于market地址未校验合法性,permit检查被绕过并将_msgSender更改为受害者地址,这里为步骤3窃取受害者资产做了准备。
2.leverage函数会继续调用恶意market合约中的deposit函数,进而执行攻击者的恶意代码
3.deposit函数中的恶意代码会先创建一个V3 恶意token/USDC的池子,然后再重入进漏洞合约的crossDeleverage函数。由于marketIn和marketOut同样可控,导致crossDeleverage函数计算的V3池子最终为攻击者创建的V3池子。
4.此时由于_msgSender已经修改为了受害者,crossDeleverage函数进一步调用攻击者创建的V3池子的swap函数用作闪电贷,并在回调函数uniswapV3callback中将受害者的资金转入至V3池子中。
5.攻击者移除流动性将受害者资金从V3池子中窃取出来。
6.由于受害者抵押资金被转走,满足清算条件,攻击者进一步清算了受害者的头寸而获得了更多的收益。
资金追踪
截止发文时,被盗资金已通过Optimism bridge和Across Protoco跨链至以太坊。
总结
针对本次事件,Beosin安全团队建议:
建议用作凭证代币的合约地址需要填加白名单功能,以免被恶意操控。 目前,Beosin已对Optimism链上多个项目诸如DIPX等进行过安全审计,因此Beosin建议项目上线前,选择专业的安全审计公司进行全面的安全审计,规避安全风险。
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
Justin Sun suspected to have purchased $160m in Ethereum
Justin Sun suspected to have purchased $160m in Ethereum