Defrost Finance 攻击事件分析

事件背景

2022 年 12 月 23 日,AVAX 上的 Defrost Finance 项目发生了重入攻击(V2),黑客获得了 173,000 美元。紧接着,在2022 年 12 月 24 日,项目方进行了 rugpull(V1),损失估计超过 1200 万美元。

12 月 26 日,Defrost Finance 称参与 V1 黑客攻击(rugpull)的黑客已经退还了资金。

攻击地址交易信息

重入

攻击交易:0xc6fb8217e45870a93c25e2098f54f6e3b24674a3083c30664867de474bf0212d

攻击者地址:0x7373Dca267bdC623dfBA228696C9d4E8234469f6

攻击合约地址:0x792E8f3727cad6e00c58d478798F0907c4cEC340

受害者合约地址:0xfF152e21C5A511c478ED23D1b89Bb9391bE6de96

rugpull

修改预言机交易之一:0x6307fdc4c7cce0c06a477db59a6ad378eb674cf1c902bd1b3748408926b2582d

铸币交易:0x69e9088b9fa395e8a4fca360c74ea86039510422a0fbbb98cae6872da14e8de2

开发人员地址:0x3cd5854fe3a13707b7882d8290d3cae793a7751a

清算者地址:0x6F31EB634ABa6921fBf15fc9aA6E08f11348f64f

项目方合约地址:0x5a733eb741bc080abae9bf3adaed9400416932f0

攻击详细过程

重入

  1. 攻击者部署攻击合约,利用 JoePair 中的 swap 函数,自行传入 calldata 来对 LSWUSDC 的 flashloan 进行调用
  2. 在攻击合约中重写 onFlashLoan 函数,并在其中对 LSWUSDC 的 deposit 进行调用,重复铸币
  3. 将两次铸币的金额全部取出,归还闪贷的金额后,剩下的 173,637 为收益

imgimg

rugpull

  1. 项目方调用 setOracleAddress 函数,为大量代币的 Collateral Vault 手动设置恶意预言机
  2. 调用 joinAndMint 函数,铸造假的抵押代币
  3. 恶意清算

imgimg

攻击原因分析

重入

在代码中,由于deposit 和 flashloan 函数缺少防止重入的措施,导致了攻击者可以通过onFlashLoan进行重入:攻击者通过恶意合约重入到了deposit,而_deposit 函数和 flashloan 函数中都会对 onDeposit 函数进行调用,而这个函数会进行铸币操作,也就导致了攻击者可以重复铸币,获取超额利润

img

img

img

rugpull

项目方发现了攻击发生后,意外的修改预言机地址,而清算逻辑是依托预言机来获取价格,这就导致了项目方使用liquidate函数进行了恶意清算

img

setOracleAddress 函数中,使用完全中心化的方法(多重签名)来判断是否可以更改预言机

img

img

参考链接

  1. https://twitter.com/DefiyieldSec/status/1607070666897129473
  2. https://twitter.com/peckshield/status/1606767457099993088
  3. https://medium.com/@Defrost_Finance/hacked-funds-returned-to-defrost-71b9d2d1b458

Defrost Finance 攻击事件分析
http://sissice.github.io/2022/12/27/DefrostFinanceAnalyse/
作者
Sissice
发布于
2022年12月27日
许可协议