零時科技 || BTB 攻擊事件分析

背景介紹

2024年11月18日,我們監控BNB Smart Chain 上的一起攻擊事件,被攻擊的物品為BTB 。攻擊交易為

https://bscscan.com/tx/0xfb6df4053c2f1000cb03135064af19a79a87cf25efe612ae5f3468390d6be216

本次攻擊共造成約5000 USD 的損失。

攻擊及事件分析

首先,攻擊者利用flashloan 從pancakeSwapV3 中貸款100,000 BUSD

零時科技 || BTB 攻擊事件分析

隨後,攻擊者利用pancakeSwapV2 將貸到的100,000 BUSD 兌換為1,263,427 BTB

零時科技 || BTB 攻擊事件分析

接著,攻擊者利用BTB 的exchangeBTBToUSDT 將3,052 BTB 兌換為4,999 BUSD

零時科技 || BTB 攻擊事件分析

我們來看看被攻擊的智慧合約的函數exchangeBTBToUSDT 的程式碼

零時科技 || BTB 攻擊事件分析

可以看到,兌換的價格是由pancakeSwapV2 的BTB 和BUSD 的pair 的reserve 決定的。這樣,攻擊者就可以利用pacakeSwap 兌換大額BTB 或BUSD 來操縱BTB 的價格。我們可以看到,攻擊者在用flashloan 貸來的100,000 BUSD 兌換了BTB 。

因此,在攻擊者使用pancakeSwapV2 進行大額BUSD 兌換BTB 前

reserve0 為:

1,327,362,530,716,302,619,951,383 ,

reserve1 為:

5047758199614262100984 ,

兌換後reserve0 為:

63934622394514316973499 ,

reserve1 為:

105047758199614262100984 。

零時科技 || BTB 攻擊事件分析

透過getPrice 中getAmountOut 的實現,我們可以計算出攻擊者兌換前和兌換後的BTB 價格變化。

零時科技 || BTB 攻擊事件分析

我們透過計算得到BTB 的價格從1BTB=0.00379143964708692 BUSD 拉升到了1 BTB =1.6381204893766859 BUSD 。價格被拉升了400 倍以上。

因此,攻擊者使用了3052 BTB 兌換到了4999 BUSD 。

零時科技 || BTB 攻擊事件分析

最後,攻擊者用剩下的1260375 BTB 從pancakeSwapV2 兌換了99,964 BUSD。

零時科技 || BTB 攻擊事件分析

攻擊者再歸還flashloan 的貸款及利息100,100 BUSD 後,獲利4,863 BUSD 。

總結

本次漏洞的成因是專案方在完成兌換BTB 到BUSD 時,使用了過時的價格預言機,導致攻擊者可以輕易操縱BTB 的價格,先進行大筆買入BTB ,拉高BTB 的價格後再賣出。最後完成套利。建議專案方在設計價格預言機和程式碼運作邏輯時要多方驗證,合約上線前審計時盡量選擇多個審計公司交叉審計。