見えるセキュリティ
蓄積型XSS
STORED XSS
この概念とは?
蓄積型XSS(保存型XSSとも呼ばれます)は、投稿などに含まれる細工した入力が保存され、後からページに使われたときに、閲覧者のブラウザで意図しないスクリプト(プログラム)が動く問題です。投稿する場面と、別の人が読む場面を分けて見ていきましょう。
保存された投稿が、後の閲覧でどう使われるのか。同じ投稿を使い、危険な表示と、文字として安全に表示する方法を比べます。
- THEME
- web-vuln
- KIND
- attack
- REVIEW
- self-reviewed ·
保存した投稿を、適切な出力処理をせずページへ組み込むとどうなるかを見ます。
ここでは、保存した投稿をサーバーがHTML本文へ組み込む例を扱います。保存済みのデータも、表示するときの扱いが重要です。
図の読み方
時間は上から下へ ↓ /「次へ」で1 STEPずつ表示
攻撃者
投稿する内容を細工する
閲覧者のブラウザ
後からページを要求し、返されたHTMLを解釈する
Webサーバー
投稿の受付、保存・読み出しの指示、HTMLの組み立てを行う
投稿の保存先
保存された投稿を保持する
投稿・保存
STEP 1攻撃者が投稿を送る
攻撃者からWebサーバーへ。細工した投稿
[表示を書き換える指示を含む投稿]
STEP 01 / 7
攻撃者が投稿を送る
STEP 1 / 7: 攻撃者が投稿を送る
攻撃者が、細工した内容を投稿欄から送ります。サーバーには、その内容が入力データとして届きます。この段階では、閲覧者のブラウザでプログラムが動いたわけではありません。
技術的な詳細を見る
この例では、攻撃者が投稿でき、その内容を後から他の人が読む機能を想定します。入力元は投稿欄に限りませんが、ここでは経路を1つに絞ります。投稿のために送る要求と、後の閲覧要求は別です。
この概念の要点
要点
投稿するときと、閲覧するときは別。
保存した入力が、後のページ表示に使われます。
要点
保存済みでも安全とは限らない。
読み出した値を、どの出力先でどう扱うかが重要です。
要点
実行されるのは閲覧者のページ。
同じ投稿が危険な形で繰り返し表示されれば、別の閲覧者にも影響し得ます。
要点
文字を表示するための処理を選ぶ。
この例ではHTML本文への出力エンコードを使い、原本の削除とは分けて考えます。
理解確認
参考資料
- 参考資料Stored XSS
What is stored cross-site scripting?、Impact、Stored XSS in different contexts
- CWECWE-79
CWE-79Description、Alternate TermsのStored XSS、Potential Mitigations
- OWASPWSTG v4.2・WSTG-INPV-02
WSTG-INPV-02Summary、Test Objectives、Input Forms、Gray-Box Testing
- 参考資料Cross-site scripting (XSS)
Overview、Anatomy of an XSS attack、Client and server XSS、Output encoding
- IPA安全なウェブサイトの作り方 1.5 クロスサイト・スクリプティング
概要、機能例、1.5.1の5-(i)、5-(v)
- OWASPCross Site Scripting Prevention Cheat Sheet
Output Encoding for HTML Contexts、Dangerous Contexts、HTML Sanitization、Other Controls、Reliance on HTTP Interceptors
- 参考資料Character reference
冒頭、Named character references、文字と文字参照の表
- 参考資料DOM-based XSS
DOM XSS combined with reflected and stored data