サーバーサイドテンプレートインジェクション
サーバーサイドテンプレートインジェクション とは何ですか?
サーバーサイドテンプレートインジェクションテンプレートエンジンの構文を不信頼な入力に注入し、テンプレートの描画時にサーバー上でコード実行を引き起こす攻撃。
サーバーサイドテンプレートインジェクション(SSTI)は、ユーザー入力が Jinja2、Twig、Freemarker、Velocity、ERB などのエンジンが処理するテンプレートへ連結される際に発生します。多くのエンジンは式中でオブジェクトアクセスやメソッド呼び出しを許すため、{{7*7}} や ${...} といったペイロードによって環境変数の読み取り、オブジェクトグラフの探索、最終的には任意コードや OS コマンドの実行が可能になります。影響は情報漏えいからサーバー完全乗っ取りまで及びます。対策は、ユーザーデータはテンプレート変数としてのみ渡す(テンプレート本体にしない)、サンドボックス化されたあるいはロジックレスなエンジンの利用、テンプレート名のホワイトリスト化、文脈に応じた出力エンコード、最小権限でのアプリ実行などです。
● 例
- 01
Jinja2 で描画される名前フィールドに {{7*7}} を入力すると 49 が返り、SSTI が確認できる。
- 02
Freemarker のテンプレートインジェクションが Runtime.exec を呼び出し、サーバー上でリバースシェルを起動する。
● よくある質問
サーバーサイドテンプレートインジェクション とは何ですか?
テンプレートエンジンの構文を不信頼な入力に注入し、テンプレートの描画時にサーバー上でコード実行を引き起こす攻撃。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
サーバーサイドテンプレートインジェクション とはどういう意味ですか?
テンプレートエンジンの構文を不信頼な入力に注入し、テンプレートの描画時にサーバー上でコード実行を引き起こす攻撃。
サーバーサイドテンプレートインジェクション からどのように防御しますか?
サーバーサイドテンプレートインジェクション に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
サーバーサイドテンプレートインジェクション の別名は何ですか?
一般的な別名: SSTI, テンプレートインジェクション。