Template Injection
サーバサイドテンプレートインジェクション(SSTI)は、攻撃者がテンプレート構文をレンダリングコンテキストに注入し、サーバ側のテンプレートエンジンで任意のコードを実行する攻撃である。
目的
ユーザー入力がテンプレートレンダリングに届くことで起こる SSTI とその防御を理解する。Jinja2 や Freemarker などでよく見られる脆弱性である。
メカニズム
プログラムが template.render(user_input) でユーザー入力をテンプレートとして描画すると、攻撃者は {{7*7}} や {{config}} を入力して式を実行したりオブジェクトを漏洩させたりする。防御としては、テンプレートとデータの分離、サンドボックス化、セーフレンダリングがある。
ユースケース
- Jinja2 の SSTI 対策
- Freemarker のセキュリティ
- テンプレートエンジンの監査