テンプレートエンジン Handlebars の compile および precompile 関数において、AST(抽象構文木)の検証不備による脆弱性が発見された。この問題は以前の修正をバイパスするものであり、特定の AST ノードに不正な値を注入することで、検証を潜り抜けて任意の JavaScript を実行させることが可能である。テンプレートとして文字列ではなく、JSON リクエストボディなどから得られた信頼できないオブジェクトを直接関数に渡している場合に影響を受ける。サーバーサイドでの実行や、プリコンパイルされたコードを介したブラウザ上での実行につながる恐れがある。
対象ソフト
JavaScript 環境で広く利用されるテンプレートエンジンである。ウェブサイトの動的な HTML 生成や、データのフォーマット変換などの用途で多くのウェブアプリケーションやライブラリに組み込まれている。
影響
攻撃者が用意した任意の JavaScript コードが、サーバー上の Node.js プロセス内でアプリケーションの権限で実行される(リモートコード実行)。また、プリコンパイルされたテンプレートを通じて、ブラウザ等のクライアント環境でもコードが実行される可能性がある。
対応策
Handlebars を 4.7.10 以降にアップグレードすること。また、回避策として Handlebars.compile() に渡される引数が常に文字列であることを確認するバリデーションを実装することや、サーバー側でランタイム専用ビルド(handlebars/runtime)を使用することが推奨されている。