背景介紹
2024年11月18日,我們監控到 BNB Smart Chain 上的一起攻擊事件,被攻擊的項目爲 BTB 。攻擊交易爲
https://bscscan.com/tx/0xfb6df4053c2f1000cb03135064af19a79a87cf25efe612ae5f3468390d6be216
本次攻擊共造成約 5000 USD 的損失。
攻擊及事件分析
首先,攻擊者利用 flashloan 從 pancakeSwapV3 中貸款 100,000 BUSD
隨後,攻擊者利用 pancakeSwapV2 將貸到的 100,000 BUSD 兌換爲 1,263,427 BTB
接着,攻擊者利用 BTB 的 exchangeBTBToUSDT 將 3,052 BTB 兌換爲 4,999 BUSD
我們看一下被攻擊的智能合約的函數 exchangeBTBToUSDT 的代碼
可以看到,兌換的價格是由 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 。
通過 getPrice 中 getAmountOut 的實現,我們可以計算出攻擊者兌換前和兌換後的 BTB 價格變化。
我們通過計算得到 BTB 的價格從 1BTB=0.00379143964708692 BUSD 拉升到了 1 BTB =1.6381204893766859 BUSD 。價格被拉升了 400 多倍。
因此,攻擊者使用了 3052 BTB 兌換到了 4999 BUSD 。
最後,攻擊者用剩下的 1260375 BTB 從 pancakeSwapV2 中兌換了 99,964 BUSD。
攻擊者再歸還 flashloan 的貸款及利息 100,100 BUSD 後,獲利 4,863 BUSD 。
總結
本次漏洞的成因是項目方在完成兌換 BTB 到 BUSD 時,使用了過時的價格預言機,導致攻擊者可以輕易操縱 BTB 的價格,先進行大筆买入 BTB ,拉高 BTB 的價格後再賣出。最後完成套利。建議項目方在設計價格預言機和代碼運行邏輯時要多方驗證,合約上线前審計時盡量選擇多個審計公司交叉審計。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。