8 月30 日,Cream.Finance 遭到重入攻擊,PeckShield「派盾」第一時間預警並定位。

由於AMP 支持類似ERC-777 的代幣標準,而它的特性與某些協議不相兼容,此次Cream.Finance 的重入攻擊正是操縱了此漏洞。

攻擊者總共發起來17 筆攻擊交易, PeckShield「派盾」簡述其中一筆交易的攻擊過程:

首先,攻擊者創建攻擊合約A,從UniSwap V2 中藉出閃電貸500 WETH;

第二步,攻擊者將所借500 WETH 質押到到Cream.Finance,獲得24,172.2 crETH;

第三步,攻擊合約A 利用第二步所獲得的質押物,通過函數CErc20Delegator.borrow() 借出1,948 萬AMP。同時,利用重入漏洞,在用戶的信息未更新前,又藉出crETH 代幣,獲得355 ETH。

第四步,攻擊者創建攻擊合約B,並將974 萬AMP 代幣從攻擊合約A 轉入攻擊合約B 中。因為第三步的重入攻擊,使得攻擊合約A 已經資不抵債。所以攻擊者利用攻擊合約B 中的974 萬AMP,清算了攻擊合約A,並獲得9,068.6 crETH。

第五步,攻擊合約B 贖回9,068.6 crETH,獲得187.58 ETH;此時,合約B 的balanceof() 為187.58 WETH;

第六步,合約B 將187.58 WETH 轉給合約A,並調用函數selfdestruct();合約A 的餘額為542.58 ETH;

最終,攻擊者歸還閃電貸,獲利1,880 萬美元。

PeckShield

防禦方法

在進行代幣交換的時候,先扣除用戶的代幣,再將ETH 發送給用戶。

多個合約進行交互的時候需要考慮DeFi 業務組合可能存在的系統性風險問題,平台方不僅要確保在產品上線前有過硬的代碼審計和漏洞排查,還要在不同產品做業務組合時考慮因各自不同業務邏輯而潛在的系統性風控問題。

閱讀原文