もう5年も前の話になっていたのだけど、Echofon(Twitterクライアントの一つ)の件を今更だけど書かねばならない。
- https://subtech.g.hatena.ne.jp/mala/20120214/1329199851
- https://subtech.g.hatena.ne.jp/mala/20120305/1330961228
- https://twitter.com/bulkneets/status/176658152882831360
当時、Echofonのプッシュ通知を管理するサーバーの認証機能に欠陥があり(というか認証が無く) 他のEchofon利用者に対して送られるpush通知(DMやreplyなど)を横取りすることが出来た。
このセキュリティホール自体は素早く修正されたのだけど、この件をきっかけに、クライアント/サーバーの境界線が曖昧になっている、という問題を強く意識するようになった。
そもそもEchofonの管理するサーバー上に、個々のユーザーのTwitterのアクセストークンを保持してDMやreplyなどを受信しているということをユーザーは認識していたのか?
事故が起これば、実装に不備があれば(実際にあった)、開発会社に悪意のある人間がいれば、DMが盗み見られてしまうわけだ。そのことをユーザーは知っていたのか?
「アプリに認可を与えた」つもりでいたら、プッシュ通知なんかのために「予想に反して」、「開発者の運用するサーバーにも認可を与えた」ことになっていた、というユーザーが一定数いるんじゃあるまいか?この機能を有効にした場合、アクセストークンが開発者の管理するサーバーにも送られて、あなたから見えるTweetやDMを受信する権限を得ます、といったことが、十分に説明されているようには思えなかったのだ。
コードがどこで動くのかは曖昧になっている。一見、スマホ上だけで完結、クライアントサイドのみで動くように見えるアプリが、実際にはデータの処理をサーバー上で行っている、ということが起きている。
アプリに認可を与えたら、何やら付随するクラウドサービスにも同時に同意していて、入力したデータは大体全部サーバーにもバックアップされていてどこからでも、どのデバイスからでも同じデータにアクセスできて、というのは、まあ大体そういう流れにはなっているだろうし、否定はしない。曖昧になってるからと言って、区別をつけないのを当たり前にしないでくれ。この流れの中で、あえてそれをしないと、この部分はローカルで動いていますよ、と表明しているにも関わらず、真逆の誤解をするのをやめてくれ。
区別をつけることは、マズイことが起きたときに、きちんとNoと言えるようにするためにも必要なことだ。
ソフトウェアに対する信頼と、サービス事業者に対する信頼とを区別をつけない人が大多数になってしまえば、ローカルで処理していると思っていた部分がある日突然クラウドで動作するようになっても、すんなり受け入れられてしまうだろう。
例えば、Google日本語入力が、入力文字をサーバーで変換していると思いこんでいたり、そういった誤解をしている人が居たとして、
「え、どこでコードが動いていても同じでしょ?」 「アプリの規約に同意したんだから、タイプした文字がいつどんなタイミングでGoogleのサーバーに送られても文句言えないってことでしょ、私はそういう認識で使ってるけど」
そういう解釈をする人が大多数になってしまったら、少なくとも自分は困る。
おわり。