2008年第1四半期の脆弱性届出情報

件数はともかくとして気になったのは以下の点です。


 これは、ウェブサイトが文字コードを指定しない場合におけるウェブブラウザの文字コードの解釈に関するもの(UTF-7)や、スクリプトに該当する文字列(Internet Explorerのexpressionプロパティ)に関するものです。クロスサイト・スクリプティング対策をしていても、対策が不十分なウェブサイトが多く見うけられます。
スクリプトに該当する文字列(Internet Explorerのexpressionプロパティ)に関するもの」というのが意味不明ですが、expressionを使ってのXSSというからには、おそらくこういう感じのものだと思います。

<input type="hidden" value=""style="xss:expression(alert(1))">

<input type="text">の場合には、expressionを使わなくても、普通にonmouseoverなどのイベントハンドラが注入可能ですので、実際にexpressionが効果を発揮するのは<input type="hidden">に対してであろうと思われます。hiddenのvalueに「<」「>」はインジェクトできないけれど、「"」がインジェクト可能な場合に、上のようなHTMLを生成させることで、IEにおいてはスクリプトが動作します。
そして、これへの対策としてIPAのリリース文では次のように続いています。


ウェブサイトの開発者は(略)「入力されたHTMLテキストから、スクリプトに該当する文字列を排除する」(*12)などの対策が必要です。
注釈の(*12)は

(*12)「安全なウェブサイトの作り方 改訂第3版」P.25の7)を参照。
と書かれており、「安全なウェブサイトの作り方 改訂第3版」のP.25の7はというと「1.5.2 HTMLテキストの入力を許可する場合の対策」における保険的対策「入力されたHTML テキストから、スクリプトに該当する文字列を排除する」だったりします。上で書いた、hiddenにおいて「"」が挿入可能という状態であるのなら、必ずしも「HTMLテキストの入力を許可する場合」に合致するわけではないように思います。どちらかというと、「安全なウェブサイトの作り方 改訂第3版」のP.23の1)に書かれている「ウェブページに出力する全ての要素に対して、エスケープ処理を施す」を強調するほうが適切であるように感じました。

あと、どうでもいいことですけれど中の人からの情報によりますと、ウェブアプリケーション脆弱性の届出244件のうち約40%が特定個人によるものだという噂です。