protobuf.jsで発見された6件の脆弱性により、攻撃者は任意のコードを実行し、サービスをクラッシュさせ、クラウド、AI、メッセージング、開発環境全体でソフトウェアサプライチェーンを侵害できる可能性がある。
Cyeraの研究者によると、脆弱性はGoogleのProtocol Buffers(数え切れないほどの分散システム間の通信を支えるデータシリアライゼーションフレームワーク)で広く使われているJavaScript実装に影響する。
このライブラリは週5,000万回以上ダウンロードされ、多くのエンタープライズアプリケーションに直接または間接的に組み込まれている。
Cyeraの研究者Vladimir Tokarev氏は分析の中で、「protobufにおいて、スキーマから生成されたデータを汚染することで、攻撃者がリモートコード実行やサービス拒否を実現できる6件の脆弱性を発見した」と述べた。
主なポイント
- protobuf.jsの6件の脆弱性により、リモートコード実行、サービス拒否攻撃、プロトタイプ汚染、コードインジェクションが可能になるおそれがある。
- 脆弱性の影響を受けるのは、週5,000万回以上ダウンロードされ、クラウドサービス、AIプラットフォーム、CI/CDパイプライン、メッセージングアプリケーションで広く使われているライブラリだ。
- 研究者は、CI/CDの侵害、WhatsAppボットの継続的なクラッシュ、Google Cloud Functionsのサービス障害など、現実の攻撃シナリオを実証した。
- 組織は直ちに修正済みバージョンへアップグレードし、脆弱なインスタンスがないか、直接依存と推移的依存の両方を確認すべきだ。
protobuf.jsの脆弱性の詳細
脆弱性の影響を受けるのは、protobuf.jsのバージョン7.5.5以前と、バージョン8.0.0および8.0.1だ。
6件の脆弱性を合わせると、リモートコード実行(RCE)、サービス拒否(DoS)、プロトタイプ汚染、コードインジェクション攻撃につながる危険がある。
protobuf.jsは推移的依存として導入されることが多く、組織がこのライブラリを直接インストールしたり追跡したりせずに利用している可能性があるため、今回の発見は懸念される。
Cyeraによると、protobuf.jsはGoogle Cloudのクライアントライブラリ、OpenTelemetry、Milvus、Temporal、人気のメッセージングフレームワークなど、広く使われている技術に組み込まれており、潜在的な攻撃対象領域を広げている。
問題の中心にあるのは、protobuf.jsによるスキーマ関連入力の処理方法だ。
フィールド名、型名、ディスクリプター、設定値は信頼できるメタデータとして扱われていたが、一部の環境では攻撃者がこれらに影響を及ぼせる可能性があった。
攻撃者によるprotobuf.jsの悪用手法
特に懸念される問題の1つがCVE-2026-44295で、pbjsコマンドラインツールに存在するコードインジェクションの脆弱性だ。
攻撃者は悪意のあるスキーマ名を作成し、コード生成時に生成JavaScriptファイルへ書き込ませることができる。
そのファイルが後にビルド、テスト、デプロイのプロセスでインポートされると、注入されたコードが信頼されたCI/CD環境内で実行され、ソースコード、署名証明書、クラウド認証情報などの機密資産が露出する可能性がある。
研究者は、リモートコード実行(RCE)につながる可能性のあるプロトタイプ汚染攻撃チェーンも特定した。
脆弱な環境では、攻撃者がNode.jsアプリケーション内の別の場所でプロトタイプ汚染を悪用し、protobuf.jsをコード実行ガジェットとして利用できる。
protobuf.jsはFunction()コンストラクターでJavaScript関数を動的に生成するため、攻撃者が制御する値が生成コードに組み込まれ、アプリケーションによって実行される可能性がある。
サービス拒否(DoS)のリスク
今回の調査では、本番サービスを妨害しかねないサービス拒否のリスクも明らかになった。
ある脆弱性では、攻撃者が深くネストされた再帰的なprotobufメッセージを送り付け、デコード中にJavaScriptのコールスタックを枯渇させることができる。
Cyeraは、Baileysフレームワーク上に構築されたWhatsAppボットに対してこの攻撃を実証した。悪意のあるメッセージ1件だけで、ボットをクラッシュと再起動のループに持続的に陥らせることができた。
研究者は、protobufベースのPub/Subイベントを処理するGoogle Cloud Functionsでも同様の挙動を再現し、悪意のあるペイロード1件によってサービス障害を繰り返し引き起こせることを示した。ペイロードを手動で削除するか、デッドレターキューへ振り分けるまで障害は続く。
今回の発見は、広く使われているシリアライゼーションライブラリの脆弱性が、クラウドインフラ、AIシステム、ソフトウェアサプライチェーン、顧客向けサービス全体に波及し得ることを示している。
protobuf.jsのリスクを軽減する方法
protobuf.jsはサードパーティー依存を通じて間接的に導入されることが多いため、組織は環境を慎重に確認し、コード実行、サービス妨害、サプライチェーン侵害のリスクを抑える追加の安全策を実施すべきだ。
- protobuf.jsを最新バージョンにアップグレードし、脆弱なインスタンスがないか、直接依存と推移的依存の両方を監査する。
- インターネットに公開されたサービスへのパッチ適用を優先する。API、メッセージキュー、信頼できないprotobufペイロードを処理するアプリケーションも対象とする。
- 外部から入手した.protoファイル、JSONディスクリプター、スキーマレジストリを信頼できない入力として扱うとともに、使用前に承認済みスキーマを検証するか、許可リストに登録する。
- コード生成リスクへの露出を減らすため、ビルド時のスキーマコンパイルを優先し、動的なスキーマ読み込みを制限し、pbjsを使用するCI/CDパイプラインを強化する。
- メッセージサイズ、再帰の深さ、入力検証を制御する仕組みを適用することで、不正なprotobufメッセージや深くネストされたprotobufメッセージに起因するサービス拒否攻撃を防ぐ。
- デコードの失敗、サービスの繰り返しクラッシュ、異常なスキーマ活動、Node.js環境全体でのプロトタイプ汚染の試みを示す兆候を監視する。
- テストするインシデント対応計画と復旧計画ことで、チームがprotobuf関連の攻撃やサービス障害を特定、封じ込め、修復できるようにする。
これらの対策により、悪用のリスクを抑え、全体的なレジリエンスを高めることができる。
攻撃対象領域の拡大
組織がスキーマ、メタデータ、自動化、AI生成コードへの依存を強める中、セキュリティチームはこれらの入力を攻撃対象領域全体の一部として扱う必要がある。
サイバーレジリエンスを確保するには、信頼されたデータが重要システム内のどこを流れるのかを把握し、そのデータがアプリケーションの挙動に影響を与える前にガードレールを実装することが欠かせない。
ソフトウェアサプライチェーンのセキュリティを重要な優先事項とすることが、セキュリティチームにとって重要になる。





