# Move語言新發現一個整數溢出漏洞近期,安全研究人員在深入分析Move語言時發現了一個新的整數溢出漏洞。這個漏洞出現在Move語言的引用安全驗證過程中,可能導致節點崩潰。Move語言在執行字節碼前會進行代碼驗證,分爲四個步驟。這個漏洞存在於reference_safety步驟中。引用安全驗證主要檢查是否存在懸空引用、可變引用訪問是否安全、全局存儲引用訪問是否安全等。驗證過程會對每個基本塊進行分析。基本塊是一段除入口和出口外沒有分支指令的代碼序列。Move通過遍歷字節碼、查找分支指令和循環指令來識別基本塊。驗證引用安全性的主要流程是:對每個基本塊執行代碼,生成執行後的狀態,然後將執行前後的狀態合並,更新塊狀態並傳播到後續塊。這個過程會反復執行,直到狀態不再變化或出錯。漏洞出現在合並狀態的過程中。如果函數參數長度加上局部變量長度大於256,會導致u8類型溢出。雖然有代碼檢查局部變量個數,但沒有包括參數長度。利用這個溢出可以改變塊的狀態,使新舊狀態不同。當再次執行基本塊時,訪問新狀態中不存在的索引會導致程序崩潰。研究人員給出了一個概念驗證代碼,可以觸發這個漏洞導致節點崩潰。這說明即使是靜態類型語言也可能存在安全問題,代碼審計很重要。建議Move語言在運行時增加更多安全檢查,而不只是在驗證階段。這個漏洞的發現再次表明,沒有絕對安全的代碼。即使是強類型語言也可能存在漏洞。安全研究人員將繼續深入分析Move語言,尋找更多潛在問題。
Move語言新發現整數溢出漏洞 或致節點崩潰
Move語言新發現一個整數溢出漏洞
近期,安全研究人員在深入分析Move語言時發現了一個新的整數溢出漏洞。這個漏洞出現在Move語言的引用安全驗證過程中,可能導致節點崩潰。
Move語言在執行字節碼前會進行代碼驗證,分爲四個步驟。這個漏洞存在於reference_safety步驟中。引用安全驗證主要檢查是否存在懸空引用、可變引用訪問是否安全、全局存儲引用訪問是否安全等。
驗證過程會對每個基本塊進行分析。基本塊是一段除入口和出口外沒有分支指令的代碼序列。Move通過遍歷字節碼、查找分支指令和循環指令來識別基本塊。
驗證引用安全性的主要流程是:對每個基本塊執行代碼,生成執行後的狀態,然後將執行前後的狀態合並,更新塊狀態並傳播到後續塊。這個過程會反復執行,直到狀態不再變化或出錯。
漏洞出現在合並狀態的過程中。如果函數參數長度加上局部變量長度大於256,會導致u8類型溢出。雖然有代碼檢查局部變量個數,但沒有包括參數長度。
利用這個溢出可以改變塊的狀態,使新舊狀態不同。當再次執行基本塊時,訪問新狀態中不存在的索引會導致程序崩潰。
研究人員給出了一個概念驗證代碼,可以觸發這個漏洞導致節點崩潰。這說明即使是靜態類型語言也可能存在安全問題,代碼審計很重要。建議Move語言在運行時增加更多安全檢查,而不只是在驗證階段。
這個漏洞的發現再次表明,沒有絕對安全的代碼。即使是強類型語言也可能存在漏洞。安全研究人員將繼續深入分析Move語言,尋找更多潛在問題。