Wiki のファイル添付機能に XSS 脆弱性

なんかどうも分かりにくいんだけど、要するに「ブラウザ上でスクリプトが実行可能なファイルをそのまま開けてしまう形でファイルを添付できること」が問題なわけですな。1

例えば HTML が添付してあって、その添付ファイルへのリンクをクリックしたときに、ダウンロードではなくそのまま表示できるようになっている。もちろんいちいちダウンロードして開き直すよりその方が便利なんだけど、じゃあその HTML に悪意のコードが埋め込んであったらどないすんねん、ちゅーこと。対策としては

  • ブラウザにファイルのダウンロードを強要する

ということになる2んだけど、これが

  • まともな実装のブラウザに対しては Content-Type で plain/text(これもやばいと思う)とか application/octet-stream を返すことで対処
  • IE に対しては拡張子のつけかえ(Content-Type なんか見てないから)、と思ったら拡張子も見ていない場合があったので本当に根本的な解決策はあるんだかないんだか?

ということになるわけだ。副作用としては

  • 画像をインラインで展開してくれないと添付機能のうまみが半減しないか?
  • PDF とかもインラインで展開してほしいなぁ

なーんてことを思うと、

  • ファイル添付機能の利用ユーザーを制限する

という、「運用で回避」な方法がいちばん現実的なのかなぁという気もする。でも今度は Wiki の良さを spoil しちゃうのね。

spoil ついでに、これが本格的な CMS なら添付そのものは誰でも ok にして、添付されたファイルはとりあえず保留にする。(公開しない。)で、特権ユーザーの手で安全性が確認されたら有効にする、なんて方法もありか。高機能な Wiki はますます CMS としての機能が増えていくってことかなぁ。

あるいは Wiki にそのファイルが安全かどうかをチェックする機能を埋め込むって手もなくはないのかな。添付したときにファイルをチェックする。重たそうだし、どこまでチェックできるのかはよく分かってないけど。

ところで IE 7 は Content-Type 周りの挙動は修正されるんですかね?

ちなみに PukiWiki では

とりあえずファイル添付を管理者だけに制限するのがよさげか。LAN 内のものは放置でいいとして、インターネット上で公開しててみんなで使っているところではかなり不便そうだ。

  1. これは概念レベルなので、Wiki の実装によってはもうちょっと込み入った脆弱性があるかもしれない。 

  2. もちろんダウンロードしたところで悪意のコードを埋め込まれたファイルを開いたら危険という事実そのものは変わらない。ただ、サーバ上のファイルを開いたときとローカルのファイルを開いたときでは具体的な危険性は変わってくる。 

More