クライアントサイド・テンプレート・インジェクション(CSTI)とは?

クライアントサイド・テンプレートインジェクション(CSTI)とは?

近年のWebアプリケーションではサーバーサイドだけではなくリッチなインターフェースを提供するために、クライアント側でもWebブラウザ上で動作するテンプレートエンジンを利用することがあります。

主にクライアント側で動作するテンプレートエンジンはJavaScriptで実現されていますが、利用しているテンプレートエンジンが古く既知の脆弱性が報告されている、あるいは利用方法に不備などが存在した場合に問題を引き起こされることがあります。

このようにクライアント側で動作するテンプレートエンジンの問題を突く攻撃をクライアントサイド・テンプレート・インジェクション攻撃と呼びます。この問題はクロスサイト・スクリプティングやクロスサイト・リクエスト・フォージェリなどの受動的攻撃と同等の被害を招くではなく、Webブラウザのクラッシュなどサービス不能攻撃(Dos攻撃)なども引き起こす恐れがあります。

クライアントサイド・テンプレート・インジェクション(CSTI)攻撃の仕組み

以下はクライアントサイド・テンプレート・インジェクション攻撃の概要です。クロスサイト・スクリプティング攻撃と同様に被害者のWebブラウザ上から攻撃用のコードを問題のあるWebアプリケーションに送信することで問題が発生します。

クライアントサイド・テンプレート・インジェクション攻撃の概要

  1. 攻撃者は罠ページの公開や不正なリンクを含むメールを送信して罠を仕掛けます。
  2. 被害者が気付かずに罠ページを閲覧する、あるいはメールのリンクをクリックすることでCSTI攻撃が発動します。
  3. 問題のあるWebアプリケーションでは、CSTI攻撃で指定されたデータを利用して動的ページを生成し被害者に応答します。
  4. 被害者のWebブラウザ上でCSTI攻撃を含むWebページが表示されることで、不正なテンプレートが実行されます。
  5. 4までの手順で攻撃が成功すると攻撃者は被害者の機密情報などを奪取することができます。

脆弱性の解説動画

クライアントサイド・テンプレートインジェクション(CSTI)が起こる原因

どのような文字列が認識されるかは利用しているテンプレートによって違いがありますが、テンプレートエンジンが、実行対象のテンプレートとして認識する文字列が含まれていることが原因で問題が発生します。以下は多くのテンプレートエンジンで利用されている特殊文字の例です。

代表的な特殊文字

特殊文字名称
{鍵カッコ
}鍵カッコ
%アンパサント
?クエッション

クライアントサイド・テンプレートインジェクション(CSTI)攻撃への対策手法

以下の両方の必須対策を行うことでクライアントサイド・テンプレート・インジェクション(CSTI)攻撃を防止することができます。

必須対策1(テンプレートエンジンのアップグレード)

古いバージョンのテンプレートエンジンは、既知の脆弱性などが検出されていることがあるため、最新のテンプレートエンジンを使用します。

必須対策2(エスケープ処理)

テンプレートエンジンが実行対象として認識する特殊文字をエスケープします。HTML文章に出力される場合はHTMLエスケープ、JSONデータなどに出力される場合はJSONエスケープなど出力されるデータのMIMEタイプに合わせて適切にエスケープ処理を行うことで問題を防止することができます。

まずは手軽にツールで脆弱性診断

上述の対策手法が重要となる一方で、脆弱性が混入されていないかを検知する事も重要となります。そのためには脆弱性診断を受診する必要があり、コードインジェクションの脆弱性についても脆弱性診断を通じて発見する事が出来ます。

脆弱性診断とは何かについて詳しく知りたい⽅は脆弱性診断とは(エンジニア向け)脆弱性診断とは(⾮エンジニア向け)もぜひご参照ください。

脆弱性診断ツール「Securify Scan」では、コードインジェクションの脆弱性検知も対応しております。脆弱性検知やセキュリティレベルを強化したい企業様はぜひ弊社の脆弱性診断ツール「Securify Scan」を活用ください。

無償でのトライアル実施も⾏っておりますので、お気軽にお問い合わせください。

Webアプリケーションの
継続的セキュリティを簡単に実現
Securify

ブログ一覧へ戻る

サービスに関するご質問・ご相談など
お気軽にお問い合わせください