Twitter の XSS 脆弱性騒動に思う

昨夜、ツイッターで深刻な XSS 脆弱性が明るみに出て、あちこちで被害が発生しました。日本時間の午後 11 時頃に事態が沈静化するまでの 5 時間ほどの間に起こったことと、私が感じたことを書き綴ってみようと思います。


ことの発端、私のタイムライン

今回の騒動についての流れを、id:icedealer さんが分かりやすくまとめてくれています。

私もこの日の夕方に @RainbowTwtr をフォロワーさんからの RT で知り、@RainbowTwtr のツイートをコピーして自分でもツイートしてみました。

背景色つきツイート

ウェブの知識がある程度ある人なら、これはいわゆる「クロスサイトスクリプティング(XSS)脆弱性」という、かなりやっかいな種類のセキュリティホール(安全上の欠陥)だと分かります。早く修正されればいいが、と思っていたら、あれよあれよという間にいろんな亜種が出てきました。詳しくは、前掲のエントリー「riot the rainbow」を参照してください。

夜にタイムラインを覗いてみると、IT 系に明るくないフォロワーさんが「RainbowTwtr はスパムだから、ブロックしてログアウトすべし」といった RT を回しています。間違った情報が広がるのはよくないと思い、私もこんなツイートをしました。

その後も情報とデマが錯綜し、不安を覚える声がタイムラインに溢れるのを見て、「とにかく IT に明るくない人にちゃんとした説明をしたい」と思い立ち、非常に素っ気ないページを 1 枚、急ごしらえで用意して、次のツイートをしたのが 21:02 のことでした。

このツイートは公式、非公式ともにたくさんリツイートされ、俗に言う「Reply タブが非公式 RT に蹂躙される」という状態を初めて経験しました。もっとも、私はこの現象を「蹂躙された」とは思わず、興味深く眺めていましたが。

何人かの方からいただいた推敲を反映したり、タイムラインに流れてくる情報を適宜加筆したりしている間も、リツイートの波は止まりませんでした。

なお、予防線よろしく、この直後(47 秒後)にこんなツイートもしましたが、こちらは 1 回しかリツイートされませんでした。

解説ページのこと

最小限のことを理解してもらおう

今回の騒動を専門用語を使って要約すれば、「TwitterXSS 脆弱性があり、マウスオーバーイベントを仕込んだ悪意のあるツイートにマウスカーソルが乗るとあれこれされてしまう」ということになるでしょうか(onmouseover 以外のイベントハンドラを仕込んだ悪意のあるツイートもあったそうだが、私は未確認)。このことを IT 系に明るくない人に分かってもらうには、どのように説明するべきかを考えました。

  • まずはマウスオーバーイベントを体験してもらおう。分かりやすいものがいい。もちろん、悪意はないものを。
  • JavaScript という言語で動いていることを知ってもらいたい。書き方は説明する必要はないだろう。
  • 掲示板やツイッターのような場所には JavaScript は書けないのが普通だということも知ってほしい。
  • でも、今回のバグでは JavaScript が書けちゃった。これはセキュリティ上のバグだよ。ウィルスじゃないよ。
  • 取り急ぎ、何をすればいいのか、何をしてはいけないのかを箇条書きにしよう。

これらを盛り込んで作ったページが、「2010 年 9 月 21 日現在のツイッターのバグ(脆弱性)について」です。以前作った CSS のテンプレートをほぼそのまま使ったので、とても味気ない仕上がりです。

「非 IT 系向け」の文書を書いた理由

混乱の渦中、私のタイムラインでは、

  1. ウェブに熟知している人が、ウェブの用語を使って説明しているツイート
  2. ウェブや IT に詳しくない人同士で、持てる知識を持ち寄って右往左往しているツイート

の 2 つをよく見ました。1 は正確な状況を知る上で非常に有用ですが、ウェブの知識がない人には「cookie」とか「XSS」とか「マウスオーバー」とか言われてもさっぱり分からず、何の役にも立ちません。2 は往々にして誤解やデマが伝達され、混乱が続くだけです。

「ウェブに熟知している人が、ウェブや IT に詳しくない人にも分かるような言葉で説明したツイート」が圧倒的に不足していると思いました。しかし、そういった分かりやすい説明は字数が増え、140 字制限の中では伝えにくいものです。それに、ツイッターの性質上、すぐに流れてしまいます。

