OAuth 2.0 Threat Model and Security Considerationsドラフトから:
4.4.1.13. 脅威: コード置換 (OAuth ログイン)
攻撃者は、被害者の ID を使用してアプリケーションまたは Web サイトへのログインを試みる可能性があります。OAuth で保護されたサービス API によって提供される ID データに依存してユーザーをログインさせるアプリケーションは、この脅威に対して脆弱です。このパターンは、いわゆる「ソーシャル ログイン」シナリオで見られます。
前提条件として、リソース サーバーは、ユーザー ID を取得したと解釈されるユーザーに関する個人情報を取得するための API を提供します。この意味で、クライアントはリソース サーバー API を「アイデンティティ」API として扱っています。クライアントは、OAuth を使用して ID API のアクセス トークンを取得します。次に、ID API に ID を照会し、それを使用して内部ユーザー アカウント データ (ログイン) を検索します。クライアントは、ユーザーに関する情報を取得できたので、ユーザーが認証されたと見なします。
クライアントが付与タイプ「コード」を使用する場合、攻撃者は、標的のクライアント アプリケーションで使用されているのと同じ ID プロバイダーから、それぞれの被害者の有効な認証コードを収集する必要があります。攻撃者は、ターゲット アプリケーションと同じ ID プロバイダーを使用して、被害者をだまして悪意のあるアプリ (ID プロバイダーにとっては正当に見える可能性があります) にログインさせます。これにより、ID プロバイダーの承認サーバーがそれぞれの ID API の承認コードを発行します。次に、悪意のあるアプリはこのコードを攻撃者に送信し、攻撃者はターゲット アプリケーション内でログイン プロセスをトリガーします。攻撃者は認証応答を操作し、被害者のコードを (ID にバインドされた) 自分のコードに置き換えます。このコードは、クライアントによってアクセス トークンと交換されます。これは、リソース サーバーに関してオーディエンスが正しいため、ID API によって受け入れられます。しかし、ID API によって返される ID は、(被害者のコードに基づいて発行された) アクセス トークンの ID によって決定されるため、攻撃者は被害者の ID でターゲット アプリケーションにログインします。
影響: 攻撃者は、アプリケーションおよびアプリケーション内のユーザー固有のデータにアクセスできます。
対策:
すべてのクライアントは、アクセス トークンの承認コードを交換するすべての要求でクライアント ID を示す必要があります。認可サーバーは、特定の認可コードが特定のクライアントに発行されているかどうかを検証する必要があります。可能であれば、クライアントは事前に認証されます。
クライアントは、OpenID (cf. [openid]) や SAML (cf. [OASIS.sstc-saml-bindings-1.1]) などの適切なプロトコルを使用して、ユーザー ログインを実装する必要があります。どちらも、クライアントでの対象者の制限をサポートしています。
「攻撃者は、ターゲットのクライアント アプリケーションで使用されているのと同じ ID プロバイダーから、それぞれの被害者の有効な認証コードを収集する必要があります」。「それぞれの犠牲者」とは何ですか?「ID プロバイダー」は、この使用とその後の使用で何を意味しますか?
攻撃の説明全体が不明瞭です。「OAuth 2.0 を使用してユーザー ログインを実装するべきではない」と理解するようになりましたが、それは Facebook などの主要なプラットフォームが脆弱であるということではないでしょうか。そして、正確には何に対して脆弱ですか?
おそらく、この段落で使用されている用語のいくつかを明確にする必要があるだけです.