人気の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プロセス権限で実行します。
主な注入ベクターには次が含まれます:
- フィールド名: エスケープされないまま生成コードに直接埋め込まれます。
- エンコーディングパラメータ:
utf8StringやasciiStringなどの関数に渡され、プロトタイプ汚染や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
動的パーサーについてコードベースを監査:
- 変数を伴う
new Parser({をgrepする。 bufferモジュールやstructライブラリなどの安全な代替に置き換える。- 最小権限の原則を徹底する: 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/