Protocol Buffers(protobuf)のJavaScript版、protobufjsに重大な脆弱性(CVE-2026-41242)

セキュリティニュース

投稿日時: 更新日時:

Protocol Buffers(protobuf)のJavaScript版、protobufjsに重大な脆弱性(CVE-2026-41242)

JavaScript向けProtocol Buffers実装の protobufjs に、任意コード実行につながる重大な脆弱性 GHSA-xq3m-2v4x-88gg、CVE-2026-41242 が見つかりました。GitHub Advisoryでは深刻度はCritical、CVSS v4は9.4で、影響を受けるのは 8.x 系の 8.0.0 までと 7.x 系の 7.5.4 まで、修正版は 8.0.1 と 7.5.5 です。今回の問題は Protocol Buffers 全体の欠陥ではなく、npm パッケージ protobufjs に対する脆弱性です。

何が起きたか

公式アドバイザリによると、攻撃者は protobuf 定義の type フィールドを細工することで、protobufjs が生成する JavaScript 関数に任意コードを混入させられます。そのコードは、対象アプリケーションがその定義を使ってオブジェクトを decode したタイミングで実行されます。影響は、攻撃者が protobuf 定義ファイルや JSON descriptor を制御できる場合のリモートコード実行です。

Endor Labs の分析では、protobufjs はスキーマを単に解釈するのではなく、各メッセージ型ごとに JavaScript のソース文字列を組み立て、Function コンストラクタで実行可能な関数へ変換しています。この仕組み自体が高速化のための設計ですが、スキーマ由来の識別子検証が不十分だったため、悪意ある定義を読み込んだ時点ではなく、その型を最初に encode、decode、または生成した時点でペイロードが発火する構造になっていました。

影響を受けるバージョン

影響範囲は明確で、GitHub AdvisoryとNVDはいずれも、

  • protobufjs 8.x は 8.0.0 以下
  • 7.x は 7.5.4 以下

対象だとしています。

修正版は 8.0.1 と 7.5.5 です。protobufjs のリリースノートでも、8.0.1 と 7.5.5 に invalid characters from the type name を除去する修正が含まれていることが確認できます。

原因

原因は、protobufjs の動的コード生成にあります。Endor Labs によると、同ライブラリはスキーマ断片から JavaScript ソースを連結し、それを Function(source) で実行していました。ここでスキーマ由来の名前や型情報が十分に検証、無害化されずに組み込まれるため、攻撃者が細工した定義を与えると、生成される関数の中へ任意コードを差し込める状態でした。NVDでも、この問題は CWE-94、コード生成の不適切な制御として登録されています。

対策

対策の中心は、protobufjs を 8.0.1 以降、または 7.5.5 以降へ更新することです。

Endor Labs は、直接利用していないつもりでも @grpc/proto-loader、Firebase SDK、Google Cloud SDK などを通じて推移的に取り込んでいるケースがあるとして、依存関係の洗い出しも勧めています。また、実行時に外部スキーマを読み込む構成は危険度が高いため、可能であれば本番環境では静的生成済みの成果物を使い、Root.fromJSON などのスキーマ読込経路を信頼済み入力に限定すべきだとしています。

出典

The Dangers of Reusing Protobuf Definitions: Critical Code Execution in protobuf.js (GHSA-xq3m-2v4x-88gg)