概要
人気のNode.jsライブラリ「binary-parser」に、アプリケーションが任意のJavaScriptコードを実行される可能性のある重大なコード注入の脆弱性(CVE-2026-1245)が発見されました。CERT/CCは2026年1月20日に脆弱性ノートVU#102648を公開し、この脆弱性がバージョン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 /"); '"}'; // 攻撃者によって制御される入力
const parser = new BinaryParser({
field1: { formatter: userInput } // サニタイズされていない注入ポイント
});
上記の例では、userInputが文字列のコンテキストから抜け出し、child_process.exec("rm -rf /")を実行します。Functionコンストラクタはこれを実行可能なJavaScriptとして評価し、Node.jsプロセスの権限で実行されます。
主な注入経路:
- フィールド名: 生成されるコードにエスケープされずに直接挿入されます。
- エンコーディングパラメータ:
utf8StringやasciiStringのような関数に渡され、プロトタイプ汚染やevalのような実行を可能にします。 - ネストされた構造: 再帰的なパーサー定義が攻撃対象領域を拡大させます。
この攻撃には認証は不要であり、HTTPヘッダー、ファイルメタデータ、データベースフィールドなど、信頼できないデータソースであれば十分です。静的でハードコードされたパーサーは、動的な生成をバイパスするため安全です。
影響と検出
この脆弱性は、サーバー環境で影響が拡大します。攻撃者はシェルアクセスを取得し、機密データを盗み出し、または他のシステムに侵入する可能性があります。クラウドファンクション、API、IoTバックエンドで動作するNode.jsアプリケーションは、特に大きな影響を受ける可能性があります。
CVSSスコアリングはまだ保留中ですが、リモートコード実行の可能性からCERTはこれを緊急度が高いと評価しています。現在、侵害の兆候(IoCs)は利用できません。このプロトタイプ汚染型の脆弱性は、ネットワーク署名やファイルアーティファクトを残しません。
検出は、振る舞い監視に依存します。Node.jsランタイムにおける異常なFunctionコンストラクタの使用や予期しない子プロセスを監視することで、検出が可能です。FalcoやSysdigのようなツールは、動的な文字列を含むnew Function()の使用に対してアラートを発することができます。
緩和策と対応
直ちにbinary-parser 2.3.0以降にアップグレードしてください。メンテナのKeichi Takahashi氏は、GitHubのプルリクエスト#283で、フィールド名の入力サニタイズとホワイトリスト化を追加しました。
主な変更点:
- ユーザーが提供する文字列の特殊文字をエスケープします。
- 無効なエンコーディングパラメータを拒否します。
- 非推奨の動的機能について警告します。
npm install binary-parser @>=2.3.0を実行して検証し、npm auditでコードベースを監査してください。
コードベースの監査:
- 変数を含む
new Parser({を探します。 bufferモジュールやstructライブラリのような安全な代替手段に置き換えてください。
また、最小権限の原則を徹底し、Node.jsを非ルートユーザーとして実行することが推奨されます。
この問題はMaor Caplan氏が報告し、Timur Snoke氏がCERTノートを作成しました。最新情報はCERT VU#102648、CVE-2026-1245、npm binary-parser、およびGitHub PR #283で追跡できます。
今回の脆弱性は、実行時コード生成を伴う「宣言的」ライブラリのリスクを浮き彫りにしています。Node.js開発者は、binary-parser-tsやネイティブのBuffersのような型付き解析ライブラリを優先すべきです。
元記事: https://gbhackers.com/binary-parser-flaw-enables-injection/
