【実務・中級編】SSTIを防ぐためのサンドボックス化とロジック分離 – アプリケーションセキュリティ & 安全な開発防御ガイド

SSTI(サーバーサイドテンプレートインジェクション)の深淵:テンプレートエンジンを「凶器」にさせないための防衛術

やあ、エンジニア諸君。また一つ、現場でよく見かける「時限爆弾」の話をしよう。

アプリケーション開発において、Jinja2(Python)、Twig(PHP)、EJS(Node.js)といったテンプレートエンジンはもはや空気のような存在だ。しかし、多くの開発者は、テンプレートエンジンが「ただの文字列置換ツール」ではなく、「サーバー上で任意のコードを実行できる仮想マシン」であることを忘れている。

今回は、SSTI(Server-Side Template Injection)という、RCE(リモートコード実行)に直結する最も醜悪な脆弱性について、現場の知見を叩き込む。

—

1. なぜ「サニタイズ」だけでは足りないのか

多くのエンジニアは「ユーザー入力をエスケープすれば安全だ」と教わる。だが、SSTIの真の恐怖は、テンプレートエンジン自体が持つ「メタデータへのアクセス機能」にある。

例えば、Jinja2環境でユーザー入力をそのままテンプレートに埋め込むと、攻撃者は以下のようなペイロードを投げてくる。

攻撃者が送る悪意ある入力値
{{ self.__init__.__globals__.__builtins__.__import__(‘os’).popen(‘id’).read() }}

これは単なる文字列ではない。テンプレートエンジンのオブジェクト階層を辿り、Pythonの標準ライブラリ(osモジュール)をインポートし、シェルコマンド(id)を実行させるという、極めて洗練されたコード実行だ。WAFで

securityintronationalをフォローする

コメント

タイトルとURLをコピーしました