demandosigno

なんとか生きていけるように

やられアプリ BadTodo - 4.8 XSS 持続型

前回:やられアプリ BadTodo - 4.3 XSS(根本的解決) - demandosigno

Todoリストの編集画面において、URLの欄にjavascript:alert(document.cookie)と記入して保存します。
その後に誰かがそのリンクをクリックするとXSSが発動します。

HTML上は入力値がそのまま href 属性に出力されています。

<tr>
  <td>URL</td><td><a href="javascript:alert(document.cookie)">
  >>エッチな画像はこちら<<</a></td>
</tr>

ウェブ健康診断 仕様 p.10 の確認手法4番目の例にあたります。

href や src などのURL属性値を外部から変更できる場合、URLとしてjavascript:JavaScript式という形式(javascriptスキーム)でJavaScriptを起動できます。

反射型XSSと持続型XSS(格納型XSS)

前回までのXSSは、攻撃用JavaScriptが攻撃対象サイトとは別のサイト(罠サイト)にあるため「反射型XSS」と言います。
今回の場合、一度保存されるとその後ずっと有効なため「持続型XSS」と言います。
持続型XSSは攻撃者からすると手間がかからず、利用者からも分かりにくい方法になります。

対策

javascriptスキームによるXSSはHTMLのエスケープ漏れが原因ではないので別の対策が必要になります。
URL を出力するときは、「http://」や 「https://」で始まる URL のみの許可を「ホワイトリスト方式」で実装してください。

/* -----codeの行番号----- */