使用するテンプレートエンジンによっては、テンプレート式からJavaScriptのオブジェクトや関数へ到達できる場合があります。
CSTIそのものは、テンプレート式の注入です。
最終的にブラウザーでJavaScript実行へ到達した場合、XSSとして扱われます。
Server-Side Template Injection、SSTIは、サーバー側テンプレートエンジンが攻撃者の式を評価する問題です。
CSTI
└─ ブラウザー側テンプレートで評価
└─ XSSへ到達する場合がある
SSTI
└─ サーバー側テンプレートで評価
└─ サーバー上のコード実行へ到達する場合がある
SSTIとXSSは別の脆弱性です。
window.postMessage()で受信したデータを、検証せずにDOMへ入れるとDOM XSSになります。
危険な例です。
window.addEventListener("message", (event) => {
document.querySelector("#message").innerHTML = event.data;
});
改善例です。