觀點 · 資訊分享

protobufjs 爆嚴重漏洞:載入惡意 schema 可能執行任意 JavaScript,請升級到 7.5.5 或 8.0.1

Node.js 常用的 protobufjs 公布 CVE-2026-41242:如果程式會載入不受信任的 protobuf 定義或 JSON 描述檔,攻擊者可能讓它執行任意 JavaScript。官方已在 7.5.5 與 8.0.1 修補。

發布
2026-04-17
篇幅
約 4 分鐘 · 1,747 字
結構
8 節 + 4 題常見問題
標籤
#protobufjs#CVE-2026-41242#npm#供應鏈
protobufjs 爆嚴重漏洞:載入惡意 schema 可能執行任意 JavaScript,請升級到 7.5.5 或 8.0.1

一句話看懂:Node.js 常用的 protobufjs 被發現,如果你的程式會載入「來路不明的 schema 或描述檔」,攻擊者可能讓它執行任意 JavaScript;7.5.5 與 8.0.1 已修補。

protobufjs 程式碼執行漏洞資訊圖卡:載入不受信任的 schema,可能被執行任意 JavaScript

先用白話講:schema 是什麼?

想像你和朋友用「暗號本」傳紙條:第一格代表日期、第二格代表地點。只要兩邊用同一本暗號本,就能讀懂對方的紙條。protobuf 就是這種做法,那本暗號本叫做 schema(定義檔),protobufjs 則是 JavaScript 讀寫這種格式的函式庫。

這次的問題是:如果你的程式去讀的暗號本,是別人寫的、還藏了惡意內容,就可能出事。

發生什麼事

  • 4 月 16 日:protobufjs 在 GitHub 公布安全公告 GHSA-xq3m-2v4x-88gg,對應 CVE-2026-41242,嚴重度 Critical,CVSS v4 評分 9.4。
  • 後續:NVD 於 4 月 18 日收錄這筆 CVE。
  • 漏洞原因:載入特製的 JSON 描述檔時,描述檔裡控制的型別名稱與型別參照,沒有經過足夠的驗證,就進入執行階段的程式碼產生流程,導致可能執行任意 JavaScript。
  • 影響版本:8.0.0 到 8.0.1 之前,以及 7.5.5 之前的版本。
  • 修補版本:8.0.1 與 7.5.5。

什麼情況才會中?

官方列出三個前提,缺一就不成立:

  1. 應用允許攻擊者控制或影響 protobuf 定義或 JSON 描述檔。
  2. 應用透過 protobufjs 的反射 API(例如載入描述檔)來載入它。
  3. 之後要對載入的型別做操作,進到受影響的程式碼產生路徑。

官方也明說:只用信任的、自己寫死在程式裡的 schema 來解碼訊息的應用,不直接受影響。

該怎麼辦?

做法 說明
升級到 7.5.5 或 8.0.1 官方修補方式
不載入不受信任的 schema 官方的暫時緩解
必須接受外部 schema 時 先驗證或限制內容,並在隔離環境中處理

給開發者的技術細節

  • 檢查你的專案有沒有用到 protobufjs:直接依賴或間接依賴都要看,可以用套件管理器的依賴樹指令查詢。
  • 重點檢查你有沒有「從使用者輸入、外部 API 或檔案上傳取得 schema 再載入」的功能。
  • 修補後別忘了更新鎖定檔(lock file),並重新建置與部署。
  • 官方公告的 CVSS v4 向量為網路可達、低複雜度、需低權限、不需使用者操作,機密性、完整性、可用性影響皆為高。

我的看法

看到「任意程式碼執行」四個字很容易緊張,但這則公告的前提其實很具體:你得讓攻擊者決定你載入哪份 schema。對多數接案常見的情境(API 的格式是自己或廠商定的、寫死在專案裡),風險比標題看起來小很多。

但我還是會把它當成一次「依賴健檢」的機會:protobufjs 常常是別的套件的底層,你沒直接裝,不代表沒在用。我的習慣是先查依賴樹,再看有沒有任何功能是「讓使用者上傳或貼上定義檔」,沒有就安心排進下一次更新;有就優先處理。

名詞小辭典

  • Protocol Buffers(protobuf):Google 設計的資料交換格式,比 JSON 更省空間,常用在服務之間互相溝通。
  • Schema(定義檔):描述資料長什麼樣子的規格,像是暗號本。
  • 反射 API(reflection):程式在執行時才讀取結構、動態建立型別的功能,這次的漏洞就出在這條路徑。
  • CVSS:漏洞嚴重度評分,0 到 10,越高越危險;9.0 以上屬於 Critical。

資料來源

常見問題

protobufjs 是什麼?
它是 JavaScript 的 Protocol Buffers 函式庫,用來把資料依照事先定好的格式(schema)轉成緊湊的二進位格式再轉回來,很多 Node.js 服務與 gRPC 相關專案都會用到。
我的專案會中嗎?
官方列出的條件是:應用允許攻擊者控制或影響 protobuf 定義或 JSON 描述檔、透過反射 API(例如載入描述檔)載入它,並實際操作到該型別。如果你只用自己寫死的 schema,官方說不直接受影響。
怎麼修?
升級到 7.5.5 或 8.0.1。官方也建議:不要載入來源不明的 protobuf 定義或 JSON 描述檔;如果一定要接受外部 schema,先驗證或限制它,並且在隔離環境中處理。
為什麼說是供應鏈風險?
因為 protobufjs 是很多套件的底層依賴,你自己沒直接裝,也可能透過別的套件間接用到,所以升級前建議檢查整個依賴樹。
LINE