在2026年1月8日,於以太坊區塊24,191,019,Truebit的TRU代幣崩潰,因為一筆交易使協議的購買價格降至零。這一單一條件使得無限制的鑄造成為可能,並快速退出至ETH。 更多詳情如下。
攻擊者呼叫了 getPurchasePrice,然後執行 buyTRU (0xa0296215),鑄造的 TRU 數量超過了總供應量,重複這個循環,然後通過 sellTRU 出售。總成本低於 40 美元,交易返回了 8,535 ETH(約 2600 萬美元)。
只有 TRU 代幣代理在 Sourcify 中被驗證,使用 Solidity 0.5.3 編譯。那個時代還沒有內建的溢出檢查和許多安全功能。舊代碼可以運行多年,然後在單一邊緣情況下遇到更好的分析時失敗。
我們反編譯了未經驗證的購買合約,並追蹤到一個內部函數 (0x1446),該函數根據供應 S、儲備 R 和 THETA(當時為 75)計算價格。在大多數過程中使用了安全數學輔助函數。
失敗的關鍵在於最終表達式:v13 = _SafeDiv(v6, v12 + v9)。那個加法沒有檢查,而 Solidity 0.5.3 在溢出時不會回退。當輸入足夠大時,它會包裝,整數除法返回零。
我們的完整報告涵蓋了遺留系統的根本原因和教訓:
5.08K