Node.js binary-parser Library の脆弱性 CVE-2026-1245 が FIX:コード・インジェクションの恐れ

Node.js binary-parser Library Flaw Enables Malicious Code Injection

2026/01/22 gbhackers — 広く利用されている Node.js の binary-parser ライブラリに存在する、深刻なコード・インジェクション脆弱性により、アプリケーション上で任意の JavaScript 実行が可能となる。2026年1月20日に CERT/CC は Vulnerability Note 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 プロセス権限で実行される。

主なインジェクション・ベクターは以下の通りである。

  • フィールド名:生成されるコードに、エスケープされずに直接埋め込まれる。
  • エンコーディング・パラメータ:utf8String や asciiString などの関数に渡され、プロトタイプ汚染や eval 類似の実行を可能にする。
  • ネスト構造:再帰的なパーサ定義により攻撃対象領域が拡大する。

HTTP ヘッダ/ファイル・メタデータ/データベース・フィールドなどの、信頼できないデータソースが悪用経路となり、認証は不要である。ただし、静的にハードコードされたパーサは、動的生成を回避するため安全である。

サーバ環境では影響が拡大する。攻撃者はシェル・アクセスを取得し、機密データを窃取し、他システムへと侵害を拡大できる。

クラウド関数/API/IoT バックエンド上の Node.js アプリケーションでは、影響範囲がさらに拡大する。CVSS スコアは未確定だが、CERT はリモート・コード実行が可能である点から深刻と評価している。

現時点で侵害指標 (IoC) は公開されていない。このプロトタイプ汚染型の欠陥は、ネットワーク署名やファイル痕跡を残さない。

この問題を検知するには、振る舞いベースの監視への依存が必要となる。Node.js 実行環境における異常な Function コンストラクタ利用や、予期しない子プロセス生成を監視すべきである。Falco や Sysdig などのツールは、動的文字列を用いた new Function() の実行を検知できる。

緩和策および対応

ユーザーにとって必要なことは、binary-parser 2.3.0 以降への速やかなアップグレードである。メンテナである Keichi Takahashi は、GitHub 上の pull request #283 をマージし、フィールド名に対する入力サニタイズおよびホワイトリスト化を追加した。主な変更点は以下の通りである。

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

npm による確認手順は以下の通りである。

npm install binary-parser@>=2.3.0
npm audit

コードベース内の動的パーサを監査する。

  1. 変数を含む “new Parser({” の使用箇所を grep する。
  2. buffer モジュールや struct 系ライブラリなどの、安全な代替手段に置き換える。
  3. 最小権限の原則を徹底し、Node.js を非 root 権限で実行する。

この脆弱性は、研究者 Maor Caplan により報告され、CERT ノートは Timur Snoke が執筆した。最新情報については、CERT VU#102648/CVE-2026-1245/npm binary-parser/GitHub PR #283 を追跡すべきである。

この欠陥が浮き彫りにするのは、実行時コード生成を伴う “宣言的” ライブラリに内在するリスクである。Node.js 開発者は、binary-parser-ts やネイティブ Buffer などの安全なパーシング・ライブラリを選択すべきである。