現場のエンジニアへ:XSSの「盲点」、mXSSにどう立ち向かうか
セキュリティの現場に長くいると、「XSS対策はサニタイズしてるから大丈夫」という言葉を何度耳にすることか。しかし、その安心こそが最大の脆弱性だ。反射型や格納型は今やWAFのシグネチャで防げることも多いが、ブラウザの「親切心」を悪用したmXSS (Mutation XSS) は、既存の防壁をいとも簡単にすり抜ける。
今日は、ブラウザのパース挙動を逆手に取ったこの「化ける攻撃」の本質と、それを封じ込めるための現場的な実装論を叩き込む。
—
mXSSとは何か?:ブラウザの「お節介」という脆弱性
mXSSは、サーバー側でサニタイズを完璧に施したはずの文字列が、ブラウザでDOMへ変換(パース)される過程で「別の意味を持つHTML」に書き換わってしまう現象を指す。
具体的には、ブラウザがHTMLの構文ミスを補完したり、innerHTMLへの代入時に不完全なタグを「正しい形式」に正規化したりする挙動を悪用する。
攻撃のメカニズム(PoCの概念)
例えば、サーバー側で無害化されたはずの以下の文字列を考える。