📢 #Gate观点任务# 第一期精彩啓程!調研 Palio (PAL) 項目,在Gate廣場發布您的看法觀點,瓜分 $300 PAL!
💰️ 選取15名優質發帖用戶,每人輕鬆贏取 $20 PAL!
👉 參與方式:
1. 調研$PAL項目,發表你對項目的見解。
2. 帶上$PAL交易連結。
3. 推廣$PAL生態周系列活動:
爲慶祝PAL上線Gate交易,平台特推出HODLer Airdrop、CandyDrop、VIP Airdrop、Alpha及餘幣寶等多項PAL專屬活動,回饋廣大用戶。請在帖文中積極宣傳本次系列活動,詳情:https://www.gate.com/announcements/article/45976
建議項目調研的主題:
🔹 Palio 是什麼?
🔹 $PAL 代幣經濟模型如何運作?
🔹 如何參與 $PAL生態周系列活動?
您可以選擇以上一個或多個方向發表看法,也可以跳出框架,分享主題以外的獨到見解。
注意:帖子不得包含除 #Gate观点任务# 和 #PAL# 之外的其他標籤,並確保你的帖子至少有 60 字,並獲得至少 3 個點讚,否則將無法獲得獎勵。
⚠️ 重復內容的帖子將不會被選取,請分享屬於你獨特的觀點。
⏰ 活動時間:截止至 2025年7月11日 24:00(UTC+8)
Move語言整數溢出漏洞揭祕:字節碼驗證中的隱患
Move語言整數溢出漏洞分析
在對Move語言進行深入研究後,我們發現了一個新的整數溢出漏洞。這個漏洞出現在Move語言字節碼驗證過程的引用安全性檢查階段。本文將詳細分析這個漏洞的觸發過程,並探討Move語言的一些核心概念。
Move語言字節碼驗證流程
Move語言在執行字節碼之前會進行代碼驗證,分爲4個步驟。本次漏洞出現在reference_safety步驟中。該步驟主要負責驗證引用的安全性,包括檢查是否存在懸空引用、可變引用訪問是否安全等。
驗證過程首先會識別代碼中的基本塊。基本塊是指除入口和出口外沒有分支指令的代碼序列。Move通過遍歷字節碼,查找所有分支指令和循環指令來確定基本塊。
Move中的引用安全
Move支持兩種引用類型:不可變引用(&)和可變引用(&mut)。引用安全模塊會掃描函數中每個基本塊的字節碼指令,驗證所有引用操作是否合法。
驗證過程使用AbstractState結構體來表示狀態,包含borrow graph和locals。驗證時會比較執行前後的狀態,並合並更新塊狀態。
漏洞分析
漏洞出現在join_函數中。該函數用於合並執行前後的狀態,更新locals map和borrow graph。問題在於locals迭代器返回u8類型,當參數長度和局部變量長度之和超過256時會發生溢出。
雖然Move有校驗locals個數的過程,但只校驗了局部變量數量,沒有包括參數長度。
漏洞利用
利用這個溢出可以改變基本塊的狀態。在循環代碼中,每次執行基本塊後狀態會發生變化。當再次執行時,如果指令訪問的索引在新的locals map中不存在,就會導致panic,從而實現DoS攻擊。
PoC演示
提供了一個可復現的PoC代碼,通過設置特定的參數和局部變量數量,觸發整數溢出,導致程序崩潰。
總結
這個漏洞再次證明了代碼審計的重要性。對於Move語言,建議在運行時增加更多安全檢查,而不僅僅依賴驗證階段的檢查。我們將繼續深入研究Move語言的安全問題,爲其發展貢獻力量。