Slashdot Japanのコメント機能にXSS脆弱性 (対処済) 75
ストーリー by Oliver
バグはどこに潜んでいるか分からない 部門より
バグはどこに潜んでいるか分からない 部門より
Slashdot Japanのコメント機能にXSS脆弱性が発見されました。コメント投稿時に「ホントのテキスト形式」もしくは「コード」モードを指定した場合に、JavaScriptを含め、任意のタグをコメントに含める事が可能でした。この脆弱性は利用者からの指摘により判明し、2月7日未明(日本時間)までに修正しました。
悪用された形跡が発見できなかったとはいえ、利用者のみなさんをアカウント情報やSlashdot Japanへのアクセス情報などが漏洩するリスクに晒してしまったことを心からお詫び申しあげます。
- 原因と対策:
- 2002年夏に追加した汎用的なXSS対策のコードにバグがあった。一度すべての入力の実体参照をデコードした上で、危険な文字を実体参照に置き換える処理していたのだが、コメントの本文などの自前のXSS対策が行われるフィールドは例外として実体参照のデコードのみしていた。この時、このコードが含まれる関数がページの作成処理の始め以外にも呼ばれ、さらに処理されるデータがstaticであり、返されるのがこのデータへのリファレンスだったことが見落とされていた。そのため、投稿されたコメント本文をXSS対策した後、DBに挿入されるまでの間に行われていたコメント本文とは関係ない処理の副作用として、せっかく実体参照化された危険な文字が元に戻されてしまっていた。対策としてXSS対策とDBへの保存の間に他の処理を行わないようにすると同時に、不要な実体参照のデコードを行わないようにコードを変更した。プレビュー時には正しい処理が行われていたため、このバグの存在がなかなか明らかにならなかったと考えられる。
- 影響範囲:
- Slashdot Japanが独自に追加したコードのバグが原因であり、ベースとなるSlashcode 2.2.xにはこの脆弱性は存在しない。このコードは一般公開されておらず、Slashdot Japan以外にこの脆弱性をもつコードを利用しているサイトは存在しない。日本語対応作業中で公開されている2.3系では処理の方法が違うので、同じバグは含まれていない。
- 実害と対処:
- 対策後、これまでに投稿された約49万のコメントを調べたところ、この脆弱性を使ってJavaScriptを混入させたコメントは発見者による実験コメントのみしか発見できなかった。このバグにより、許されるタグのタイプミス(BROCKQUOTEやSTLONGなど)や許されていないが実害のないタグ(PRE)および意図せずにタグとなってしまったHTML的に無効なタグを含んだコメントがいくつか投稿されているが、この脆弱性を悪用しようとした形跡はない。発見者の実験コメントは手動で無害化した。
- 脆弱性の発生から解決までの時系列:
- 2002年夏:バグを含んだコードが書かれ、直後にSlashdot Japanにて使われはじめる
- 2004年2月4日:任意のタグを投稿できることに気がついた利用者がsecurity @ slashdot.jpにメールで連絡
- 2月6日朝:連絡がspamの可能性ありとして配信保留になっていたことが発覚。security@が久しく使われていなかったため、編集者MLの転送許可設定に含まれていなかったことが原因(対処済)。この時点ではコードを知っていて、チェックできるスラッシュチームのメンバーはいずれも別の用事があり、メールの内容を受けての調査はまだ行われなかった。
- 2月6日夜~7日未明:調査開始直後、脆弱性が本物であることが判明。30分程度のデバッグで原因が判明し、すぐに緊急対策をSlashdot Japanに実装。並行してほぼ同じ時刻に発見者がJavaScriptを含む実験コメントを投稿、再度指摘のメールを送信した。緊急対策後、手動で実験コメントを無害化し、過去数日に書き込まれたコメントに脆弱性を悪用したものがないかをチェックした。発見者には修正した旨を連絡。
- 2月7日夜:スクリプトを作成し、過去に行われた約49万の全コメントを許可されないタグや不正な属性がないかチェック。結果、無害化された実験コメント以外に脆弱性を突いたものは発見できなかった。発見者に脆弱性の原因と対処を詳しく説明したメールを送信。
- 謝辞:
- 本人の希望により名は伏せるが、最近のセキュリティ上の問題を指摘することを避けるとても危険な風潮にもかかわらず、恐れずに脆弱性を指摘してくれた発見者に心から感謝したい。この指摘がなければ、いつまでも利用者を余計なリスクに晒していたか分からないだけでなく、悪意を持った人が発見し、悪用する可能性もあった。原因追求と対策にもっと時間が必要だったならば、サイトを一時的に閉鎖することも十分に考えられたが、たとえそうしたとして発見者が業務妨害を行ったとは微塵も考えられない。当然ながら、この発見は不正アクセスでもない。バグや脆弱性を指摘してくれる人がいるからこそ、サイトはより安全なものになれるのであって、いくら感謝してもしたりない事はあっても、逆怨みすることはありえない。今後も、もし脆弱性とおぼしきものを見付つけたら、すべての利用者のためにも積極的に指摘してほしい。
で (スコア:3, 興味深い)
海外ではスラッシュドット型のコミュニティサイトっていっぱいあるのに、日本語版がリリースされないおかげで、利用が広まらないのは、もったいないと思います。
もし、リリースしたくないのであれば、その理由を教えてください。
Re:で (スコア:4, 興味深い)
日本語版のソースを公開しないのは、Slashcode.jpの存在がないからだと考えます。
コードが日本語になっているのは確かに非常に有用なことだと思いますし、そういうものが公開されるのはすばらしいことだと思いますが、Slashdot.jpのコードはそのまま公開するとやっぱりまずいですよね。かといってSlashcodeの日本語版あたりがあるわけでもないし、Slashcode本家にパッチを送って、日本語化を簡単にできるような状況にはまだ持っていけないんでしょう。
でも、公開して欲しいなぁと僕も思います。Slashdot.jpのコードはそのまま公開できなくても、Slashcode.jpを立ち上げたりとか、なんらかの方法で実現して頂けると嬉しいなぁ。
開示要求がないだけ、とか (スコア:2, 参考になる)
日本語版のSlashcodeもGPLなのでしょうけど、
WebサイトやFTPサイトに置かずとも、
ソースにアクセスしたい人が作者に連絡をとって
送付してもらう方法でも、テープを送ってくれた
ら入れて返す方法でも、良いのですよね。
先日、Linux Zaurus用のKmerlin.sというインスタ
ントメッセンジャーで、公開するしないで、ソフト
の公開自体を一時取りやめた事件がありました。
あのときは、コードが整理されてなくて未熟だから、
という理由で作者さんは公開してなかっただけだけ
ど、批判者には通用しなかったですものね。
あれもGPLでした。
なので、前向きに解釈できる、に一票。=)
Re:開示要求がないだけ、とか (スコア:1)
でも元のACさんが聞きたいのは、公開しなきゃいけないん
じゃないか?ということではなくて、なんで公開しないのかという
その理由だと思う。それは俺も聞きたい。
1:コードが整理されてなくて未熟だから?
2:公開すると安全じゃないから?
3:ただ面倒くさいだけ?
4:なんとなく?
スラッシュドットを運営してる方たちは、ソースを公開する
ことによっていろいろな利益が得られると考えてる人たち
だと思う。じゃなんでその利益を享受しようとしないのか?
「公開しる!」というんではなくて、単に興味がある。
Re:開示要求がないだけ、とか (スコア:1)
Re:開示要求がないだけ、とか (スコア:1)
>ことによっていろいろな利益が得られると考えてる人たち
>だと思う。じゃなんでその利益を享受しようとしないのか?
>
>「公開しる!」というんではなくて、単に興味がある。
同感です。これ [srad.jp]の答えを待ちましょう。
Re:開示要求がないだけ、とか (スコア:1)
VA Linuxジャパン「Slashcode」の提供を開始 [itmedia.co.jp]
とか穿った見方をしてみる(苦笑)
これ構築してもらうとソースコードもついてくるのかな?
Re:開示要求がないだけ、とか (スコア:1)
# 色々事情があって理由は言えないので察してくれならそれでも
# いいから、とりあえず何か言って欲しいなぁとか思ったり。
Re:で (スコア:1, 参考になる)
ほいよ。
Slashjp CVS [osdn.jp]
あるんじゃない!! (スコア:1)
脆弱性以外は放置気味ですが (スコア:2, すばらしい洞察)
2年程前からのバグが未だに認識したまま修正しないってのは直すつもりが無いからなのか、それ以外に理由があるからでしょうかね。本家が修正するのを待つだけとか。
Re:脆弱性以外は放置気味ですが (スコア:5, 参考になる)
コードいじりは一度はじめると時間を無限に喰う。でも、それがまた楽しくて(以下略
感謝 (スコア:2, すばらしい洞察)
忙しいなか、スラッシュコードのデバッグをして下さった
スラッシュ関係者の皆様に感謝。
便乗して、日曜日で商業報道が休みの時にもネタをあげて下さる
タレコミ人の皆様にも感謝。
# 思っている人は多いだろうけれど 言いたかったので
スラッシュ国民^H^H編集者投票 (スコア:2, 余計なもの)
* みなさんどんどん脆弱性を探し出して下さい。
* 探すのはOKだけどDoSはやめてね(^^;)
* ソース渡すのでローカル環境で調べてね。
* 気持ちは嬉しいんですが…(もにょもにょ)
* 私たちは訴えないけど警察が動いてきたら諦めてね。
* ここはクラック練習サイトではありません。帰れ。
* いい弁護士を探しています。
* ACがこんな投票作るんじゃねぇ!
さあ、編集者の方の投票はいかに?
# 半分冗談で半分真面目だったりします。
# 「今後も、もし脆弱性とおぼしきものを見付つけたら、
# すべての利用者のためにも積極的に指摘してほしい。」
# という文章、安全に考えれば「偶然そういうのを
# 見つけたら」の意味でしょうけど「積極的に探して
# 構わないので」と考える人達もいるでしょう。
# サイトの運営的な立場にいる人の考え方を示して欲しいな、と。
修正前日 (スコア:1)
2月4日といえば (スコア:1)
発見に至った経緯はやっぱりこれ [srad.jp]でしょうか。
ホントのテキスト形式、コード形式ともにプレビュー時には異常はなく投稿したときに発生していました。
当時は論戦にかまけていたのでXSSのことまで頭が働きませんでした。
脆弱性を指摘してくださった方に感謝。
いやーお疲れ~ (スコア:0)
"謝辞:"の部分 (スコア:0, フレームのもと)
特に指摘すると、すぐに威力業務妨害で訴えてくるトコとか…
(まぁ、実際にデータを盗んで晒しちゃう人はどうかと思いますけど)
Re:"謝辞:"の部分 (スコア:2, すばらしい洞察)
ZZX
Re:"謝辞:"の部分 (スコア:1)
商売の基本だね。
ZZX
Re:"謝辞:"の部分 (スコア:1)
>商売の基本だね。
俺としたことが脊髄反射で極論に走ってしまった。 上は忘れてくれい。金のためにセキュリティに手を抜いていいといいたいワケじゃないんで。
金儲けを頭ごなしに否定するような発言にはつい過敏に反応するタチなので本質を見失ってしまった。スマン。
ZZX
Re:"謝辞:"の部分 (スコア:1)
セキュリティ報告のメールが spam 扱いにされていたところとか、不手際がいくつも重なっている部分もあり、完全に適切な対応とは言い難いのですが。
とはいえ、そういった不手際も含めて公開してくださっているのは、他のサイトでも参考になるとは思います。
>特に指摘すると、すぐに威力業務妨害で訴えてくるトコ
って、どこのことを指して言ってますか? ACCS のことであれば、
>(まぁ、実際にデータを盗んで晒しちゃう人はどうかと思いますけど)
という被害があったからこその威力業務妨害だという認識です。
あと、確認させていただきたいのですが、記事本文で、 とあるのは、「/.-J ではこの発見は不正アクセスだという認識はしていない」という意味なのか、「一般論として XSS 脆弱性の発見は不正アクセスではない」なのか、教えてください。
また後者なら、その法的根拠を示してください。
をいをい (スコア:0)
イラクの大量破壊兵器と同じだよ。
存在するもの・該当するものは「ほれ、この通り」と示せても、
存在しないもの・該当しないものは示しようがない。
Re:をいをい (スコア:1)
報告じゃなくて発見のほうですが、不正アクセス行為の禁止等に関する法律 [ipa.go.jp] の第三条第2項の二が根拠となりうると考えています。
# この条文が、セキュリティホールをつくことを想定して書かれているものなので。
Re:をいをい (スコア:1)
若干「不正アクセス」の範囲を取りすぎているのではないか、と思います。
不正アクセス行為の禁止等に関する法律第3条第2項第2号は、大雑把に言ってしまえば、「管理者の予定外の手段で、管理者としては何らかの認証を経なければ使えないようにした『つもり』の機能を、『そうであると知りつつ』使える状態にした場合(但し、事前に許可を取った場合は除く)」は不正アクセス行為である、という規定です。
なお、『そうであると知りつつ』という限定がかかるのは、刑法第38条に「罪を犯す意思がない行為は、罰しない。ただし、法律に特別の規定がある場合は、この限りでない。」とあるためです。
#同時に、「法律を知らなかったとしても、そのことによって、罪を犯す意思がなかったとすることはできない。」とありますので、「それが法律違反だとは知らなかった」というのは通りません。
したがって、「たまたま」セキュリティホールを突いてしまった場合には不正アクセス行為には該当しませんので、脆弱性の発見が即不正アクセス行為に該当するとは限りません。
#今回の脆弱性発見者の場合は「実験コメント」がヤバイかもしれませんが、「誰も使えないはず」の機能を利用できるようにすることは不正アクセス行為じゃなかったりするので、詳細が分からないとなんとも言えませんね。
で、ついでにいくつかの応用例を考えると、
・管理者がその存在を知りつつ放置していたセキュリティホールを突いた場合でも、不正アクセス行為。
・ただし「アクセス制御機能」がハナから用意されていない場合は、不正アクセス行為にはならない。
・「たまたま」知ってしまったセキュリティホールであったとしても、もう一度突くのは不正アクセス行為(office氏のAD2003での行為)
という感じでしょうか?
ついでまでに言っておくと、不正アクセス行為の禁止等に関する法律第3条第2項のうち、
・第1号は、なりすまし利用
・第3号は、踏み台利用
です。
Re:をいをい (スコア:1)
で、1点だけ確認したいのですが、 誰も使えないはずの機能を利用できるようにすることが、不正アクセス行為にならないというのがよくわかりません。
「不正アクセス行為の禁止等に関する法律」の第三条第2項の二にある「特定利用」にあたらない、ということなのでしょうか。
同法第二条にあるように、「特定利用」はそのマシンを利用するあらゆる行為が含まれ、誰も使えないはずの機能は誰も使えないように制限されているわけですから、これが「特定利用」にあたらない、と主張することは難しいのではないでしょうか。
Re:をいをい (スコア:1)
で、「誰も使えないはずの機能の利用」が不正アクセス行為に該当しない、というのは、「アクセス制御機能」の定義(第2条第3項)に起因します。
「アクセス制御機能」の定義を口語的に言えば、「特定の符牒を知っている/持っている人にはネットワーク越しでの『利用制限の全部または一部を解除するため』に、管理者がコンピュータに導入した機能」になります。
#今回の説明用に相当端折って書いたので、正確性は相当落ちる表現です。申し訳有りません。
要するに、アクセス制御機能というのは、
・通常では利用が制限されていること
も必要条件ですが、
・特定の符牒を知っている/持っている人は利用の制限を解除できること
も必要条件なんです。
というわけで、「誰も使えないはず」のことをできるようにしたとしても、不正アクセス行為に該当しない、ということになります。
なお、「誰も使えないはず」というのは、手段は問わないので、証明しようとすると、多分悪魔の証明に近いものになります。
#そして「誰も使えない」可能性が否定できない限りは、不正アクセス行為に相当すると判断する事はできません。
で、「悪魔の証明」と書くと、それをさせられるのか、と反応する人もいるかもしれませんが、法律の運用上は疑わしきは罰せずの原則がありますので、
・検察側に「アクセス制御機能がある」ことの証明が義務付けられ、
・被告側は「検察が主張するアクセス制御機能がアクセス制御になっていない」ことの個別論破を目指す
ことになり、悪魔の証明が裁判の場で求められることはありません。
まぁ、法律の世界(特に刑罰規定のある法律)では、定義の厳密性を求められるが故に、通常世界の考え方からは考えられないような定義がなされることがある、という一例と御理解ください。
Re:をいをい (スコア:1)
「誰も使えない」というのは、本当に誰も使えないのか、アクセス管理者以外の誰も使えないのか、どちらの意味で使っているでしょうか。
前者なら、アクセス制御にあたらないというのは理解できます。
# もっとも、この意味で「誰も使えない」機能が使えるようになる状況が想定できませんが……。
ですが、後者なら、アクセス管理者が利用するための識別符号 (root のパスワードなど) があるはずですから、アクセス制御に該当すると思いますが、いかがでしょうか?
Re:をいをい (スコア:1)
おっしゃるように、アクセス制御機能が無い、というのは前者の場合です。
で、今回の件は「本来はリジェクトされるであろうデータをcgiに作成し、サーバに保存させることに成功した」という話だと思われるので、そのような行為をサーバーの管理者権限や、slashチームの人々だけが持っているような権限で行えるものなのかどうかが、アクセス制御機能の有り無しの判断基準になると思います。
#これが「任意のデータを保存させることに成功した」だと簡単なんですけど、今回はcgiにデータを喰わせるのを成功したに留まってますので。
やけに、細かい話になってしまってすいませんでした。
Re:をいをい (スコア:1, 興味深い)
例えば、一般権限で直接には読み出せないファイル内容でも無条件に出力する
CGIなどのスクリプトが設置されていたとする。
スクリプトを攻撃者が設置したのなら間違いなく黒だが、運営者自身の手で
設置され、一般権限でも実行可能に設定されてるような場合。
一般権限で実行できるのだから、アクセス制御の回避にあたるとするのは
不適当だと思う。ただし、スクリプトを攻撃に使えると知った上で
攻撃のために使った場合、この行為は黒と判断されると思う。
ただ、この「攻撃」の範囲に、脆弱性を確認するための試験的な攻撃と、
本当の攻撃との間に線を引くかどうか、引くなら基準は?というのが問題で、
今のところ、明確なガイドラインはないように思う。
国(総務省)は攻撃試験を違法行為としているから、何らかの正当かつ強力な裏づけを
提示しない限り、裁判となればこの方向で判決が下される可能性は高いと思う。
Re:"謝辞:"の部分 (スコア:0)
>って、どこのことを指して言ってますか? ACCS のことであれば、
>>(まぁ、実際にデータを盗んで晒しちゃう人はどうかと思いますけど)
>という被害があったからこその威力業務妨害だという認識です。
でもね、それにいたるまでに、ACCS(とサイト作成会社)、ファーストサーバーに重大な怠慢があったというのはご存知?
当方ファーストサーバーでサイト運用してますけど、お世辞にも
対応が良かったとは言えない。(脆弱性を一年以上放
Re:"謝辞:"の部分 (スコア:0)
>今回のような結末になったと個人的には思われる。
だから、取得した個人情報を発表してよいと。
ふーん。
Re:"謝辞:"の部分 (スコア:0)
> ふーん。
えーっと...、ダメって法律ありましたっけ?
法整備の問題なんとちゃうのん?
Re:"謝辞:"の部分 (スコア:1, すばらしい洞察)
どこに、そんな風潮があるのでしょうか?
単に犯罪者が捕まっただけで、そんな風潮がひろまった(発生した?)とするのはおかしいと思います。
犯罪者を犯罪者として指摘しない自称セキュリティ専門家たちの方がたちが悪いのじゃないでしょうか。
それとも、/.J も誰かを訴える準備をしているとか...
Re:"謝辞:"の部分 (スコア:1)
Re:"謝辞:"の部分 (スコア:0)
だいたい本当の焦点は、件の事件の前後で「見なかったことにする」の選択肢が増加したかどうかなんだから、逮捕報道直後の一回だけの国民投票じゃあんまり情報量がないし。
Re:"謝辞:"の部分 (スコア:2, すばらしい洞察)
スラドの辺鄙な所で、スラド内の辺鄙な所に向けた意見として、
スラドの辺鄙な場所での風潮を語ると何を混乱するのでしょう?
李 露星
Re:"謝辞:"の部分 (スコア:1, 興味深い)
まぁ、XSS脆弱性を指摘できる人間は、大抵は「辺鄙な所」のどこかにアンテナのばしてるものだと思うが。世間一般の「風潮」とは異なるんだろうが、その指摘が出来るやつの意見がそうなりつつあるってのは事実かもしれん。
でもまぁ、それ以前に、スラド国民投票の結果を鵜呑みにするな、という点では合意。断り書きをよく読もうぜ、ってことで。
Re:"謝辞:"の部分 (スコア:1)
「/.Jに限って言えば」と言っているのに、スラド内の意見を困られてもこっちが困るのですが。
それと、別に国民投票の結果を鵜呑みにしているわけではないのですが、1位と2位の差が2倍以上開いているので、
それなりに意味のあるデータなのではないかと思ったのです。>#492094のAC
件の事件の前から「見なかったことにする」が同じくらいだったのであれば特に最近の風潮ではない、というのは確かにそうですが、
今現在の風潮がそうだという事は否定されませんよね。
Re:"謝辞:"の部分 (スコア:1, すばらしい洞察)
無理に現行法で取り締まるから議論になる。
「お上が嫌疑を掛けた=犯罪」とお考えならば、
そのような思考停止は我が国の主権者には相応しくないので、
それが奨励される国、例えば北朝鮮にでも移住して頂きたい。
彼らを犯罪者として扱いたいならば法整備が先だろう。
くれぐれも法治国家である事を忘れないで欲しい。
「不心得者」と「犯罪者」の区別ぐらいはつけようね。
Re:"謝辞:"の部分 (スコア:0)
>どうしようもないですな。
そういう間抜けなことを言う前にちょっとぐらい勉強すればよいのに。
Re:"謝辞:"の部分 (スコア:0)
なんにもわかっとらんですな。
Re:"謝辞:"の部分 (スコア:1)
よくあるじゃないですか。
喫煙してる中高生に注意したら逆ギレして刺された、とか。
それと一緒ですよ、たぶん。
#えっ、違う?
#( ・ω・)ノ――――@ くるくる。
Re:"謝辞:"の部分 (スコア:0)
いいかげんにしませんか?
フレームを招き、無意味に騒ぎを大きくし、捻じ曲げを引き起こすような嘘の書き込みをなぜするのですか?
Re:はっ (スコア:1)
Re:はっ (スコア:1)
民事ならOKですが。
# 冗談にマジレスなのにID(間違ってたらスマソです)
Re:"謝辞:"の部分 (スコア:2, すばらしい洞察)
現実に上のようなことが起こっていたら、/.-J の管理者・編集者の責任問題に発展していることは間違いないと思われます。
それは /.-J の misleading じゃなくて、あなたの misreading 。
全く違う事象を、勝手に結びつけているにすぎず、あなた自身がいうとおり、条件が全く違うので比較にもなりませんよ。
# ACCS をたたきたいのなら、新しくタレコミ記事を書けばいいのにと思う ID
えーと (スコア:0)
覚えるのが面倒なのでAC
Re:えーと (スコア:1)
1.偽のログインフォームとともに、ID/PASSを入れたくなるような偽メッセージを表示
2.誰かが運良く(悪く?)ID/PASSを入力してくれたら第三者サイトで受け取ってしまう
→ID/PASS詐取成功
Re:test (スコア:2, 興味深い)