BitsLab 的 TonBit 再次發現 TON 虛擬機漏洞:RUNVM 指令可能汙染智能合約執行環境

本文為機器翻譯
展示原文
  • RUNVM指令漏洞導致子虛擬機器耗盡gas時造成庫損壞,使父虛擬機器的庫處於清除狀態,儘管繼續執行。
  • TonBit透過概念驗證測試展示了漏洞,顯示RUNVM執行後由於庫被清空,XLOAD操作失敗。
  • 作為TON的主要安全保證提供商,TonBit遵循負責任的披露實踐,並已向TON基金會提交了緩解計劃。

TonBit安全研究人員發現了TON虛擬機器RUNVM指令中的關鍵非原子狀態轉換漏洞,當子虛擬機器耗盡gas時會破壞庫完整性,可能導致依賴系統的合約失敗。


**合作社論內容,由TonBit提供。所表達的觀點不代表CoinRank。非財務建議。

TonBit在BitsLab旗下,再次在TON虛擬機器(TVM)程式碼中發現了一個"定時炸彈"——RUNVM指令中的非原子狀態轉換漏洞。攻擊者可以在子虛擬機器耗盡gas的瞬間破壞父虛擬機器的庫,並引發後續呼叫失敗,最終導致依賴庫完整性的合約異常執行。下文保留了原始技術細節,以展示完整的發現和驗證過程,幫助開發者深入瞭解問題並提高對類似風險的認識。

BitsLab的TonBit再次發現TON虛擬機器漏洞:RUNVM指令可能汙染智慧合約執行環境

以下是漏洞的詳細描述:

TVM中的RUNVM指令可以汙染呼叫者的狀態並使庫變得不可用。

RUNVM指令程式碼中出現新的漏洞。它允許汙染呼叫者的狀態。相關程式碼片段如下:

RUNVM指令程式碼中的新漏洞,允許汙染呼叫者狀態的程式碼片段

上面的程式碼負責啟動子虛擬機器。它將當前VmState中的"log"和"libraries"移動到新的VmState物件"new_state"中,然後用"new_state"替換當前VmState。

問題在於這個操作並非真正原子化。在執行"*this = std::move(new_state);"語句之前,虛擬機器可能已耗盡gas並在"new_state"替換當前狀態之前停止程序。因此,"libraries"可能已被移出,使子虛擬機器的庫處於清除(移動)狀態。

由於RUNVM指令提供了isolate_gas引數來隔離子虛擬機器和父虛擬機器之間的gas消耗,這就創造了以下場景:

即使子虛擬機器觸發gas耗盡異常,父虛擬機器仍然保留足夠的gas繼續執行。然而,依賴"libraries"的後續操作將失敗,因為子虛擬機器已在失敗的狀態轉換期間移動/清除了庫。這導致某些假設庫完整性的合約出現意外行為。

概念驗證:

我們實施了以下測試用例來證明這一漏洞:

概念驗證

概念驗證

概念驗證

測試的關鍵修改:

為了便於本地觀察庫狀態,我們修改了NOP指令以強制註冊庫條目:

測試的關鍵修改

重現步驟:

將此測試用例新增到crypto/test/vm.cpp

執行test-vm可執行檔案

觀察XLOAD執行期間由於庫為空的異常。

預期行為:

NOP執行後:庫包含1個條目

RUNVMX執行後,儘管父虛擬機器繼續,但庫變為空

XLOAD失敗並出現異常

這證明了非原子狀態轉換與gas隔離相結合,創造了違反執行上下文完整性的不一致狀態。

這一發現再次突顯了TonBit(BitsLab的子公司)在TON生態系統安全研究方面的深厚專業知識。我們已立即向TON基金會提交技術細節和緩解方案,並協助完成修復。我們建議所有開發者在官方補丁釋出後立即更新其依賴庫;同時,在自定義合約中加入更嚴格的庫完整性檢查和gas管理邏輯,以防止類似問題被惡意利用。BitsLab將繼續堅持"負責任披露"原則,並與社群一起加強Web3安全防線。

關於TONBIT

TonBit是BitsLab的核心子品牌,是TON生態系統中值得信賴的安全專家和早期建設者。作為TON區塊鏈的主要安全保證提供商(SAP),TonBit專門進行全面的安全審計,包括Tact和FunC語言審計,確保TON上構建的專案的完整性和彈性。經TON官方認可,TonBit已成功審計了眾多知名專案,如Catizen、Algebra、UTonic、Ton Batch Sender、TonUp、PixelSwap、Tradoor、Miniton、Thunder Finance等近20個TON專案,展示了其在保護基於TON的解決方案方面的專業expertise。

BitsLab的TonBit再次發現TON虛擬機器漏洞:RUNVM指令可能汙染智慧合約執行環境〉這篇文章最早釋出於《CoinRank》。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論