Hatena::ブログ(Diary)

ockeghem(徳丸浩)の日記 このページをアンテナに追加 RSSフィード

 | 

2007-12-01 twitter:パスワードは破られたのか

[]twitterクロスサイトスクリプティング(XSS)脆弱性があればパスワードを変更できる twitterにクロスサイトスクリプティング(XSS)脆弱性があればパスワードを変更できるを含むブックマーク

 秋のDK収穫祭などで騒がれている、いわゆるDK祭り。

さすがの私も、今夜半の祭りにはmaitter。

私のtwitterが荒らされていたのだ。

http://blog.livedoor.jp/dankogai/archives/50959103.html

現象から見てセッションハイジャックされたと思われるが、原因となる脆弱性小飼弾氏の主張どおりCSRF(Cross Site Request Forgeries)だったのか、パスワードは窃取されたのか、元々のパスワードが類推しやすいものだったのかなど、議論を呼んでいる。

私は、現象からみて、原因となる脆弱性CSRFではなく、XSSだったと思う*1twitterXSS脆弱性があれば、セッションハイジャックにより、第三者が小飼弾氏になりすまして発言するところまでは可能だ。しかし、一般的にはXSSではパスワードまでは窃取できない。id:hasegawayosuke氏の主張のように、twitterパスワード変更には現在パスワードの入力が要求されるからだ。

twitterではパスワード変更は今のパスワードの再入力が必要なのでCSRF/XSSでは変更はできない。Forgeされる<前>のパスワードも貧弱だったのではないかと想像。

http://b.hatena.ne.jp/hasegawayosuke/20071201#bookmark-6649055

しかし、twitterの仕様を調査した結果、仮にtwitterXSS脆弱性などがあり、セッションハイジャックができたとすると、第三者がパスワードを変更できることを確認したので報告する。

大きな流れとしては、(1)メールアドレスの変更、(2)パスワードリセット、という順序で行う。

セッションハイジャックしたクラッカーは、twitterのユーザプロファイル変更画面に遷移して、メールアドレスを自分が受け取ることの出来るものに変更する。

f:id:ockeghem:20071201175204p:image:left


次に、パスワードリセットの画面に遷移して、先ほど変更したメールアドレスを入力する。

f:id:ockeghem:20071201175227p:image:left


以下のようなメールが来るので、そのURLを実行する。

f:id:ockeghem:20071201175245p:image:left


以下のようなパスワード変更の画面が表示されるので、好きなパスワード(ユーザIDそのものなど)に変更する。

f:id:ockeghem:20071201175304p:image:left


上記の過程で、現在のパスワードは一度も要求されない。また、元のメールアドレスにメール通知は行かない。本来のユーザの知らないところで、メールアドレスパスワードが変更されてしまう。

上記は脆弱性ではなく、あくまでtwitterの機能仕様だ。しかし、なんらかの脆弱性があってセッションハイジャックされた場合に、被害を増大させてしまう危険性がある。

twitterは、本来どうすればよいか。以下のような対応が考えられる。

  1. ユーザプロファイル変更時にもパスワードを要求する
  2. パスワードリセットの際に、「秘密の質問」に対する答えを求める
  3. プロファイル変更後にメールにて通知する。メールアドレスが変更された場合は、旧メールアドレスにも通知する。

上記は、重複して採用可能だが、1.を含て実装するのが安全だろう。

なお、メールアドレスの変更がCSRF脆弱性により(勝手に)変更される可能性については、対策済みであることを確認した*2

ユーザ側の対策はどうすればよいか。あまり良いものは思いつかない。twitterは汎用のブラウザを使わず、専用クライアントなどでのみ使用するくらいだろうか。

*1:追記:但し、パスワードが脆弱だった可能性も否定できない。

*2:hiddenフィールドでトークンを渡している

marujxmarujx 2007/12/01 18:37 ×id:hasegawayousuki
id:hasegawayousuke
だと思われます。

ockeghemockeghem 2007/12/01 23:19 marujxさん、ご指摘ありがとうござ今す。修正しました。

 |