原文標題:《經典再現|詳解Cream.Finance的ERC777重入攻擊》
原文作者: PeckShield

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 萬美元。
在進行代幣交換的時候,先扣除用戶的代幣,再將 ETH 發送給用戶。
多個合約進行交互的時候需要考慮 DeFi 業務組合可能存在的系統性風險問題,平臺方不僅要確保在產品上線前有過硬的代碼審計和漏洞排查,還要在不同產品做業務組合時考慮因各自不同業務邏輯而潛在的系統性風控問題。
原文鏈接
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia