直しても直しても直らない
2005年6月7日(火曜日)
直しても直しても直らない
JVN に新ネタ、「JVN#0DC004F6 desknet's におけるクロスサイトスクリプティングの脆弱性 (jvn.jp)」というものがでています。
この問題は、JVN#F88C2C13 (JVN#89DE2014の情報を追加) で対応されたパターン以外のスクリプトが実行可能である問題です。
以前指摘されて修正したはずの問題が別のパターンで可能だったという話のようです。実のところ、ブラウザベースのアプリケーションで HTML メールを安全に表示するというのはメチャクチャ大変なことなので、仕方ないのかなという気もします。
私が経験した事例では、HTML メールではありませんが、こんなケースがありました。
まずは HTML が添付できる掲示板の事例。
- 添付された HTML は本文の一部として表示されるが、<script> などの危険なタグは削除されるというサニタイズ処理
- しかし <<script> などと書くと何故か貫通
- 修正されたが、今度は <scr<script>ipt> などと書くと貫通
- 修正されたが、また別の方法でスクリプトが書ける事が発覚 (これは修正されていないので方法は伏せておきます)
それから、また別の HTML が書ける掲示板の事例。
- HTML が書けるが、使用できる要素はいくつかに限定されている。a要素が使用できる
- <a href="javascript:alert()"> などと書くと、タグ全体がエスケープされる。属性値に "script" という文字列が含まれているとエスケープされるというサニタイズ処理
- しかし <a href="javascript:alert()"> などと数値文字参照で書くと貫通
- 修正されたが、<a href="javascript:alert()"> として文字参照末尾のセミコロンを省略すると貫通
- これは非公式に修正されたらしい (修正はアナウンスされていないし私も正式な報告を受けていないのですが、いつのまにかできなくなっていました)
- しかし、実はまだ別の方法でスクリプトが書ける (これも修正されていないので方法は伏せておきます)
どちらも「修正しました」「修正できていません」と泥沼としか言いようのない経緯をたどり、結局修正できていません。
これらはそもそも「HTML が添付できる」「HTML が書ける」という仕様ですので、危険でない HTML は使用できるようになっていなければなりません。そして特定の危険な組み合わせだけをサニタイズしようとしているわけですが、それがもう茨の道なわけです。後者のケースでは、「HTML では REFC (参照終了区切り子、セミコロン) が省略可能なケースがある」などという知識が要求されているわけですが、そんなマニアックなところまで把握しているプログラマはどのくらいいるのでしょうか。さらには、HTML の仕様書には出ていない MSIE の怪しい挙動に至るまで理解している必要があります。
というわけで、「危険な記述だけをサニタイズする」という発想はもう物凄い茨の道です。直しても直しても次から次へと貫通方法が発見されるというのは、ある意味当然だとさえ思います。
そして思うのですが、上で軽く触れたような「こういうサニタイズではこういう貫通方法があるので駄目」というノウハウがどこかに蓄積されていて、ウェブアプリケーションを作ろうという人たちが自由に参照できる形になっていると、いろいろな人が幸せになれるのかもしれません。「IPA ISEC セキュア・プログラミング講座 (www.ipa.go.jp)」などに出ている事もあるのですが、もっと詳細に知らないと駄目な事ってあると思うのですよね。
……まあ、現状では「そういうのを公開すると一般ユーザが真似する」などと言う人が出てくるのは目に見えているので、難しいのでしょうけれど。
- 「直しても直しても直らない」へのコメント (3件)
関連する話題: セキュリティ / クロスサイトスクリプティング脆弱性 / IPA / JPCERT/CC / JVN / 情報セキュリティ早期警戒パートナーシップ
- 前(古い): カカクコム批判はボツ?
- 次(新しい): 動かすのは簡単だが、安全に動かすのは難しい