脆弱性"&'\ Advent Calendar 2014 (17日目)

この記事は脆弱性"&'<<>\ Advent Calendar 2014の17日目の記事です。今日は少し昔話をしようと思います。がはは。

かつて、日本製TwitterのようなWassrというサービスがありました。当時、Twitterは数日に一度くらいはサービスが落ちていて、Twitterユーザーも「またか」と思いながら我慢して使うようなサービスであり、Twitterが落ちるたびにWassrはユーザーを増やすとともに、画像の添付のように当時Twitterにはまだなかった機能をどんどんアグレッシブに取り入れていく、使っていて楽しいサービスでした。
さて、そんなWassrがある日絵文字機能を導入しました。当時はUnicode絵文字もなくスマートフォンも普及しておらず、主にレガシーな携帯電話で使える絵文字をなんとかWeb上でも使えるようにしたという感じのものでした。
絵文字をパレットから選択するとヒトコト(TwitterでいうTweet)を入力するテキストボックス内には {emoji:XXXX} のような形式の文字列が挿入され、それを投稿するとXXXXに該当する絵文字が表示されるという仕組みでした。

その機能が実装されてしばらくして、僕はどんな絵文字が使えるのか、すなわちパレット内に表示されているものが使える絵文字全てなのかどうなのかというのが気になり、とりあえず {emoji:0000}{emoji:0001}…というように片っ端から絵文字のコードを挿入して投稿してみたのでした。すると、応答されたHTMLの投稿したヒトコトが表示される部分以降が言葉どおり真っ白になっていて、</body>の閉じタグさえないという状態になってしまいました。ああ、なんだかよくわからないけど意図しない結果が返ってきた、これは面白い!そう思って僕は自分のユーザ名にも{emoji:xxxx}のような白くなる絵文字コードを設定し、ページをリロードしてみると、今度は自分のユーザー名が表示されるより以降のHTMLが途切れてページが真っ白になって返ってきました。
よしもう少し調べようとHTMLソースを見ながらページをリロードすると…今度はなんとログインページが表示されてしまったのです。あれ?ログインしているはずなのに、なにか操作ミスをしたかなと思いながら自分のIDとパスワードを入力しログインを試みると、なんと「そのユーザーは存在しません」というエラーメッセージが。
ここで僕は、もしかして自分のしたことが原因でアカウントが消えるような惨事を引き起こしたのか、あるいは運営からトラブルを作ったということでアカウント消されたのだろうかと思い至ったわけです。
Wassrのアカウントを消されたので焦ってTwitterに書き込んだ当時のTweetがこれ。

そして、それをみたkanさんのTweetがこれ。

その時点では詳しくは知らなかったのですが、後日聞いたところによると

  • 存在しない絵文字のコードが指定された場合、例外をトラップしていなかったために絵文字を展開するサービスが落ちてしまいその絵文字指定より後ろのHTMLが生成されなくなる
  • 私のユーザ名部分にそういった絵文字コードが含まれていたため私をフォローしている人全員にそういう現象が発生した
  • とにかく復旧のために焦って私の投稿したヒトコトを消したもののまだ現象がなおらない(ユーザ名にも含まれていたので)
  • そんなわけでとりあえず私のアカウントを消した

という状況だったようです。そして落ち着いたところでWassrアカウントは復旧されたのですが、復旧された時点ではよほど焦ったのか、ユーザ名が "hsegawa" になっていました。それはそれで気に入ったというのもあり、以降当分の間僕は反省の意味も込めてユーザー名に hsegawa を使ったりもしていたのですけど。
そして、さらにその後、Wassr開発の人と飲みに行くようになり、その席でやはりこの話が出たときには「あれは正直訴えてもいいかと思った。何しろ広告が表示されないという実害が出たので」ということを言われたのでした。

教訓:攻撃するつもりがなくても遊びすぎるとよくない。