# Move語言又現高危漏洞:整數溢出可導致節點崩潰近期,安全研究人員在深入分析Aptos Moveevm時發現了一個新的整數溢出漏洞。這個漏洞存在於Move語言的引用安全驗證過程中,可能導致節點崩潰。Move語言在執行字節碼前會進行代碼驗證,分爲4個步驟。此漏洞出現在reference_safety步驟中。該步驟主要用於驗證引用的安全性,包括檢查是否存在懸空引用、可變引用訪問是否安全等。驗證過程會遍歷每個基本塊並進行分析。基本塊是指除入口和出口外沒有分支指令的代碼序列。Move語言通過查找分支和循環指令來識別基本塊。在驗證引用安全性時,會維護一個AbstractState結構體,包含borrow graph和locals信息。驗證過程會執行基本塊代碼,生成執行後的state,然後與執行前的state進行合並,更新塊狀態並傳播到後續塊。漏洞出現在join_函數中。該函數用於合並執行前後的state,更新locals和borrow graph。當參數長度和局部變量長度之和大於256時,由於使用u8類型迭代locals,會導致整數溢出。利用這個溢出可以改變基本塊的state。在存在循環的代碼中,多次執行同一基本塊時,可能訪問到不存在的locals索引,從而引發panic導致節點崩潰。研究人員提供了一個PoC代碼,通過設置特定的參數和局部變量數量,觸發整數溢出,最終導致panic。這個漏洞暴露出即使像Move這樣重視安全的語言也可能存在漏洞。建議Move語言設計者在運行時增加更多安全檢查,而不僅僅依賴驗證階段的檢查。同時也說明了代碼審計的重要性。
Move語言整數溢出漏洞:引用安全驗證存風險
Move語言又現高危漏洞:整數溢出可導致節點崩潰
近期,安全研究人員在深入分析Aptos Moveevm時發現了一個新的整數溢出漏洞。這個漏洞存在於Move語言的引用安全驗證過程中,可能導致節點崩潰。
Move語言在執行字節碼前會進行代碼驗證,分爲4個步驟。此漏洞出現在reference_safety步驟中。該步驟主要用於驗證引用的安全性,包括檢查是否存在懸空引用、可變引用訪問是否安全等。
驗證過程會遍歷每個基本塊並進行分析。基本塊是指除入口和出口外沒有分支指令的代碼序列。Move語言通過查找分支和循環指令來識別基本塊。
在驗證引用安全性時,會維護一個AbstractState結構體,包含borrow graph和locals信息。驗證過程會執行基本塊代碼,生成執行後的state,然後與執行前的state進行合並,更新塊狀態並傳播到後續塊。
漏洞出現在join_函數中。該函數用於合並執行前後的state,更新locals和borrow graph。當參數長度和局部變量長度之和大於256時,由於使用u8類型迭代locals,會導致整數溢出。
利用這個溢出可以改變基本塊的state。在存在循環的代碼中,多次執行同一基本塊時,可能訪問到不存在的locals索引,從而引發panic導致節點崩潰。
研究人員提供了一個PoC代碼,通過設置特定的參數和局部變量數量,觸發整數溢出,最終導致panic。
這個漏洞暴露出即使像Move這樣重視安全的語言也可能存在漏洞。建議Move語言設計者在運行時增加更多安全檢查,而不僅僅依賴驗證階段的檢查。同時也說明了代碼審計的重要性。