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-controlledconst 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.0npm audit
コードベース内の動的パーサを監査する。
- 変数を含む “new Parser({” の使用箇所を grep する。
- buffer モジュールや struct 系ライブラリなどの、安全な代替手段に置き換える。
- 最小権限の原則を徹底し、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 などの安全なパーシング・ライブラリを選択すべきである。
Node.jsでバイナリ・データを簡単に扱うためのライブラリ binary-parser に、サーバの完全な乗っ取りに至る深刻な脆弱性が見つかりました。この問題の原因は、プログラムが解析ルールを作成する際、外部から入力された文字列をそのまま JavaScript の命令として組み立てて実行してしまう不備にあります。
具体的には、データのフィールド名や文字コードの設定部分に、悪意のプログラムコードを紛れ込ませることができます。ライブラリ内部で new Function() という仕組みを使って動的にコードを生成しているため、攻撃者が送った “OSのコマンドを実行せよ” といった命令が、Node.js の実行権限で動いてしまいます。この脆弱性は CVE-2026-1245 として報告されており、悪用されると機密情報の流出や、サーバの完全な奪取につながる極めて危険ものです。ご利用のチームは、ご注意ください。よろしければ、Node.js での検索結果も、ご参照ください。
You must be logged in to post a comment.