ログイン機能へのCSRFによるセッション固定

  • 危険なのかよくわかんないですけど、はてダ初め書きます
  • http://ido.nu/ayaya/yj.html(対策されてた!)
    • iframe 内で http://login.yahoo.co.jp/config/login に logout=1 を POST して強制的にログアウト状態にする
    • ログインフォームの form タグ部分をスクレイピングし、あらかじめ用意しておいた Yahoo! JAPAN ID とパスワードを埋め込む
    • その HTML を iframe にロードし、submit() で POST させることにより、用意しておいたアカウントでログインさせる
    • メールで「住所情報を更新しないとアカウントが消えます」とか書いて誘導したら、どのくらい釣れるかなあ
    • あーあと、個人情報の入力だけじゃなくて、OAuth の認可とか権限を与える操作もまずい
  • ページは SSL になっていて、アドレスバーも正規の https://edit.yahoo.co.jp である
    • 通常のフィッシングに対する警戒では気づくことができない
  • ヘッダ部分に「こんにちは、oqdpoさん」
    • Yahoo! では、常にログインしている Yahoo! JAPAN ID を表示しているので、ここで気づけた!
      • 他のサイトで大丈夫じゃないところもあるかもね
      • これはユーザ固有のユニークな識別子を表示しなければならない、重複が許されるニックネームとかじゃダメ
    • ただし、ユーザが個人情報を入力するときに、確認しなければいけないポイントが増えてよくない
      • SSL の証明書、アドレスバーに加えて、サイトごとに異なるアカウント名…
      • MutualAuth とかで見るべき場所が統一されるといいかもね
      • できれば、変なリンクをクリックしてたどり着いたページだからあやしいので個人情報を入力しない、ではなく、どのような遷移で到達したページかにかかわらず、そのページでブラウザが示す情報のみで、個人情報を入力しても問題ないか判断できるようになればいいけど…
  • とりあえず技術的にどうしたらいいのかというと
  • ログインフォームへアクセスしたブラウザと、ログイン情報(パスワードなど)をポストしたブラウザの一貫性を確認していないということなので、対策は通常の CSRF と同じです
    • ログインフォームにアクセスされたタイミングで、ランダムな値を持つ cookie を発行する
    • フォームの hidden 要素に、その cookie の値を埋め込む
    • ログインフォームから post されたら、cookie と hidden の値の一致をチェックする
  • 気にしすぎなのかもしれない
  • 寝不足かもしれない

id:asannou さんへ: Password Managerがポップアップして http://ido.nu/ayaya/yj.cgi のURLが見えました %Opera10.10 windows

はてなブックマーク - itochanのブックマーク / 2010年1月24日
    • 再現しました。JavaScript の submit() でも、type="password" な要素が含まれていると出るようですね
    • type="hidden" に置換するようにしたら出なくなりました