概要

週間約5000万ダウンロードを誇るnpmパッケージ「protobuf.js」に、CVSS スコア 9.4(Critical)のリモートコード実行(RCE)脆弱性が発見された(CVE-2026-41242、GitHub Advisory: GHSA-xq3m-2v4x-88gg)。影響を受けるバージョンはprotobufjs 8.0.0以下および7.5.4以下で、修正済みバージョンとしてそれぞれ8.0.1と7.5.5がリリースされている。直接利用しているパッケージだけでなく、@grpc/proto-loader、Firebase SDK、Google Cloud クライアントライブラリなどのトランジティブ依存経由でも影響を受ける可能性がある。

脆弱性の技術的メカニズム

本脆弱性の根本原因は、スキーマコンパイル時の安全でない動的コード生成にある。protobuf.jsはProtobufスキーマをコンパイルする際、メッセージ型名などのスキーマ由来の識別子を文字列として連結し、Function() コンストラクタ(実質的に eval() に相当)に渡して関数を生成する仕組みを採用している。この処理で識別子のバリデーションが行われないため、攻撃者が型名として悪意あるコードを埋め込むことができる。

たとえば User){process.mainModule.require("child_process").execSync("id");function のような型名を含む悪意あるスキーマを読み込ませると、生成される関数の構文が意図的に閉じられ、任意コードが注入される。さらに、このコンストラクタは「遅延評価(lazy)」で生成されるため、スキーマ読み込み時点ではなく、該当型のメッセージが最初にデコード・エンコードされるタイミングで初めて実行される点も特徴的である。

攻撃対象領域とリスク

Endor Labsの研究者は「スキーマ定義の再利用」を主要な攻撃経路として指摘している。多くの組織では以下のような外部ソースからProtobufスキーマを読み込む運用が一般的であり、これらすべてが攻撃ベクターとなりうる。

  • gRPCサーバーリフレクションプロトコル
  • 内部スキーマレジストリ
  • Buf Schema Registry
  • googleapis/googlapisリポジトリ
  • ベンダー連携・共有スキーマ

悪用に成功した場合、実行中のNode.jsプロセスへの完全な制御権が得られ、環境変数やサービストークン、APIクレデンシャル、データベース接続文字列、インメモリのユーザーデータへのアクセス、さらに内部ネットワークへの横断移動(ラテラルムーブメント)が可能となる。本番サービスだけでなく、悪意あるスキーマをローカルで扱う開発者のマシンも被害を受けうる。PoC(概念実証コード)はすでに公開されており、研究者は「悪用は簡単」と述べているが、執筆時点で野生での積極的な悪用は確認されていない。

修正内容と推奨対応

修正パッチは src/type.js に1行の変更を加えたもので、型名からすべての英数字以外の文字を除去することで注入を防ぐ。

name = name.replace(/\W/g, "");

開示タイムラインは次のとおりである。2026年3月2日に脆弱性がメンテナーへ報告され、4月4日に8.x系の修正版(8.0.1)、4月15日に7.x系の修正版(7.5.5)がリリース、翌4月16日にGitHub Security Advisoryが公開された。

利用者は速やかに最新バージョンへアップグレードするとともに、npm audit を実行してトランジティブ依存経由の影響がないか確認することが推奨される。本番環境では動的なスキーマ読み込みを避け、事前コンパイル済みの静的スキーマを使用する設計も有効な緩和策となる。