Move語言引用安全模塊整數溢出漏洞或致節點拒絕服務

robot
摘要生成中

Move語言引用安全模塊存在整數溢出漏洞

近期,安全研究人員在深入分析Move語言時發現了一個嚴重的整數溢出漏洞。這個漏洞存在於引用安全驗證模塊中,可能導致拒絕服務攻擊。本文將詳細介紹這個漏洞的原理及影響。

漏洞背景

Move語言在執行字節碼前會進行代碼驗證,其中包括引用安全性檢查。這個過程分爲幾個步驟,而此次發現的漏洞就出現在reference_safety驗證階段。

引用安全驗證的主要流程是:

  1. 將代碼劃分爲基本塊
  2. 對每個基本塊進行分析
  3. 合並分析前後的狀態
  4. 傳播結果到後續塊

其中使用了AbstractState結構體來表示分析狀態,包含locals和borrow graph信息。

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

漏洞細節

漏洞出現在合並分析狀態的join_函數中。該函數使用u8類型迭代locals,但如果參數長度和局部變量長度之和超過256,就會發生整數溢出。

具體來說:

  • join_函數中使用self.iter_locals()迭代locals
  • iter_locals()返回u8類型迭代器
  • 如果參數長度+局部變量長度>256,迭代器會溢出

雖然Move有校驗locals個數的過程,但只檢查了局部變量數量,沒有包括參數長度。

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語言又一高危漏洞

漏洞利用

攻擊者可以構造一個循環代碼塊,利用溢出改變塊的state:

  1. 設置參數和局部變量總數>256
  2. 第一次執行後,新的locals map長度會溢出變小
  3. 再次執行時,訪問不存在的locals索引會導致panic

這可能引發節點拒絕服務。

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

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

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

漏洞影響

此漏洞可能導致:

  1. Move字節碼驗證器崩潰
  2. 依賴Move的區塊鏈節點拒絕服務
  3. 繞過部分安全檢查

修復建議

  1. 在locals邊界檢查中增加對參數長度的校驗
  2. 使用更大的整數類型如u16來迭代locals
  3. 在運行時增加額外的安全檢查

總結

這個漏洞再次說明了即使是設計嚴謹的語言也可能存在安全隱患。對Move語言來說,建議在驗證階段之外,運行時也增加必要的安全檢查。安全研究人員將繼續深入分析Move語言,以發現更多潛在問題。

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

MOVE2.38%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 6
  • 轉發
  • 分享
留言
0/400
后排吃瓜哥vip
· 08-11 11:51
move又一次翻车
回復0
午夜交易者vip
· 08-10 07:32
这又是哪个菜鸟写的代码 跪了
回復0
MEV迷踪侠vip
· 08-10 07:30
又在玩整数溢出
回復0
WagmiOrRektvip
· 08-10 07:29
还好我之前清仓Move了
回復0
社区打工仔vip
· 08-10 07:27
move又要暴雷了?慌啥
回復0
老钱包已哭晕vip
· 08-10 07:26
又出漏洞?move也不香了吧
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)