金利0無利息キャッシング – キャッシングできます

 | 

2014-07-24

OAuth2.0で強制連携させるCSRFの影響と、その対策について

22:53 | OAuth2.0で強制連携させるCSRFの影響と、その対策について - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - OAuth2.0で強制連携させるCSRFの影響と、その対策について - 金利0無利息キャッシング – キャッシングできます

OAuth2.0で強制連携させるCSRFについて、いまいち周知が十分でない気がするので解説します。簡単に言うと、複数のid providerによるログインをサポートしているのであれば「CSRFによる外部アカウント強制連携」は、アカウントハイジャックが可能な脆弱性だと考えなくてはいけない、ということです。

このへんの話

対策はstateパラメータを使うことです。OAuth2.0にはstateパラメータというのがあるのですが推奨になっているだけで必須ではありません。

OAuthを3rd partyログインの為に用いている場合, クライアント上の被害者アカウントが外部Identity Provider上の攻撃者アカウントと紐づけられてしまい, 攻撃者が別デバイス上で被害者としてクライアントログインできるようになってしまう, といったケースも考えられる.

典型的に問題になるのは「複数のid providerと連携可能」で「そのいずれかでもログイン出来る」ようなサービスです。元々メールアドレスパスワードを使ったユーザー登録があって、追加でFacebookアカウントを登録するとFacebookログインも出来るようになる、というようなものも含みます。認証/認可完了のcallback URLをターゲットに踏ませることで、ターゲットのアカウントに、攻撃者の用意した外部id provider(Facebookとかgithubとか)のアカウントを強制的に連携させ、攻撃者は自分のidを使ってターゲットのアカウントログイン出来るようになります。

ログイン機能のCSRFは「対策されていない」ことも多いかと思います。ユーザーが「ようこそ◯◯さん」といった表示を見て気付くこともありますし、実際に被害が発生するためには、攻撃者のアカウントログインしたまま個人情報を入力してしまったり、性癖がバレる投稿をしてしまったりする必要があります。なのでCSRFログインが出来たとしても、クリティカル脆弱性だとは見なされないことも多いのではないでしょうか。

単一の外部のid providerでログイン出来るだけなら、CSRFログインできることによる影響は、通常のCSRFログイン出来る状態と同等です。CSRFは「勝手に出来る操作」の影響がどの程度大きいかで、深刻度が変わります。単にイタズラ投稿ができるようなものもあれば、公開範囲変更(秘密情報流出)や、アカウントハイジャックに繋がるものもあります。

OAuth2.0のstateパラメータはあくまでオプショナルですし、ログイン用途に使うかどうかはサービス次第なので、ライブラリ側では配慮されていない可能性があるでしょう。

ちなみにOpenID2.0の場合も、stateless modeというid providerのサーバー署名検証を丸投げするモードというのがあり

これが有効になっている場合も、CSRFによるログインが可能になりますが、みんなOpenID2.0のことは覚えてないと思うので、詳細については省略します。

トラックバック - http://subtech.g.hatena.ne.jp/mala/20140724
 |