サニタイズ貫通(XSS大王シリーズ)
2003年7月2日(水曜日)
サニタイズ貫通(XSS大王シリーズ)
更新: 2003年7月4日
nifty.com 以下のドメインには「パレット」というサービスがあります。この名前からサービスの内容を想像するのはかなり困難ですが、要するに「絵が描ける掲示板」というようなコンセプトだったようです。つまりは HTML タグが使用できる掲示板です。
私は把握していなかったのですが、かつてはこれにも自由にいろいろ書けてしまったようで、6月30日に、パレットのタグ利用を制限した旨のアナウンスが出ています。
パレットでのタグの利用について
パレットでのタグの制限につきましてご案内が遅れましたこと、お詫び申し上げます。今回パレットを安全にご利用いただけるよう対応をおこない、一部のHTMLタグの記述を制限させていただきました。
この制限はブラウザでの発言の表示となります。ニュースリーダーでのアクセスでは、オリジナルのデータを取得することとなります。
詳細は「パレットの基本仕様」または「よく使うHTMLタグ」をご参照ください。
引き続き、みなさまに安心してご利用頂けるよう努力いたしますので、今後ともどうぞよろしくお願いいたします。
以上、https://com.nifty.com/forum/ より
というわけで、サニタイズが強化されたようです。
ところがどっこい、このサニタイズを貫通する書き方があって、なんと script要素を含む発言ができてしまうことが判明。
※具体的な方法は伏せておきます。ヒントとしては、サニタイズのルーチンが賢いのが逆に敗因になった感じ。特殊な制御文字なども不要ですし、やり方さえ分かれば誰でも気軽に書き込めます。
……どこかで高木さんも書いていたような気がしますが、「特定のタグだけのサニタイズ」って本当に難しいものですね。
なお、パレットの認証は Basic 認証で、Cookie は関係ありません。パレットだけを使用している分には、セッション Cookie の漏洩はありません。また、ここに書けるのは会員だけです。
ただし、会員がコミュニティなどにログインし、そのままパレットを閲覧すると危険な場合があります (これは Cookie ドメイン問題の影響)。また、普通に書いても img要素で外部の画像を参照することはできるので、Web バグを使用したり、ひそかに hpcgi1.nifty.com の画像を参照して Cookie を取得したりすることは可能です。
……などということをのんきに考えていましたが、実はそれだけではなく、Microsoft.XMLHTTP で Basic 認証の ID とパスワードをこっそり盗めるので、きわめて危険です。実際に Base64 エンコードされた ID:パスワードの組が画面に表示されることを確認、デコードしたら簡単に ID とパスワードが取り出せました。分かると思いますが、この値を密かに他のサーバに送出することも可能です。本気で洒落になりません……。
※Microsoft.XMLHTTP でパスワードが盗めるという情報はえむけいさんから頂きました。情報感謝です。これについての詳細は、高木さんによる「[memo:5237] XSS脆弱性によりBasic認証のパスワード情報が漏えいする (memo.st.ryukoku.ac.jp)」を参照してください。
※また、Mozilla などでも XMLHttpRequest を使用すれば全く同様にパスワードが盗めるようです。Flash や Java Applet でも OK なようで、スクリプト無効でも駄目っぽいです。この辺まとめてえむけいさん情報。
さらに恐ろしいことに、パレットには任意のファイルを添付ファイルとして指定できる機能があります。この添付ファイルは同じドメインのサーバ内に格納されます。そして発言には object要素を書くこともできてしまうので、ユーザのセキュリティ設定によっては任意の ActiveX コントロールを実行することさえできます。
※実際にこの方法で Flash を実行できることを確認しました。
これはスクリプト無効でも駄目なので、パレットには近寄らないのが無難でしょう。
2003-07-04 追記 : 「私は把握していなかった」と書きましたが、パレットに何でも書けてしまうということは公開当初から知られていたようです。「パレット裏マニュアル (forum.nifty.com)」に、パレットの発言をフレームにして他のリソースを丸ごと取り込む方法が紹介されています。今回の修正が行われる前は、文字通りの意味で何でも書けたようですね。
※FPROG 会員なのに気づいてなかった私って……。
- 「サニタイズ貫通(XSS大王シリーズ)」へのコメント (3件)
- 前(古い): TRACEメソッドをブロック
- 次(新しい): 振り返ればロボット