背景介紹

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

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

本次攻擊共造成約440,000 USD 的損失。

攻擊及事件分析

首先,攻擊者從一系列的PancakeSwapV3 Pool 中利用flashloan 貸款了大量BUSD。

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

隨後,攻擊者利用PancakeSwap 的swap 功能的先轉兌換後的token 然後在callback 函數中支付token ,透過一系列的遞歸swap 又拿到了大量的BUSD 。

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

接著,在攻擊者拿到用來實施攻擊的本金後,開始針對DCF 計畫的攻擊。

第一步:

攻擊者將持有的所有DCF 轉給攻擊合約,

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

第二步:

攻擊者使用80,435,691 BUSD 兌換了4,039 DCF 給0x16600100b04d17451a03575436b4090f6ff8f404 ,

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

第三步:

攻擊者用剩下的29,919,679 BUSD 兌換了1,062,693 DCT 給攻擊合約,

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

第四步:

攻擊者利用transfer 將82 DCF 轉給了PancakeSwap Pair BUSD-DCF ,我們來看看DCF的transfer 的具體實現,

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

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

可以看到,當to 為PancakeSwap Pair 的位址時執行紅框裡的程式碼,漏洞就會出現在這裡。由於deadcfg 為2 ,所以程式碼會將transfer 的amount 約一半的DCF 從PancakeSwap Pair 中銷毀,最後再sync 。此操作會造成PancakeSwap Pair BUSD-DCF 中DCF 的數量大幅減少,DCF 的價格大幅拉升。透過此次操作,導致DCF 的價格由171 BUSD 拉升到了1,708,540,682,977,674 BUSD ,拉升了9,991,465,982,325 倍。由於DCF 的transfer 函數中的程式碼liquidHepler.addLiquidity 又將PancakeSwap Pair BUSDDCT 中的一部分DCT 消耗掉了,所以同樣也拉升了DCT 的價格。

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

最後,攻擊者利用手中剩餘的DCF 將PancakeSwap Pair BUSD-DCF 中的72,612,978 BUSD 掏空。由於上述操作同樣也拉升了DCT 的價格,因此攻擊者之前使用29,919,679 BUSD 兌換的DCT 價值變為38,302,987 BUSD 。最後,在攻擊者歸還了flashloan 中藉貸的BUSD 後,獲利442,028 BUSD 。

總結

本次漏洞的成因是專案方在實作DCF 的transfer 函數時,編寫了錯誤的邏輯。導致攻擊者透過transfer 給swap pair 後,銷毀pair 中的DCF ,因此可以輕易操縱DCF 的價格。最後完成套利。建議專案方在合約上線前審計時盡量選擇多個審計公司交叉審計。