楽天のかっこいいURLの件

経緯

楽天のメルマガを一括配信停止するためのインターフェースとして、【楽天市場楽天のメルマガというページがあります。ここに自分のメールアドレスを送ると、

[楽天ショップのメルマガ一覧 登録情報確認・変更・配信停止]
https://emagazine.rakuten.co.jp/ns?act=chg_rmail&k=******************

という形式で、セッションID付きの URL がメールで返ってくるそうです。

http://blog.spicebox.jp/labs/2008/09/post_97.html

調査した結果、弊社から『【楽天市場からのお知らせ】メルマガ登録情報の確認・変更・配信停止について』というメールにて個別にご案内したメルマガ登録情報画面のURLをお客様ご自身がQ&Aサイトやブログに貼り付けたり、ソーシャルブックマーク等に登録してURLを公開した場合、当該URLが検索サイトのクロールの対象となり、検索サイトに登録されたことが原因であることが判明致しました。
(略)
今回の件は、当該URLの想定を超えた使途によるものでしたが、弊社と致しましても、早速、当該情報が検索サイトのクロールの対象とならないための対策等を実施するとともに、すでにクロールの対象となった情報についてはインターネット検索サイトに削除依頼を行うなど、今後メルマガ登録情報が表示されないよう万全の対策を講じました。

http://www.rakuten.co.jp/com/faq/information/20081001.html

3年前に取得したメルマガ設定のリンクが今でも使えます。
なので、このURLが漏洩すれば私が取得しているメルマガがすべてわかるわけです。

これがダイナミックリンクで有効期限があれば、問題はかなり薄まると思うのですが………

http://slashdot.jp/security/comments.pl?sid=420884&cid=1429623

この「k=......」のパラメータ部分ですが、セッションIDではなく、当該ユーザのメールアドレスを何らかのアルゴリズムで暗号化しただけのものっぽいです。

Googleで5個ほどの事例を見てみたところ、この「k=......」パラメータの文字列長は、どれもその人のメールアドレスの文字列長 + 4 となっていました。

4文字は何でしょうね。鍵でしょうか。どうせろくでもない独自暗号ではないかと思われます。もし暗号アルゴリズムがバレていたら、どんなことになっていたか……

……メールアドレスからどのユーザの情報でも引き出せていたと考えられます。Googleにキャッシュされてないものも全部。

http://slashdot.jp/security/comments.pl?sid=420884&cid=1429556

分析

つまり、「URLを漏らせば一発で個人情報がアウト」。
当該URLが検索エンジンにクロールされてなくても、そのURLを含むページがどこかにあれば危険。chg_rmailでyahoo検索すると怪しいのがひっかかりますね
暗号化アルゴリズムが解読された場合、メールアドレスから該当URLを推測可能だった可能性がある。

購読停止メール自体は確認していないので、当該メールに「このURLを他人にばらすと個人情報が一発でアウトなので絶対いわないでください」といった文言があったのかどうかは不明。設定ページ自体にその文言があったのかどうかも不明。

感想

どうやって短期間で問題を修正したのか気になる。セッションIDっぽいものがメアドに対して一意だとしたら、そこを改修するのはけっこう時間がかかりそうだが。
idの+4文字にキーが格納されてるという予想が正しくて、「暗号化されたメアド+乱数で生成されたキー」をセッションID的に使ってたとすれば応急処置は比較的容易かな(でもそんな設計するくらいなら最初からセッションキーを乱数にするよなー)。
もしも「idからメアドを復元できることを必要とした設計」になってるとしたら……。修正は大変そうだなー。
対策もどうやってるのかわからん、「漏れたセッションIDだけ無効化」と「robots.txtで対策」とかじゃないだろうなー、まさか。
いま設定の変更画面のURLはどうなっているんだろう。一時的に使えない?それともアクセス方法が変わった?元のまま?
まだチャンスはあるかも(何のチャンスだ)

まとめ

楽天のセキュリティはしっかりしてる!
楽天は事故が起きたとき責任を持って対応する!
楽天はユーザーのことを考えているので不要なメルマガを送りつけたりしない!
楽天最高!