概要
Handlebars.js は JavaScript の テンプレート エンジン として npm エコシステム で 広く 利用 されて いる ライブラリ です。バージョン 4.0.0 から 4.7.8 まで の Handlebars.js に おいて、CLI プリコンパイラ に コード インジェクション の 脆弱性 が 発見 されました。
Handlebars.js の CLI プリコンパイラ は、テンプレート ファイル を 事前 に コンパイル して JavaScript ファイル として 出力 する ツール です。この プリコンパイラ は、テンプレート の ファイル名 や CLI オプション として 受け取った ユーザー 制御 可能 な 文字列 を、生成 される JavaScript コード に 直接 連結 して 出力 して いました。適切 な エスケープ 処理 が 行われて いない ため、JavaScript の 構文 上 意味 を 持つ 文字 を 含む ファイル名 や オプション を 指定 する こと で、生成 される JavaScript ファイル に 任意 の コード を 注入 する こと が 可能 です。
この 脆弱性 は CWE-79(クロスサイト スクリプティング)、CWE-94(コード インジェクション)、および CWE-116(出力 の 不適切 な エンコーディング または エスケープ)に 分類 されます。CVSS スコア は 8.2 と 評価 されて おり、High に 分類 される 深刻 な 脆弱性 です。
攻撃 の シナリオ として は、CI/CD パイプライン で テンプレート ファイル を 自動 的 に プリコンパイル する 環境 に おいて、攻撃者 が 悪意 の ある ファイル名 を 持つ テンプレート ファイル を リポジトリ に 追加 する こと で、ビルド プロセス 中 に 任意 の コード が 実行 される 可能性 が あります。また、プリコンパイル された JavaScript ファイル が ウェブ アプリケーション で 読み込まれる 場合、エンドユーザー の ブラウザ 上 で クロスサイト スクリプティング 攻撃 が 成立 する リスク も あります。
Handlebars.js の CLI プリコンパイラ を 使用 して いる プロジェクト で は、入力 として 受け付ける ファイル名 の バリデーション を 実施 する か、速やか に 修正 バージョン へ アップデート する こと が 推奨 されます。特 に、ユーザー が アップロード した ファイル を プリコンパイル する ワークフロー が 存在 する 場合 は、早急 な 対応 が 必要 です。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 8.2 |
| 深刻度 | High |
| CWE | CWE-79 (XSS) / CWE-94 (コードインジェクション) / CWE-116 (不適切なエンコーディング) |
影響を受けるソフトウェア
| 製品 | ベンダー | 影響バージョン |
|---|---|---|
| Handlebars.js | handlebars-lang | v4.0.0 から v4.7.8 まで |
修正バージョンと回避策
- 修正バージョン: Handlebars.js v4.7.9 へ アップデート する こと で この 脆弱性 は 修正 されます。
npm update handlebarsまたはnpm install handlebars@4.7.9で アップデート を 実施 して ください。 - 暫定回避策 1: CLI プリコンパイラ に 渡す ファイル名 を 検証 し、JavaScript の 構文 上 意味 を 持つ 文字(シングルクォート、ダブルクォート、バックスラッシュ、セミコロン、括弧 など)を 含む ファイル名 を 拒否 する バリデーション を 追加 して ください。
- 暫定回避策 2: プリコンパイル 処理 を サンドボックス 環境(Docker コンテナ など)で 実行 し、万一 の コード インジェクション が 発生 した 場合 で も 影響 範囲 を 限定 して ください。
- 暫定回避策 3: CI/CD パイプライン で テンプレート ファイル の ファイル名 に 対する 許可 リスト(ホワイトリスト)を 適用 し、英数字 と ハイフン のみ を 許可 する ルール を 設定 する こと を 推奨 します。
関連リンク
データソース: NVD (NIST) AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
