- 報導概述
Endor Labs 研究員 Cristian Staicu 於 2026 年 3 月 2 日回報 protobuf.js 的重大 RCE 漏洞;修補版本:8.x 分支於 4 月 4 日(v8.0.1),7.x 分支於 4 月 15 日(v7.5.5)釋出;4 月 20 日 Endor Labs 發布完整技術報告並公開 PoC,同日確認 CVE 編號為 CVE-2026-41242,CVSS 評分 9.4。此漏洞影響 protobuf.js——Google Protocol Buffers 最廣泛使用的 JavaScript 執行期,每週 npm 下載量約 5,200 萬次。
protobuf.js 廣泛被以下主流函式庫與平台作為遞移依賴:@grpc/proto-loader(gRPC 官方 Node.js 載入器);Firebase JavaScript SDK;Google Cloud 客戶端函式庫;以及大量使用 gRPC、雲端 API 或 protobuf 序列化的 Node.js 應用程式。Endor Labs 指出,許多開發團隊在自己的 node_modules 中包含 protobufjs,卻完全不知道它的存在。
- 技術重點
漏洞根本原因:protobuf.js 在執行期間從 .proto schema 動態建構 JavaScript 函式時,將訊息類型名稱(message type name)直接以字串拼接方式嵌入程式碼,再透過 Function() 建構子執行——此做法在功能上等同於 eval()。關鍵缺陷在於未對 schema 衍生的識別符(如訊息名稱)進行任何驗證或清理。
攻擊方式:攻擊者提供一個含惡意訊息類型名稱的 .proto 檔案,例如:
message "); require('child_process').execSync('id >>pwned'); // { ... }
當應用程式以此 schema 處理任何 protobuf 訊息時,生成的函式會提前閉合,執行注入的 Node.js 指令,以應用程式的權限執行任意 OS 命令。漏洞觸發不需要任何身份驗證或用戶互動——第一個被處理的訊息即可觸發。
利用前提:攻擊者需能影響應用程式載入的 .proto schema 或 JSON descriptor 來源。此前提在以下場景中普遍存在:從共用 schema 倉庫或合作夥伴系統動態載入 schema;多租戶環境中接受用戶上傳的 protobuf 定義;gRPC 服務的 reflection 介面暴露時。
- 資安風險
成功利用可在 Node.js 進程的權限下執行任意作業系統命令,後果包括:讀取環境變數中儲存的 API 金鑰、資料庫連線字串、雲端服務憑證;建立反向 Shell 或持久後門;橫向移動至內部服務;對使用 gRPC 的微服務架構造成多服務連鎖入侵。
供應鏈維度:Firebase SDK 與 @grpc/proto-loader 作為遞移依賴的廣泛分佈,使漏洞影響遠超直接使用 protobuf.js 的應用程式。VulDB 記錄顯示 CVE-2026-41242 在 PoC 公開後掃描活動明顯增加,但目前尚無大規模野外利用的確認報告。
- 關鍵觀察
此漏洞的核心教訓是「schema 即程式碼」——開發人員習慣將 .proto schema 視為靜態設定而非可執行的程式碼,但 protobuf.js 的動態編譯機制使得惡意 schema 能夠直接注入並執行任意邏輯。Endor Labs 的建議:在生產環境優先使用預編譯(static)schema(protoc 離線編譯),完全規避動態載入路徑;將所有 schema 來源視為不受信任輸入;稽核遞移依賴中的 protobufjs 版本。
修補行動:立即升級至 v8.0.1(8.x 分支)或 v7.5.5(7.x 分支);執行 `npm ls protobufjs` 確認遞移依賴版本;更新 package-lock.json 或 yarn.lock 以鎖定修補版本。
資料來源:https://hackread.com/52m-download-protobuf-js-library-rce-schema-handle/
網路安全研究人員發現 protobuf.js 存在高風險的 RCE 遠端代碼執行漏洞 (GHSA-xq3m-2v4x-88gg),攻擊者可透過惡意的 Schema 檔案執行非法指令。