幣安智能鏈上的去中心化金融(DeFi)項目 Caterpillar Coin 於 2024 年 9 月 10 日遭到攻擊,估計損失約 140 萬美元。
攻擊者通過三筆交易對該項目實施了攻擊:
https://bscscan.com/tx/0x6262c0f15c88aed6f646ed1996eb6aae9ccc5d5704d5faccd1e1397dd047bc8a
https://bscscan.com/tx/0xce6e474dc9555ef971473fee19f87716f38ba01a0df39e78207b71eda134c420
https://bscscan.com/tx/0x2c123d08ca3d50c4b875c0b5de1b5c85d0bf9979dffbf87c48526e3a67396827
概述
在我們的分析中,我們將重點關注造成最大損失的攻擊——第三次攻擊:
https://bscscan.com/tx/0x2c123d08ca3d50c4b875c0b5de1b5c85d0bf9979dffbf87c48526e3a67396827
攻擊者:
https://bscscan.com/address/0x560a77bc06dcc77eee687acb65d46b580a63eb45
脆弱合約:
https://bscscan.com/address/0x7057f3b0f4d0649b428f0d8378a8a0e7d21d36a7
漏洞分析
此次攻擊似乎遵循了一個簡單的模式:攻擊者利用閃電貸從 USDT-WBNB 對中借入USDT ,然後循環創建多個合約,主要攻擊邏輯在構造函數中運行。在創建每個合約之前,攻擊者都會轉移大量USDT以供構造函數中的邏輯使用。
在合約創建之前,將USDT發送給合約,新合約會將其中的一部分兌換成 CUT 代幣。
然後,合約利用獲得的 CUT 代幣和USDT為配對合約增加流動性。作為提供流動性的回報,合約將獲得相應數量的 CAKE-LP 代幣,代表其在流動性池中的份額。
在後續步驟中,合約將使用剩餘的 CUT 代幣(我們知道數量很大)執行另一次交換,這次將 CUT 代幣轉換回USDT。
然後,攻擊者銷燬 CAKE-LP 代幣。此操作會從池中移除他們提供的流動性,使他們能夠提取其相應的基礎資產份額。
通過明顯利用銷燬過程漏洞獲得大量 CUT 代幣,攻擊者能夠執行進一步的交換,將這些 CUT 代幣轉換回USDT。這可能使他們大幅增加收益。
此外,攻擊者似乎循環執行合約創建過程,多次重複該漏洞以耗盡配對合約中大量的USDT儲備。
深入研究 CUT 代幣代碼中的addLiquidity和removeLiquidity步驟,以澄清刻錄操作中的錯誤。
對於每個新用戶增加流動性,CUT 代幣將記錄訂單 ID 以用於獎勵目的,包括增加的 CUT 金額的等值USDT價值。
並且在移除流動性的時候,CUT token 會根據_transferFunDealTypeContractAddress合約的邏輯來計算獎勵,這也就是所謂的價格保護機制。
valuePreservationByRmoveLP函數在0x70f88861函數內被反編譯。
通過這種邏輯,攻擊者可以輕鬆操縱價格(拉高出貨),從而在同一筆交易中造成orderID
中初始記錄的值與後來的 CUT 值之間的顯著差異。
根本原因
通過分析攻擊過程,我們可以看出該合約的主要缺陷在於項目方採用實時價格來計算獎勵。
經驗教訓
完全依賴實時價格進行計算可能會有風險。攻擊者可能會利用這一點操縱價格以謀取利益。為了保護項目的完整性,建議改為使用預言機價格進行計算。