黑客獲利約630萬美元算法穩定幣$DEI被攻擊事件分析

2023年5月6日,據Beosin-Eagle Eye態勢感知平台消息,算法穩定幣DEI項目合約遭受黑客攻擊,黑客獲利約630萬美元。 Beosin安全團隊第一時間對事件進行了分析,結果如下。

事件相關信息

攻擊交易

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

https://arbiscan.io/tx/0xb1141785b7b94eb37c39c37f0272744c6e79ca1517529fec3f4af59d4c3c37ef

攻擊者地址

Bsc:0x08e80ecb146dc0b835cf3d6c48da97556998f599

Arbitrum:0x189cf534de3097c08b6beaf6eb2b9179dab122d1

被攻擊合約

0xde1e704dae0b4051e80dabb26ab6ad6c12262da0

攻擊流程

兩條鏈上漏洞原理以及攻擊手法相同,這里以Bsc鏈上交易為例進行分析:

1.攻擊者調用攻擊合約的0xf321f780函數發起攻擊。

2.攻擊合約首先調用DEI合約的approve函數給pair授權一個很大的值,隨後調用DEI合約的burnFrom函數,傳入pair地址。

3.隨後,攻擊合約直接調用DEI合約的transferFrom函數將pair的DEI代幣全部轉移給攻擊合約,只剩下一個單位的DEI代幣。

4.之後,攻擊合約調用pair的sync函數,更新儲備量,此時pair中只有1個單位的DEI和超130萬枚USDT。

5.最後,攻擊合約使用所有的DEI將USDC全部兌換出來。

漏洞分析

我們從上述的攻擊過程不難發現,本次事件的主要問題在於第2步與第3步,攻擊者調用了approve和burnFrom函數之後,為什麼就能直接調用transFrom函數將“其他人”的代幣轉移走?

我們看一下approve與burnFrom函數的代碼,approve函數為正常授權函數,並沒有什麼問題,關鍵在於burnFrom函數(如下圖),burnFrom函數正常邏輯是獲取被銷毀地址給調用者地址授權數量,之後將授權數量減去銷毀數量的新值用於更新授權數量。可以看到,309行的代碼函數獲取用戶授權值,而開發者將被銷毀地址與調用者地址寫反,導致獲取的授權值是黑客可以任意設置的,在這之前,黑客調用approve函數授權了一個巨大的數,所以這裡獲取的值是一個巨大的值,在310行代碼,將授權值進行更新,這里傳遞的值就是一個異常大的值,導致burnFrom函數調用結束後,pair地址給黑客地址授權了一個巨大的值,而黑客也能任意控制pair的代幣。

資金追踪

截止發文時,被盜資金還未被攻擊者轉出。

總結

針對本次事件,Beosin安全團隊建議:

1.合約開發時,涉及權限相關的函數一定要仔細思考其運行邏輯,並做好每一步的測試,防止因為粗心大意導致不可挽回的後果。

2. 項目上線前,建議選擇專業的安全審計公司進行全面的安全審計,規避安全風險。

Total
0
Shares
Related Posts