通俗版本:簡單「翻譯」解讀下技術大佬關於 @CetusProtocol 駭客攻擊事件的分析: 這次攻擊暴露的是一個經典的整數溢出問題,具體表現為類型轉換過程中的數據截斷。 技術細節拆解: 1)漏洞定位:問題出現在get_amount_by_liquidity函數的類型轉換機制中,從u256到u64的強制轉換導致高位數據丟失。 2)攻擊流程: 1、攻擊者通過add_liquidity函數傳入極大的流動性數量參數; 2、系統調用get_delta_b函數計算所需的B代幣數量; 3、在計算過程中,兩個u128類型數據相乘,理論結果應為u256類型; 關鍵缺陷:函數返回時將u256結果強制轉換為u64,導致高位128位數據被截斷。 3)利用效果:原本需要大量代幣才能鑄造的流動性額度,現在僅需極少量代幣即可完成。 攻擊者以極低成本獲得巨額流動性份額,隨後通過銷毀部分流動性實現資金池套利。 簡單類比:就像用只能顯示8位數的計算機計算10億×10億,20位的計算結果只能顯示后8位,前12位直接消失。 攻擊者正是利用了這種「計算精度缺失」 漏洞。 需要明確一點:這次漏洞與 @SuiNetwork 的底層安全架構無關,屬於Move語言的安全性“榮光”暫時還可信。 Why? Move語言在資源管理和類型安全方面確實具備顯著優勢,能夠有效防範雙重支付、資源洩露等底層安全問題。 但此次Cetus協議出現的是應用邏輯層面的數學計算錯誤,並非Move語言本身的設計缺陷。 具體而言,Move的類型系統雖然嚴格,但對於顯式類型轉換(explicit casting)操作,仍需依賴開發者的正確判斷。 當程式主動執行u256到u64的類型轉換時,編譯器無法判斷這是有意設計還是邏輯錯誤。 此外,這次安全事件與Sui的共識機制、交易處理、狀態管理等核心底層功能完全無關。 Sui Network只是忠實執行了Cetus協定提交的交易指令,漏洞源於應用層協定本身的邏輯缺陷。 說白了,再先進的程式設計語言也無法完全杜絕應用層的邏輯錯誤。 Move能夠防範大部分底層安全風險,但無法代替開發者進行業務邏輯的邊界檢查和數學運算的溢出保護。
在調查了 Cetus 漏洞利用交易後,我相信我已經確定了該錯誤的根本原因。此問題源於 get_amount_by_liquidity 函數中從 u256 到 u64 的類型轉換。
查看原文
151
5.35萬
本頁面內容由第三方提供。除非另有說明,OKX 不是所引用文章的作者,也不對此類材料主張任何版權。該內容僅供參考,並不代表 OKX 觀點,不作為任何形式的認可,也不應被視為投資建議或購買或出售數字資產的招攬。在使用生成式人工智能提供摘要或其他信息的情況下,此類人工智能生成的內容可能不準確或不一致。請閱讀鏈接文章,瞭解更多詳情和信息。OKX 不對第三方網站上的內容負責。包含穩定幣、NFTs 等在內的數字資產涉及較高程度的風險,其價值可能會產生較大波動。請根據自身財務狀況,仔細考慮交易或持有數字資產是否適合您。