そこで、字数を気にせず、ちゃんと分かりやすい文章をウェブに書こうと思ったのです。ブログでもいいのですが、ブログは余計なパーツやリンクが多すぎて、ウェブに慣れていない人には読みにくいと個人的に思っているので、見栄えが悪いのを承知の上でペラ 1 枚のウェブページにしました。また、私が使っているブログははてなダイアリーだけで、ここは JavaScript が埋め込めないという事情もありました。

加筆していくうちに少しゴチャゴチャしたかという反省はありましたが、非公式 RT やリプライでのコメントは好意的なものがほとんどで、「私でも分かった」という声をたくさんもらえたのはありがたい限りです。

本当はもっと詳しく書きたかった

はてブコメントで「cookie についても書いたほうがいい」というご意見をいただきました。私も、本当は「クッキーを全部削除してください」と書きたかったのですが、以下の理由で見送りました。

パソコン初級者の中には、各種サイトにログインしたらずっとしっぱなしで、パスワードなんてとっくに忘れたという人が少なからずいます。もし私が「クッキーを全部消しましょう」と書いて、それに従ったら、行きつけのサイトにログインできずにパニックになる人がたくさん出てくると思ったのです。

セキュリティに「完璧」はありませんので、どこかで妥協せざるをえません。今回、私の経験と勘から、クッキーについては言及を避けた方が得策だと判断し、解説文書には載せませんでした。ほかにもいろいろ書きたかったことを、泣く泣く割愛してあります。

そうでなくとも、人にモノを教える立場の人は、老婆心や親切心からついついたくさんのことを詰め込みすぎる傾向にあります。腹八分目ではありませんが、「ああ、もうちょっと教えたいことがあるんだけど……」くらいのところで止めておくのがちょうどいい。これは私の個人的な経験則です。

中級者以上の方には「何となく舌足らずで物足りない」と感じられると思いますが、こんな考えで書いたページだということを弁解させてください。

あと、「更新履歴をつけたほうがいい」というご意見もありました。これについてはまったくそのとおりですね。次回以降、気をつけます。「次回」なんてないことを祈りますが……。

ウェブを使うには IT の知識が必要不可欠なのか?

長くなってきたので、そろそろまとめます。

今回、非公式 RT のコメントに、私の「非 IT 系向け」という表現に対して「『情弱』って言わないところが優しい♪」というコメントがあり、考えさせられました。果たして、今回のような XSS 脆弱性について理解していない人は情報弱者なのでしょうか。

ウェブを活用している人は「ウェブは便利だよ」と言います。ウェブに心酔しているエンジニアの中には、「ウェブが世界を変える」と言う人もいます。そして、旧来のメディアを時代遅れだと言い切る人もいます。

私もウェブの恩恵をたくさん受けていますので、ウェブは「便利」以上に生活必需品です。でも、今のウェブを安心・安全・快適に使うために必要な知識は、改めて考えてみればものすごく膨大だと思いませんか。そして、知識の賞味期限がとても短い。

四六時中ウェブを使っている人ならともかく、生活の一部をウェブに置き換えるためだけに XSS 脆弱性を理解するべきなんて、私はとても言う気にはなれません。今のウェブは難しすぎると思います。

もちろん、セキュリティの知識は持っているに越したことはありませんが、今回のバグ騒ぎの原因と対策が分からなかった人は自分のことを「情報弱者」だと責めることはないと思います。IT 畑にいる人が、橋渡しをすればいいのですから。

ただし、真偽不明の情報を条件反射でリツイートするのはやめてくださいね。

最後に

今回の文書「2010 年 9 月 21 日現在のツイッターのバグ(脆弱性)について」を紹介してくれた皆さん、「解説を書いてみた」のツイートを RT してくれた皆さん(特に、私のことを信頼して最初の数分で RT してくれた、普段よくお話をしているフォロワーの方々)、どうもありがとうございました。また、ブックマークボタンもないページを一手間掛けてブックマークしてくれた 450 人以上のはてブユーザーの皆さんにも感謝します。

それから、この程度のブログエントリーに 3 時間も掛けるな。> 私

参考リンク