觀點 · 資訊分享
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 題常見問題
- 標籤

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

先用白話講: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。
什麼情況才會中?
官方列出三個前提,缺一就不成立:
- 應用允許攻擊者控制或影響 protobuf 定義或 JSON 描述檔。
- 應用透過 protobufjs 的反射 API(例如載入描述檔)來載入它。
- 之後要對載入的型別做操作,進到受影響的程式碼產生路徑。
官方也明說:只用信任的、自己寫死在程式裡的 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 是很多套件的底層依賴,你自己沒直接裝,也可能透過別的套件間接用到,所以升級前建議檢查整個依賴樹。
接著讀
全部觀點 →憑證機構 eMudhra 8 張中繼憑證私鑰外洩:金鑰小到能直接算出,Mozilla 決定緊急撤除根憑證信任eMudhra 有 8 張中繼憑證的私鑰因產生程序出錯,小到可以直接算出來。Mozilla 與 Chrome 在 10 月 17 日當天就封鎖,Mozilla 決定緊急移除 emSign ECC Root CA - G3 的信任,Firefox 158.0.1 把封鎖清單直接內建。閱讀 →資安公司 CrowdSec 程式碼外流:起因是 5 月 TanStack 套件被下毒,離職員工帳號沒及時移除CrowdSec 公開事件報告:約 170 個私有 GitHub 程式庫在 5 月被下載、9 月 16 日被貼上論壇。源頭是一位剛離職、仍留在 GitHub 組織裡的工程師電腦,被 TanStack npm 供應鏈攻擊偷走了權杖。閱讀 →vm2 一天公開 5 個沙盒逃逸漏洞,GitHub 多給 CVSS 10:用它跑外來程式碼的專案要升到 3.11.4Node.js 沙盒套件 vm2 在 5 月 29 日公開至少 5 個沙盒逃逸漏洞(CVE-2026-47131、47137、47140、47208、47210),GitHub 公告評級為 Critical,都在 3.11.4 修正。閱讀 →