サーバーサイド・テンプレート・インジェクション
- 概要
サーバー・サイド・テンプレート・インジェクション(SSTI)の脆弱性は、テンプレートがサーバー・サイドで構造化され、ユーザー入力値が既存のテンプレートに挿入される場合に発生します。攻撃者はテンプレートの構文を悪用して悪意のあるペイロードを挿入し、攻撃者が望むアクションを実行できるようにします。 - 攻撃プロセス
SSTIの脆弱性は、サーバーやテンプレートによって異なるため、悪用のためのペイロードは、使用される言語やテンプレート・エンジンによって異なります。
ソース : https://dokhakdubini.tistory.com/515
攻撃サーバーは、上の画像のようにそれぞれの構文を挿入することで、どのテンプレートを使っているかを特定することができる。
スマート・テンプレートを使った攻撃構文の例:
GET /test?q={$smarty.server.SERVER_ADDR} HTTP/1.1
Host: www.sample.com
User-Agent: HTTPie
3. 対策
SSTIの脆弱性対策には、主に2つのアプローチがある:
1) サニタイズ: ユーザー入力からテンプレートを生成することを避ける。ユーザー入力が必要な場合は、テンプレート内で提供されるパラメータを通じて処理し、テンプレート自体への影響を抑える。
2) 入力検証: ユーザーが入力した特殊文字構文をエスケープするために、ユーザー入力を検証する。
AIWAFでは、各テンプレートで使用されている構文に合わせたレスポンスパターンを開発しています。
サーバーサイドテンプレートインジェクション2
算術演算を利用した攻撃構文を検出するパターン。
サーバーサイド・テンプレート・インジェクション3
jinja2テンプレートの脆弱性を悪用し、Pythonベースの悪意のあるペイロードを挿入する攻撃を検知するパターン。
サーバサイドテンプレートインジェクション 4
Mako テンプレートの脆弱性を悪用して Python ベースの悪意のあるペイロードを挿入する攻撃を検出するパターン。
サーバサイドテンプレートインジェクション 5
PHPベースの悪意のあるペイロードを挿入するためにSmartyテンプレートの脆弱性を悪用する攻撃を検出するためのパターン。
サーバサイドテンプレートインジェクション 6
Twig テンプレートの脆弱性を悪用して PHP ベースの悪意のあるペイロードを挿入する攻撃を検出するパターン。
4. 結論
SSTIの脆弱性は、そのアクセスしやすさに比例して高いリスクをもたらすため、その影響の大きさから迅速な対応が必要である。アップデートは継続的にリリースされるため、定期的なチェックとアップデートが不可欠である。
AIWAF製品は、SSTI関連の脆弱性に対応するための複数のパターンを開発しており、今後新たに発見される脆弱性にも迅速に対応していく。
5. 参考文献
https://www.igloo.co.kr/security-information
https://hackingstudypad.tistory.com/150
https://velog.io/@silver35/Web-Server-Side-Template-InjectionSSTI