概要
Handlebars.js は JavaScript の テンプレート エンジン として npm エコシステム で 広く 利用 されて いる ライブラリ です。バージョン 4.0.0 から 4.7.8 まで の Handlebars.js に おいて、@partial-block の 処理 に リモート コード 実行 の 脆弱性 が 発見 されました。
Handlebars.js の テンプレート システム で は、@partial-block は パーシャル テンプレート 内 で 親 テンプレート の コンテンツ を 参照 する ため の 特殊 な 変数 です。この @partial-block は テンプレート の データ コンテキスト に 格納 されます が、ヘルパー 関数 から この データ コンテキスト に アクセス し、@partial-block の 値 を 書き換える こと が 可能 です。
攻撃者 が カスタム ヘルパー を 通じて @partial-block の 値 を 細工 した AST オブジェクト に 置き換える と、Handlebars.js の コンパイラ が この AST を コンパイル し 実行 する ため、結果 として 任意 の JavaScript コード が サーバー 上 で 実行 される こと に なります。
この 脆弱性 は CWE-94(コード インジェクション)および CWE-843(型 の 混同)に 分類 されます。CVSS スコア は 8.1 と 評価 されて おり、High に 分類 される 深刻 な 脆弱性 です。
攻撃 が 成立 する ため に は、攻撃者 が テンプレート 内 で 使用 される ヘルパー 関数 を 制御 できる か、または ヘルパー 関数 が ユーザー 入力 に 基づいて データ コンテキスト を 操作 する 必要 が あります。サーバーサイド レンダリング を 行う アプリケーション で カスタム ヘルパー を 登録 して いる 場合、ヘルパー 内 で の データ コンテキスト 操作 が 安全 で ある か 監査 する こと が 重要 です。
特に、ユーザー が 提供 した データ が ヘルパー 関数 の 引数 として 渡される ケース や、ヘルパー 関数 が コンテキスト オブジェクト に 対して 任意 の 書き込み を 行う ケース が 存在 する 場合、この 脆弱性 の 影響 を 受ける 可能性 が 高い です。速やか な アップデート を 推奨 します。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 8.1 |
| 深刻度 | High |
| CWE | CWE-94 (コードインジェクション) / CWE-843 (型の混同) |
影響を受けるソフトウェア
| 製品 | ベンダー | 影響バージョン |
|---|---|---|
| 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: ランタイム 専用 ビルド(
handlebars/runtime)を 使用 して ください。ランタイム 専用 ビルド で はcompile()関数 が 含まれない ため、細工 した AST が コンパイル される パス が 存在 しません。 - 暫定回避策 2: 登録 されて いる カスタム ヘルパー 関数 を 監査 し、データ コンテキスト に 対する 任意 の 書き込み が 行われて いない こと を 確認 して ください。特に
options.dataやthisを 通じた 書き込み に 注意 が 必要 です。 - 暫定回避策 3: テンプレート の レンダリング を サンドボックス 環境 で 実行 し、万一 の コード 実行 が 発生 した 場合 で も、ホスト システム へ の 影響 を 最小限 に 抑える 構成 を 検討 して ください。
関連リンク
データソース: NVD (NIST) AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
