穩健,是 Gate 持續增長的核心動力。
真正的成長,不是順風順水,而是在市場低迷時依然堅定前行。我們或許能預判牛熊市的大致節奏,但絕無法精準預測它們何時到來。特別是在熊市週期,才真正考驗一家交易所的實力。
Gate 今天發布了2025年第二季度的報告。作爲內部人,看到這些數據我也挺驚喜的——用戶規模突破3000萬,現貨交易量逆勢環比增長14%,成爲前十交易所中唯一實現雙位數增長的平台,並且登頂全球第二大交易所;合約交易量屢創新高,全球化戰略穩步推進。
更重要的是,穩健並不等於守成,而是在面臨嚴峻市場的同時,還能持續創造新的增長空間。
歡迎閱讀完整報告:https://www.gate.com/zh/announcements/article/46117
Move語言引用安全驗證中發現新整數溢出漏洞
Move語言引用安全機制中發現新的整數溢出漏洞
近期,在對Move語言進行深入研究時,我們發現了一個新的整數溢出漏洞。這個漏洞出現在引用安全驗證過程中,涉及到Move語言的一些核心機制。通過分析這個漏洞,我們可以更深入地理解Move語言的設計和實現。
Move語言的驗證過程
Move語言在執行字節碼之前會對代碼單元進行驗證,這個過程分爲4個步驟。本次發現的漏洞出現在reference_safety這一步驟中。
reference_safety模塊定義了用於驗證引用安全性的核心函數。它主要檢查是否存在懸空引用、可變引用訪問是否安全、全局存儲引用訪問是否安全等問題。
驗證過程的入口函數會調用analyze_function來分析每個函數。analyze_function會對函數中的每個基本塊進行驗證。基本塊是指除入口和出口外沒有分支指令的代碼序列。
Move語言中的引用安全
Move語言支持兩種引用類型:不可變引用(&)和可變引用(&mut)。不可變引用用於讀取數據,可變引用用於修改數據。這種設計有助於提高代碼的安全性和可讀性。
引用安全驗證模塊會掃描函數中每個基本塊的字節碼指令,判斷所有引用操作是否合法。驗證過程主要包括:
這個過程類似於V8 turbofan中的Sea of Nodes思想。
漏洞分析
漏洞出現在合並執行前後狀態的過程中。當函數參數長度加上局部變量長度大於256時,由於使用u8類型表示局部變量索引,會導致整數溢出。
雖然Move語言有校驗局部變量個數的過程,但這個校驗並不包括參數長度。開發人員似乎意識到需要檢查參數和局部變量的總和,但實際代碼中只檢查了局部變量的個數。
這個整數溢出可能導致拒絕服務攻擊(DoS)。攻擊者可以構造一個循環代碼塊,利用溢出改變塊的狀態。當再次執行基本塊時,如果指令需要訪問的索引在新的狀態中不存在,就會導致程序崩潰。
漏洞利用
我們構造了一個概念驗證(PoC)來演示這個漏洞:
結論
這個漏洞再次證明了沒有絕對安全的代碼。雖然Move語言在執行前進行了靜態校驗,但仍可能被整數溢出漏洞繞過。
對於Move語言的未來發展,我們建議:
作爲Move語言安全研究的先行者,我們將繼續深入研究Move的安全問題,爲其發展貢獻力量。