🎉 親愛的廣場小夥伴們,福利不停,精彩不斷!目前廣場上這些熱門發帖贏獎活動火熱進行中,發帖越多,獎勵越多,快來 GET 你的專屬好禮吧!🚀
🆘 #Gate 2025年中社区盛典# |廣場十強內容達人評選
決戰時刻到!距離【2025年中社區盛典】廣場達人評選只剩 1 天,你喜愛的達人,就差你這一票衝進 C 位!在廣場發帖、點讚、評論就能攢助力值,幫 Ta 上榜的同時,你自己還能抽大獎!iPhone 16 Pro Max、金牛雕塑、潮流套裝、合約體驗券 等你抱走!
詳情 👉 https://www.gate.com/activities/community-vote
1️⃣ #晒出我的Alpha积分# |曬出 Alpha 積分&收益
Alpha 積分黨集合!帶話題曬出你的 Alpha 積分圖、空投中獎圖,即可瓜分 $200 Alpha 代幣盲盒,積分最高直接抱走 $100!分享攢分祕籍 / 兌換經驗,中獎率直線上升!
詳情 👉 https://www.gate.com/post/status/12763074
2️⃣ #ETH百万矿王争霸赛# |ETH 鏈上挖礦曬收益
礦工集結!帶話題曬出你的 Gate ETH 鏈上挖礦收益圖,瓜分 $400 曬圖獎池,收益榜第一獨享 $200!誰才是真 ETH 礦王?開曬見分曉!
詳情 👉 https://www.gate.com/pos
Move語言引用安全模塊發現整數溢出漏洞 或致DoS攻擊
Move語言引用安全模塊中發現新的整數溢出漏洞
近期,在對Move語言進行深入研究時,我們發現了一個新的整數溢出漏洞。這個漏洞存在於引用安全驗證過程中,其觸發過程頗爲有趣。本文將深入分析這個漏洞,並探討Move語言的一些背景知識。
Move語言在執行字節碼前會進行代碼單元驗證,分爲四個步驟。這個漏洞出現在reference_safety步驟中。該步驟負責驗證引用的安全性,包括檢查是否存在懸空引用、可變引用訪問是否安全、全局存儲引用訪問是否安全等。
引用安全驗證的入口函數會調用analyze_function,對每個基本塊進行驗證。基本塊是指除入口和出口外沒有分支指令的代碼序列。Move語言通過遍歷字節碼,查找所有分支指令和循環指令序列來識別基本塊。
Move語言支持兩種引用類型:不可變引用(&)和可變引用(&mut)。引用安全模塊通過掃描函數中基本塊的字節碼指令來驗證所有引用操作的合法性。驗證過程使用AbstractState結構體,包含borrow graph和locals,用於確保函數中引用的安全性。
漏洞出現在join_函數中。當參數長度加上局部變量長度超過256時,由於iter_locals()函數返回u8類型的迭代器,會導致整數溢出。雖然Move有校驗locals個數的過程,但在check bounds模塊中只校驗了locals,沒有包括參數長度。
這個整數溢出可能導致拒絕服務(DoS)攻擊。當存在循環代碼塊並利用溢出改變塊的state時,新的locals map與之前不同。再次執行execute_block函數時,如果指令需要訪問的索引在新的AbstractState locals map中不存在,將導致DoS。
我們提供了一個可在git中重現的PoC。該PoC中的代碼塊包含一個無條件分支指令,每次執行最後一條指令時都會跳回第一條指令,從而多次調用execute_block和join函數。
這個漏洞說明即使是像Move這樣注重安全的語言也可能存在安全隱患。代碼審計的重要性不言而喻,程序員難免會有疏忽。作爲Move語言安全研究的領導者,我們將繼續深入研究Move的安全問題。
我們建議Move語言設計者在運行時增加更多的檢查代碼,以防止意外情況發生。目前Move主要在verify階段進行安全檢查,但這可能還不夠。一旦驗證被繞過,運行階段缺乏足夠的安全加固可能導致更嚴重的問題。