Move語言引用安全模塊發現整數溢出漏洞 可導致拒絕服務攻擊

robot
摘要生成中

Move語言引用安全模塊發現新的整數溢出漏洞

最近,研究人員在深入分析Move語言的過程中,發現了一個新的整數溢出漏洞。這個漏洞存在於引用安全模塊中,可能導致嚴重的拒絕服務攻擊。本文將對這個漏洞的發現過程和技術細節進行詳細介紹。

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

Move語言的引用安全機制

Move語言借鑑了Rust的思想,支持兩種引用類型:不可變引用(&)和可變引用(&mut)。引用安全模塊通過掃描函數中的基本塊和字節碼指令來驗證所有引用操作的合法性。

驗證過程主要包括以下步驟:

  1. 對每個基本塊進行分析
  2. 執行基本塊代碼生成post state
  3. 合並pre state和post state
  4. 更新塊狀態並傳播到後續塊

其中,state包含locals和borrow graph兩個關鍵組件,用於確保函數中引用的安全性。

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

漏洞詳情

該漏洞出現在引用安全模塊的join_函數中。當函數參數長度和局部變量長度之和大於256時,由於使用u8類型迭代locals,會導致整數溢出。

具體來說:

  • iter_locals()返回u8類型的迭代器
  • 當參數長度+局部變量長度>256時會溢出
  • 開發人員似乎意識到需要檢查這一點,但實際代碼只檢查了局部變量數量

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

漏洞利用

利用這個漏洞可以構造一個循環代碼塊:

  1. 第一次執行時觸發溢出,改變locals map
  2. 第二次執行時訪問不存在的locals索引,導致panic

這會造成節點崩潰,形成拒絕服務攻擊。

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

漏洞復現

研究人員提供了一個PoC來復現這個漏洞:

  1. 設置parameters和locals均爲SignatureIndex(0),使num_locals爲264
  2. 第一次執行後,新的locals map長度變爲8
  3. 第二次執行時,copyloc(57)訪問不存在的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語言又一高危漏洞

總結與建議

這個漏洞說明:

  1. 沒有絕對安全的代碼,靜態校驗可能被繞過
  2. 代碼審計很重要,可以發現開發者的疏忽
  3. Move語言應該增加運行時檢查,而不僅僅依賴驗證階段的安全檢查

研究人員呼籲Move語言設計者加強運行時安全機制,以防止類似漏洞被利用後造成更嚴重的問題。

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

查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 讚賞
  • 7
  • 分享
留言
0/400
智能合约打工人vip
· 1小時前
又出锅啦 修复起来得挂累了
回復0
staking_grampsvip
· 07-06 05:24
Move这漏洞太业余了吧
回復0
区块链假面骑士vip
· 07-06 05:22
写代码的手艺太不细腻了吧
回復0
踏空资深专业户vip
· 07-06 05:20
又出漏洞 Move也不咋地啊
回復0
GateUser-c799715cvip
· 07-06 05:19
代码谁写的 怎么这么菜
回復0
YieldChaservip
· 07-06 05:17
u8又出问题啊
回復0
BridgeJumpervip
· 07-06 05:09
开发不规范 修bug两行泪
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)