关注合约重入外,请务必注意代币的重入。
2022年3月31日,成都链安链必应-区块链安全态势感知平台舆情监测显示,Ola Finance遭遇黑客攻击,损失约为467万美元,具体包括216,964.18 USDC、507,216.68 BUSD、200,000 fUSD、550.45 WETH、26.25 WBTC和1,240,000.00 FUSE,Ola Finance称将在几天内宣布受害者赔偿计划。成都链安技术团队对此事件进行了相关分析。
#1 分析如下
根据交易记录显示,攻击者利用主攻击合约C1(0x632942c9BeF1a1127353E1b99e817651e2390CFF)对应ola.finance系列合约进行攻击。
跟踪其主要调用过程和代码,发现ola.finance项目核心凭证代币使用了ERC677模块,如果转账的目标地址是合约,则会调用目标地址的Fallback函数,这便成为本次攻击点的切入点。
下面以
0x53666970d6137f9dad6d3ff7fab258ceb1ac4861d6c5d6a8ebd5a13e16fb3f8d攻击交易为例,分析攻击者的攻击流程:
1、攻击者利用C1合约创建攻击合约
C2(0xBcc8a610bd35C2981025Fe32a5aDc2FB9b6b3B01),并利用闪电贷借出515个WETH,然后将这部分WETH发送至C2合约。
2、C2合约利用步骤1获得的515WETH发送至合约
ola_oWETH(0x139Eb08579eec664d461f0B754c1F8B569044611)进行质押,以换取25,528.022 oWETH。
3、C2利用25,528.022 oWETH作为保证金,向ola_oWBTC合约
(0x3882bA8bD0E8AbAf56F86e6744b103dAB6a9ba4C)借出20个WBTC,在转账时利用ERC677的转账函数进行重入,将属于自己的25,528.022 oWETH和20 WBTC转账至C1。
4、C1合约利用步骤3获取到的25,528.022 oWETH在ola_oWETH合约上进行赎回,获取514.99 WETH。
5、C1再次创建C3合约
(0x1B1d76C9AFd990080b950894E9f6230b151D0dE7),并将步骤3中获取到的20 WBTC发送至C3合约。
6、C3合约重复步骤2、3的操作,利用20 WBTC进行质押,并在borrow时再次利用重入获得100个WETH。
7、完成攻击,归还闪电贷516.648WETH(共获利98WETH和19.99WBTC)。
值得一提的是,前面所述流程是本次事件的首次攻击,并借助了闪电贷作为基础资金,而后续则是以本次获利后的资金作为基础资金,反复执行上述2-3步骤进行多次攻击,最终获利约为467万美金。
对此,成都链安团队建议:关注合约重入外,请务必注意代币的重入。