建议用作凭证代币的合约地址需要填加白名单功能,以免被恶意操控。
封面:Photo by Compare Fibre on Unsplash
2023 年 8 月 18 日,据 Beosin-Eagle Eye 态势感知平台消息,Optimism 链的 DeFi 借贷协议 Exactly Protocol 遭受黑客攻击,黑客获利超 700 万美元。
攻击发生之后,Exactly Protocol 在社交媒体上表示,正在尝试与攻击者沟通,以归还被盗资产,已向警方提交报告。
三天之后的 8 月 21 日,Exactly Protocol 发文表示协议现已解除,用户可以执行所有操作,也没有发生任何清算。为了明确起见,黑客攻击只影响到使用外围合约(DebtManager)的用户。没有使用该合约的用户没有任何损失,协议仍在正常运行。
Beosin 安全团队第一时间对本次事件进行了分析,结果如下。
事件相关信息
攻击交易
0x3d6367de5c191204b44b8a5cf975f257472087a9aadc59b5d744ffdef33a520e0x1526acfb7062090bd5fed1b3821d1691c87f6c4fb294f56b5b921f0edf0cfad60xe8999fb57684856d637504f1f0082b69a3f7b34dd4e7597bea376c9466813585
攻击者地址
0x3747dbbcb5c07786a4c59883e473a2e38f571af9
攻击合约
0x6dd61c69415c8ecab3fefd80d079435ead1a5b4d0x995a24c99ea2fd6c87421d516216d9bdc7fa72b4
被攻击合约
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 建议项目上线前,选择专业的安全审计公司进行全面的安全审计,规避安全风险。