Open2
RFC 9207 OAuth 2.0 Authorization Server Issuer Identification
RFC 9207 - OAuth 2.0 Authorization Server Issuer Identification
本仕様は arXiv.1601.01229 や OAuth 2.0 Security Best Current Practice [1] に記載されている攻撃である IdP Mix-Up Attacks への対策として導入されたものであるから、まずはこの攻撃についてまとめる。
IdP Mix-Up Attacks
この攻撃は以下を前提条件とする
- クライアントは認可コードフローまたはインプリシットフローを利用している
- クライアントは複数の認可サーバーに登録しており、そのうちの一つが攻撃者の管理下にある
- 攻撃者の認可サーバーを
A-AS
(Attacker Authorization Server)、その他の認可サーバーをH-HS
(Honest Authorization Server) とする
- 攻撃者の認可サーバーを
- クライアントは認可エンドポイントで指定するリダイレクト URI を複数の認可サーバーで共通なものにしており、認可コードやアクセストークンを発行した認可サーバーの区別は state パラメータやクライアントがブラウザとの間に作るセッションによって行う
このとき、攻撃者は以下の方法で H-AS の発行した認可コードやアクセストークンを取得することができる。
肝はシーケンス図の 2 の時点でブラウザと A-AS の間のセッションが作られているので、6 でクライアントは受け取った認可コードやアクセストークンを H-AS ではなく A-AS 由来のものと誤認してしまうことである。よってクライアントは 7 でこれらを A-AS に送信してしまい、攻撃者による取得が成功する。
-
2024-05-12 時点でドラフト ↩︎
iss
パラメータ
認可レスポンスの IdP Mix-Up Attacks への対応として、認可レスポンス (リダイレクト URI へのリダイレクト) にパラメータ iss
で issuer (OAuth 2.0 Authorization Server Metadata [1] で定められたもの) を返却する。
クライアントはリダイレクト URI で受け取った iss
パラメータが、認可エンドポイントのリクエスト先の issuer と一致していることを確認すれば良い。
以下は Section 2.1 に記載の認可レスポンスの例である
HTTP/1.1 302 Found
Location: https://client.example/cb?
code=x1848ZT64p4IirMPT0R-X3141MFPTuBX-VFL_cvaplMH58
&state=ZWVlNDBlYzA1NjdkMDNhYjg3ZjUxZjAyNGQzMTM2NzI
&iss=https%3A%2F%2Fhonest.as.example
以下は Section 2.2 に記載のエラーレスポンスの例である
HTTP/1.1 302 Found
Location: https://client.example/cb?
error=access_denied
&state=N2JjNGJhY2JiZjRhYzA3MGJkMzNmMDE5OWJhZmJhZjA
&iss=https%3A%2F%2Fhonest.as.example