Back to Blog

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

Code Auditing
December 30, 2021
3 min read

最近,我們的漏洞檢測系統在 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 編號
Sign up for the latest updates
Harmony 跨鏈 ONE 鑄幣事件 + 約4700萬美元金鑰洩露損失 | BlockSec
Security Insights

Harmony 跨鏈 ONE 鑄幣事件 + 約4700萬美元金鑰洩露損失 | BlockSec

2026年8月10日至16日期間,共5起重大安全事件,量化損失約4700萬美元。深度分析聚焦Harmony Layer-1鏈實作缺陷:跨分片收據重放導致原生ONE被未授權鑄造,目的分片以未驗證的MerkleProof.ShardID及BlockNum欄位判定收據已花費標記,而非依簽署來源標頭,使已入帳收據可重放而無對應來源分片扣款。約偽造3.01兆ONE,惟其名目價值遠超代幣市值,無法變現亦未確認實現損失,故Harmony不計入總額;約4700萬美元來自私鑰洩露(未知巨鯨錢包約2500萬、Kite約1400萬、Coinsbuy約790萬)及Fox業務邏輯缺陷(約11.7萬)。

~$160萬美元損失:Moke代幣、LpdFi遭攻擊利用 | BlockSec週報
Security Insights

~$160萬美元損失:Moke代幣、LpdFi遭攻擊利用 | BlockSec週報

2026年8月3-9日當週,BNB Chain發生2起重大安全事件,總損失約160萬美元,均源於價格操縱。LpdFi事件(約69.7萬美元)重複使用同一可操縱的PancakeSwap流動池儲備進行訂單估值和利息贖回,使攻擊者虛增本金並操控池子以索取超額利息。Moke Token事件(約90.6萬美元)結合可操縱現貨價格與重複LP分紅計算,多次領取虛增的MOKE及BNB分紅。

COLDCARD事件:當錢包的「隨機」助記詞並不隨機
Security Insights

COLDCARD事件:當錢包的「隨機」助記詞並不隨機

COLDCARD固件存在靜默構建整合漏洞,導致比特幣種子生成回退至軟件RNG,其弱隨機性使錢包種子可被離線破解。由於弱點存在於種子本身,固件更新無法修復;截至2026年8月7日,已確認損失達1,405 BTC(約9,100萬美元),私下估計高達2,055 BTC。

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

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