Node.js ‘binary-parser’ライブラリに悪意のあるコード注入を可能にする脆弱性が発覚

概要

人気の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プロセスの権限で実行されます。

主な注入経路:

  • フィールド名: 生成されるコードにエスケープされずに直接挿入されます。
  • エンコーディングパラメータ: utf8StringasciiStringのような関数に渡され、プロトタイプ汚染や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/