twitter のアカウント乗っ取りが可能だったかもしれない件

実際には試してないので勘違いかもしれないけど3/9の夕方まで twitter のアカウントが乗っ取り可能だったかもしれない、という話。←特殊なケースを除いて不可能だった模様。追記参照。

「ついったー足あと帳」(http://hamachiya.com/junk/twlog/)でアクセスした人のidと発言ログを抜き出す(protectedでも!)デモをやっていたり、それがきっかけで過去に settings から id とメールアドレスを抜き出す「(元祖)ついったー足あとちょう」があった(昨日までは動作していた)のを見て、ひょっとして、と思って昨夜少し調べてみた。

去年の11月のDK祭り*1の時に、パスワードクラック以外で乗っ取り可能か検討されたことがあった。

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

大きな流れとしては、(1)メールアドレスの変更、(2)パスワードリセット、という順序で行う。
http://d.hatena.ne.jp/ockeghem/20071201/p1

しかし、当時はその方法はなさそうということであった。

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

*2:hiddenフィールドでトークンを渡している
http://d.hatena.ne.jp/ockeghem/20071201/p1

しかし、ついったー足あと帳で利用された穴(仕様?)を利用すればその対策は回避できるのではないか、と疑問に思い調べてみると、

crossdomain.xml を設置して、安易に許可ドメインをすべてにすると、別ドメインからでも、第三者がそのユーザのブラウザの COOKIE を用いてアクセスが可能になってしまいます。つまり Flash(swf) からそのユーザになりすまして、GET/POST し放題な状態になります。ここで、たとえば /config などに設定情報が記載してあると、ユーザ情報を取得、といったことが可能になります。またランダムなキーを埋め込んでそれが同一なら POST 許可、という方法をとっているサイトでも、crossdomain.xml で許可している場合、最初に GET でランダムキーを取得してからPOST することが可能なため危険です。

http://d.hatena.ne.jp/secondlife/20070718/1184716398

「crossdomain.xmlCSRF 脆弱性について」というタイトルでぱっと見 CSRF 対策は有効なのか無効なのかわかりにくいけど、GET/POST し放題ということは無効だろう。これについて、ひろみちゅがブクマで補足している。

注意喚起は良いが、これをCSRFと呼ぶのは誤り。CSRFは(「R」が示すように)requestを出すだけなのが特徴。この場合はresponseを取れ、それを使って次の requestを出せるので凶悪。通常のJavaScriptのsame origin ruleの破れと同じ影響。
http://b.hatena.ne.jp/HiromitsuTakagi/20070718#bookmark-5311725

つまり「メールアドレスの変更がCSRF脆弱性により(勝手に)変更される可能性については、対策済み」というのは swf からのクロスドメインアクセスに対しては通用しないであろう。よって、(1)メールアドレスの変更、(2)パスワードリセット (3) パスワード変更 → 完全に乗っ取り完了 という攻撃は可能だと考えられる。

というわけで、8日夜に twitter に「ついったー足あと帳」と元祖の方の両方について現象を報告し、ついでに上のようなことが可能ではないか? という問い合わせを投げた。いまのところ返事はないのでどう受け止められたのかはわからないが、9日の16:15に crossdomain.xml のアクセス許可が "*.twitter.com" に制限された。現在はどちらの「足あと帳」も機能しない。

追記:変更はできなかったらしい

元祖足あとちょうの nitoyon さんからトラバ:

確かに取得はできるけど、変更はできない。実際に試した私が言うんだから間違いない。

たぶん、サーバー側でリファラを見て弾いてるんだと思う。SWF からリクエストする場合は、SWF の URL がリファラとしてつくようになっている。リファラをなしにして送ったらうまく行くことも確認した。
http://d.hatena.ne.jp/nitoyon/20080310/twitter_crossdomain

実際には変更リクエストはリファラチェックで弾いている、ただし、リファラなしの場合は弾かなかったということ。「一昔前の Flash Player」(2006年11月くらい?)の脆弱性を利用しない限り settings の変更はできないのではないかという話。

リファラなしを弾かないのはプロクシでリファラを削る環境に配慮? 逆に言えば最新の Flash Player でもそのような環境では settings を変更できる。もっとも相手がそういう環境で攻撃ページを踏まないとダメなので特定の相手を狙い打ちできるかどうかは相手次第。jkondo 祭りがこの件と関係ある可能性は低いかも。


*1:dankogaiのアカウントが乗っ取られた事件。パスワードが脆弱だったとされている。