Mix-Up攻撃の概要
OAuthにおけるMix-Up攻撃とは、Clientが複数のIdPに対応している際に起こり得る、IdPを混同させる攻撃で、
IdPの正当な認可コードが攻撃者のIdPに窃取されるという攻撃です。
攻撃の流れ
登場人物
- ユーザー
- Client
- 攻撃者のIdP(攻IdP)
- 正当なIdP(正IdP)
認可コードフローを前提とします。
ユーザーがIdPとして攻撃者のIdPを選択したとします。Clientはユーザーが攻IdPを使っていると認識します。
ユーザーが攻IdPに認可リクエストを送るときに、攻IdPはログイン画面を表示せずに正当なIdPへのリダイレクトを返します。
正IdPにリダイレクトされたユーザーが正IdPでログイン・認可手続きを完了します。このとき正IdPの認可コードとリダイレクトレスポンスが発行されます。
Clientは攻IdPを利用している認識なので、正IdPから受け取った認可コードを攻IdPのトークンエンドポイントへと送ってしまいます。
Mix-Up攻撃の防ぎ方
認可レスポンスにissパラメータを追加することによって防ぎます。
IdPサーバーは以下のレスポンスサンプルのように認可レスポンスにissパラメータを含めます。
クライアントはこの値を読み取り、通信先とissを比較することで通信中の認可エンドポイントと認可コード発行者が同一であるかを確認します。
以下の例では認可サーバーhttps://honest.as.exampleからの応答を示しています。
HTTP/1.1 302 Found
Location: https://client.example/cb?
code=x1848ZT64p4IirMPT0R-X3141MFPTuBX-VFL_cvaplMH58
&state=ZWVlNDBlYzA1NjdkMDNhYjg3ZjUxZjAyNGQzMTM2NzI
&iss=https%3A%2F%2Fhonest.as.example
フロー図
issによる確認を入れることでフローの後半が改善され、攻撃者に認可コードが渡ることが防がれます。
まとめ
Mix-Up攻撃とは攻撃者がIdPを用意し、攻撃者のIdPと正当なIdPを混同させることで認可コードを窃取する攻撃です。
攻撃者は認可フローの途中で正当なIdPへリダイレクトさせ、最終的に発行された認可コードを攻撃者のIdPへ送らせることで認可コードを奪います。
対策として、認可レスポンスに含まれるissパラメータを検証し、認可コードの発行元と通信先が一致することを確認することで防ぐことができます。