XSS脆弱性修正に失敗してしまった駄目な例

<input type=hidden name=foo value='$USEROUTPUT'>

この状態で、「'」をエスケープしていないというのは信じられないですね。以下、勝手に捕捉。

同様にしてstyle属性の追加をされてもhiddenな項目には効果がありません。

というのは担当者の我流であるがゆえの誤りでしょう。少なくとも IE であれば、以下の方法でスクリプトを発動させることができます。


<input type=hidden name=foo value='' style="xss:expression(alert(document.location))" id=''>
IEでは、expression( 式 ) を記述することで、スタイルシート内であってもスクリプトを記述することが可能であり、スタイルと連動して(おそらくレンダリングの度に)スクリプトが発動しますので、hidden であってもスクリプトを作動させることが可能です。
…上の例で、「'」をエスケープされてる場合でも XSS させる方法ってあるのかな。あぁ、ページがUS-ASCIIであれば、このあたりのトリックが利用できますね。