Move語言引用安全驗證存整數溢出漏洞 可能導致拒絕服務

robot
摘要生成中

Move語言引用安全檢查中的整數溢出漏洞分析

近期,一個Move語言引用安全驗證過程中的新整數溢出漏洞被發現。這個漏洞出現在驗證代碼單元的reference_safety步驟中,涉及到Move語言中的基本塊和引用安全機制。

Move語言在執行字節碼前會進行代碼驗證,分爲四個步驟。引用安全驗證是其中一個重要環節,用於檢查是否存在懸空引用、對可變引用的訪問是否安全等。驗證過程會遍歷每個基本塊的字節碼指令。

Numen Cyber獨家發現move語言又一高危漏洞

基本塊是指除入口和出口外沒有分支指令的代碼序列。Move語言通過檢查分支和循環指令來識別基本塊。引用安全驗證會掃描每個基本塊中的指令,判斷引用操作的合法性。

Numen Cyber獨家發現move語言又一高危漏洞

驗證過程使用AbstractState結構體來表示狀態,包含locals和borrow graph兩個關鍵組件。驗證會比較執行前後的狀態,合並結果並傳播到後續塊。

Numen Cyber獨家發現move語言又一高危漏洞

漏洞出現在join_函數中。當參數長度和局部變量長度之和超過256時,由於使用u8類型迭代locals,會發生整數溢出。這可能導致新的locals map與之前不同,進而在再次執行時訪問不存在的索引,引發拒絕服務。

Numen Cyber獨家發現move語言又一高危漏洞

PoC代碼通過設置特定的參數和局部變量數量,觸發整數溢出,導致新的locals map長度縮短。再次執行時訪問不存在的offset,最終引發panic。

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

Numen Cyber獨家發現move語言又一高危漏洞

這個漏洞說明即使是靜態類型語言也可能存在安全問題。建議Move語言設計者在運行時增加更多安全檢查,而不僅僅依賴驗證階段的檢查。同時也反映出代碼審計的重要性。

MOVE1.29%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
Web3探险家_Linvip
· 08-01 00:31
溢出问题需要立即审计
查看原文回復0
SignatureDeniedvip
· 07-30 09:30
代码质量需继续提高
回復0
WagmiOrRektvip
· 07-29 07:39
代码审计很关键
回復0
liquidation_watchervip
· 07-29 07:38
审计必须跟上
回復0
WagmiWarriorvip
· 07-29 07:16
Move真危险啊
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)