Node.js binary-parserライブラリの欠陥により悪意あるコード注入が可能に

人気のNode.js binary-parserライブラリに存在する重大なコード注入脆弱性により、アプリケーションが任意のJavaScript実行にさらされます。

CERT/CCは2026年1月20日に脆弱性ノートVU#102648を公開し、CVE-2026-1245を割り当てました。

この欠陥は2.3.0未満のバージョンに影響し、安全でない動的コード生成に起因します。パーサー定義に信頼できない入力を使用している開発者は、プロセス全体の侵害を含む深刻なリスクに直面します。

binary-parserは宣言的な構文でJavaScriptのバイナリデータ解析を簡素化します。ネットワークプロトコル、ファイル形式、組み込みシステムのデータ向けツールを支えています。

しかし、2.3.0未満のバージョンでは、実行時にパーサーコードを構築するためにJavaScriptのFunctionコンストラクタを使用しています。

攻撃者は、フィールド名やエンコーディングパラメータに悪意あるペイロードを注入することでこれを悪用します。

技術的な詳細

この脆弱性はパーサーのインスタンス化時に発生します。次の脆弱なコードスニペットを考えてみてください:

const BinaryParser = require('binary-parser').Parser;
const userInput = '{"field": "'; require("child_process").exec("rm -rf /"); '"}';  // Attacker-controlled
const parser = new BinaryParser({
  field1: { formatter: userInput }  // Unsanitized injection point
});

ここでは、userInputが文字列コンテキストを抜け出し、child_process.exec("rm -rf /")を実行して、オブジェクトを閉じます。

Functionコンストラクタはこれを実行可能なJavaScriptとして評価し、Node.jsプロセス権限で実行します。

主な注入ベクターには次が含まれます:

  • フィールド名: エスケープされないまま生成コードに直接埋め込まれます。
  • エンコーディングパラメータ: utf8StringasciiStringなどの関数に渡され、プロトタイプ汚染やevalのような実行を可能にします。
  • ネスト構造: 再帰的なパーサー定義が攻撃面を拡大します。

認証は不要で、HTTPヘッダー、ファイルメタデータ、データベースフィールドなど、任意の信頼できないデータソースがあれば十分です。静的でハードコードされたパーサーは動的生成を回避するため安全です。

サーバー環境では影響が拡大します。攻撃者はシェルアクセスを得たり、機密データを窃取したり、他のシステムへ横展開したりできます。

クラウド関数、API、IoTバックエンド上のNode.jsアプリは被害範囲をさらに拡大します。CVSSスコアは未確定ですが、CERTはリモートコード実行の可能性があるため重大(critical)と評価しています。

侵害の痕跡(IoC)は利用できません。このプロトタイプ汚染風の欠陥は、ネットワークシグネチャやファイルアーティファクトを残しません。

検知は振る舞い監視に依存します。Node.jsランタイムでの異常なFunctionコンストラクタの使用や、予期しない子プロセスを監視してください。FalcoやSysdigのようなツールは、動的文字列を伴うnew Function()に対してアラートを出せます。

緩和策と対応

直ちにbinary-parser 2.3.0以降へアップグレードしてください。メンテナのKeichi TakahashiはGitHub上でプルリクエスト#283をマージし、入力サニタイズとフィールド名のホワイトリスト化を追加しました。主な変更点:

  • ユーザー提供文字列内の特殊文字をエスケープする。
  • 無効なエンコーディングパラメータを拒否する。
  • 非推奨の動的機能に対して警告する。

npmで確認:

npm install binary-parser@>=2.3.0
npm audit

動的パーサーについてコードベースを監査:

  1. 変数を伴うnew Parser({をgrepする。
  2. bufferモジュールやstructライブラリなどの安全な代替に置き換える。
  3. 最小権限の原則を徹底する: Node.jsを非rootで実行する。

研究者のMaor Caplanが問題を報告し、Timur SnokeがCERTノートを執筆しました。CERT VU#102648、CVE-2026-1245、npm binary-parser、GitHub PR #283で更新を追跡してください。

この欠陥は、実行時コード生成を伴う「宣言的」ライブラリのリスクを浮き彫りにしています。Node.js開発者はbinary-parser-tsのような型付きパースライブラリや、ネイティブのBufferを優先すべきです。

翻訳元: https://gbhackers.com/binary-parser-flaw-enables-injection/

ソース: gbhackers.com