毎秒1000リクエスト を捌く超高速CMS「adiary」
2010/04/28(水)[adiary2] かんたんログイン認証の脆弱性対策
今はかんたんログイン脆弱性がブームなようです。今更何言ってるんだという感じですが、一応adiary内部でどのようにかんたんアクセスを処理しているか書いておきます。
かんたんログインとは
携帯の機種固有IDを使用した自動ログイン機能のことです。Cookieを実装する気のない某殿様商売通信キャリアの存在が一気に利用を広げました。
機種固有IDは、USER-AGENTなどのHTTPヘッダによって送信されます。HTTPについて知っている人ならすぐわかることですが、このヘッダは誰でも簡単に任意の値で送信することができるため何のセキュリティにもなりません。例えるなら、掲示板に書き込む際の名前欄で承認しているようなものです。しかも比較的単純な通し番号なので、秘匿性もあったものではありません。*1
adiaryの実装
もともとこんな危険なものを実装する気はなかったのですが(苦笑)、要望があったのでしぶしぶ実装しました。
右の画面がかんたんログインの実際の画面です*2。このページをブックマークしてもらい「かんたんログイン」をクリックしてもらうことでログインできます。
ID:useridの人がかんたんログインを設定したこの画面のURLは次のようになります。
http://~/adiary.cgi/=userid:LE0GdeSwSdQ/?login_docomo
LE0GdeSwSdQという文字列は「機種固有IDから生成されるハッシュ」です。adiary.conf.cgiの中の
<$Secret_phrase = '秘密の言葉'>
の設定が漏洩しない限りハッシュ文字列を第3者が知ることはできません。
仮にこのログインURLだけ漏洩しても、対応する機種固有IDが分からないとログインできません。ですので、いわゆるかんたんログイン脆弱性はadiaryには存在しないことが分かります。
しかし別の問題が……
次は携帯ログイン後のURLです。
http://~/adiary.cgi/=userid=kpQYloloFFF0M4Xnujjs/?login_docomo
「kpQYloloFFF0M4Xnujjs」がセッションIDになります。Cookieが使えないので仕方なくURLに埋め込んでいるのですが、リファラーからこのURLが漏れるとセッションが乗っ取られてしまいます。
ドコモはリファラを送らないことになっているみたいですが、他機種だと色々で頭の痛い問題です。
(参考)携帯電話向けWebアプリケーションのセッション管理手法
とりあえず
Cookieを食わせて、食べられたらそっちに誘導するように変更するか……。Cookie非対応でリファラ送信なんて機種もあるそうですが、それは端末脆弱性なんで無視かな。
2010/04/24(土)adiary Version3 進捗状況メモ
Ver3のリリースが見えてきたのでこの記事の更新は停止しました。
特徴
リリーススケジュール(予定)
- β1 画像管理と完全なデザイン編集以外の機能。
- β2 アルバム機能(ファイル管理)の実装。
- β3 機能追加。修正。自動アップデート機能など。
- β4 本格的なデザイン編集機能。
- β5 adiary Ver2からの移行ツール。機能完成。
- β6 Markdown記法、スマホ画面の強化。全体の調整、修正。
- RC1 修正など。テーマ拡充。
- Ver3正式版(2015年夏を予定)
アップデート後の必要な処理を自動的に行う機能を内蔵したので移行したい人は移行しても構わないかも。それでも一応β版ということは心に留めておいてください。
HTML構造やプラグイン構造は互換性を失う変更は予定されていませので、テーマなりプラグインなり自由に作っていただけると大変たすかります。
テーマ開発・プラグイン開発で困ったらどんどん質問してください。また完成したテーマやプラグインはライセンスや動作に問題がなければβ版の段階でも本体収録されることがあります。
ネタメモ、積み残しメモ
- プラグイン関連
- cronイベント
- コメントのNGワード機能、ホスト指定のコメント非公開機能
- テキスト画像化プラグイン
- コンテンツのパンくずリスト
- adiaryのデモ動画
頂いた要望
- サイトマップ生成機能(プラグインで誰か作ってほしいな)
- グループウェア機能
- ユーザー毎に記事の既読・未読が設定できて、スケジュールの管理ができるくらいの。