返回部落格

Solana rBPF 中發現新的整數溢位漏洞

Code Auditing
2021年12月30日
閱讀約 3 分鐘

最近,我們的漏洞檢測系統在 Solana 的 rBPF(即所有 Solana 去中心化應用程式所運行的虛擬機:https://github.com/solana-labs/rbpf)中發現了一個嚴重問題。經過仔細調查,我們發現這是一個整數溢位漏洞,該漏洞可被利用來導致整個 Solana 網路崩潰。我們已向 Solana 安全團隊回報此漏洞,該團隊隨即採取行動確認並修復了該漏洞。截至本文撰寫時,幾乎所有驗證者節點都已收到補丁並升級至最新版本,這意味著現在進行公開披露是安全的。

eBPF 與 rBPF

擴展 Berkeley 封包過濾器(eBPF[1])最初是為在核心中過濾封包而開發的。由於 eBPF 的安全性、效率和可擴展性,它現在被用於網路、追蹤、性能分析等 多個領域[2]。考慮到 eBPF 的強大能力,Solana 也選擇將其作為智慧合約的執行引擎。為了在 Solana 上構建去中心化應用程式(dApps),開發者需要使用 Rust 開發其智慧合約,隨後會將其編譯為 eBPF 位元組碼。

為了託管 Solana 的去中心化應用程式,需要一個精確的 eBPF 虛擬機。在這種情況下,Solana 使用了 rBPF,這是一個用 Rust 編寫的 eBPF 虛擬機。然而,該虛擬機(即 rBPF)是否健壯、安全且精確尚不清楚。一旦 rBPF 內部存在安全問題,所有包含 rBPF 的驗證者都可能受到影響,從而對整個 Solana 網路造成巨大損失(例如 DDoS 攻擊)。

漏洞根源

我們開發了一種用於定位 rBPF 漏洞的工具。該工具目前仍在積極開發中。在此過程中,我們在 rBPF(版本 0.2.16)中發現了一個嚴重的問題,它可能會導致整個網路癱瘓。

具體而言,檔案「elf.rs」中的函式「load」用於解析並驗證 ELF 檔案(智慧合約)。首先,「load」函式會讀取 ELF 結構並呼叫「relocate」函式來設定被呼叫者的偏移量。然而,在「relocate」函式中,屬性「sym.st_value」是直接從 ELF 檔案 中檢索的。如果「st_value」足夠大,在計算「addr」(即「sym.st_value」與「refd_pa」的總和)時就可能會觸發整數溢位。

在這種情況下,攻擊者可以建立一個惡意的 ELF 檔案作為智慧合約,從而觸發整數溢位。隨後,每個驗證者都會執行該目標 ELF 檔案,而 rBPF 將會因「add with overflow」錯誤而恐慌(panic)。

此時,rBPF 將會卡住,後續的交易將無法執行,從而導致拒絕服務(DoS)攻擊。我們觀察到,由於在載入 ELF 檔案時發生了整數溢位,節點卡在了「Finalizing transaction」(結束交易)階段,如下所示。

此問題是在 https://github.com/solana-labs/rbpf/pull/200 中引入的,這意味著 rBPF 從 0.2.14 版本開始就存在此漏洞。我們發現了此問題,並於 2021 年 12 月 6 日向 Solana 安全團隊回報。Solana 在我們回報後的幾小時內,透過使用安全數學(safemath)機制修復了此問題。修復內容位於 https://github.com/solana-labs/rbpf/pull/236。在本文撰寫時(2021/12/30),超過 86% 的驗證者已經升級到最新版本。

[1] https://en.wikipedia.org/wiki/Berkeley_Packet_Filter

[2] https://ebpf.io/

時間軸

  • 2021/12/06:向 Solana 安全團隊回報問題
  • 2021/12/06:漏洞已修復
  • 2021/12/30:發布此漏洞的相關資訊
  • 2022/01/28:分配了 CVE-2021–46102 編號
訂閱最新動態
NEAR Intents 遭攻擊:退款漏洞與資安教訓
Security Insights

NEAR Intents 遭攻擊:退款漏洞與資安教訓

NEAR Intents 遭到攻擊時,攻擊者利用金額過大的退款事件,在存入的資產退回後仍保留內部餘額。本文分析重建回執流程及 BNB Chain 上合計 3,865,021 USDT 的七筆出金,將這些資金流出與專案方所稱的資金全數追回區分開來,並概述開發及審計 NEAR 智能合約時應注意的安全事項。

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報
Security Insights

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報

本週報涵蓋 2026年10月19日–2026年10月25日 期間發生在 Ethereum 和 BNB Chain 上的兩起安全事件。報告分析了以閃電貸提供資金、奪取 X100 Freezer 治理權的事件,以及影響 BNB Chain 上某個 NEM 代幣流動性池的稅費結算缺陷。報告範圍內的估計損失合計約 557萬 USD:具代表性的 X100 交易造成約 475萬 USD 的損失,NEM 流動性池事件造成約 82.0萬 USD 的損失。此合計金額不包含另行報導的後續 X100 資金提取。

損失約 387萬 USD:Autheo Network、UNCX 遭駭|BlockSec 週報
Security Insights

損失約 387萬 USD:Autheo Network、UNCX 遭駭|BlockSec 週報

本週報告涵蓋 2026年10月12日–2026年10月18日 期間的 3 起安全事件,估計總損失約為 387萬 USD。Autheo Network 因私鑰遭入侵損失約 176萬 USD;Qubic Wallet 因種子產生機制薄弱損失約 130萬 USD;UNCX Network 的 Smart Token Vesting V2 合約在 Ethereum、BNB Chain、Base 和 Robinhood Chain 上因帳務計算錯誤造成約 80.7萬 USD 的損失。重點分析的 UNCX 事件說明,有缺陷的份額總計計算如何將以不同代幣與份額比率建立的代幣歸屬批次混在一起,進而使人得以從共用資金池超額提領。

Web3 最佳安全審計方

在上線之前驗證設計、程式碼與業務邏輯,對標業內最高安全標準。

BlockSec 審計
Solana rBPF 中發現新的整數溢位漏洞