0Pricing
Cryptology Academy · レッスン

OAuthの脆弱性と攻撃パターン

リダイレクトURIの改ざん、認可エンドポイントに対するCSRF、トークン漏洩の脆弱性について学習します。

「OAuthの脆弱性と攻撃パターン」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

redirect_uriにおけるオープンリダイレクト

OAuth認可サーバーは、redirect_uriパラメーターを厳密に検証する必要があります。サーバーが前方一致やワイルドカード一致を許可すると(たとえば「https://app.example.com」で始まる任意のURLを受け入れる場合)、攻撃者は「https://app.example.com.attacker.com/steal」や、正規のドメイン上にあるオープンリダイレクトへリダイレクトする認可リクエストを作成し、認可コードを盗むことができます。

認可エンドポイントに対するCSRF

CSRF対策がない場合、攻撃者はOAuthフローを開始し、被害者のブラウザーをだまして認可を完了させることができます。被害者は意図せず攻撃者のクライアントを認可してしまいます。「state」パラメーター(RFC 6749)はこれを防ぎます。クライアントがランダムなstateを生成してリクエストに含め、コールバックで一致することを検証します。一致しなければフローを中止します。

認可コードのインターセプト

モバイルプラットフォームでは、悪意のあるアプリが正規のOAuthクライアントと同じカスタムURIスキームを登録し、ユーザー認証後にリダイレクトされた認可コードをインターセプトする可能性があります。PKCE(RFC 7636)が完全な防御策となります。インターセプトされたコードは、フローの開始時に正規のアプリだけが生成したコード検証子がなければ利用できません。

Refererヘッダーによるトークン漏えい

IDトークンやアクセストークンがURLフラグメントまたはクエリパラメーターに含まれていると、そのページから以降のページへ移動する際にURLがRefererヘッダーに含まれ、サードパーティの分析スクリプトやCDNプロバイダーにトークンが漏えいする可能性があります。トークンがURLに現れないように、必ず認可コードフローとバックチャネルでのトークン配信を使用してください。

複数プロバイダー構成におけるミックスアップ攻撃

クライアントが複数のOAuthプロバイダーに対応している場合、ミックスアップ攻撃によって、Provider Aから取得した認可コードをProvider Bのトークンエンドポイントに送信させられる可能性があります。クライアントは、IDトークンの「iss」クレームを検証し、stateパラメーターまたはJARM(JWT-Secured Authorization Response Mode)を使って、コールバックをフローを開始した特定のプロバイダーに結び付ける必要があります。

redirect_uriを介したSSRF

サーバーサイドリクエストフォージェリ(SSRF)攻撃は、redirect_uriに対してサーバー側のHTTPリクエストを行うOAuth実装を標的にします。認可サーバーが検証のためにredirect_uriを取得する場合、攻撃者は内部IPアドレス(たとえば http://169.254.169.254/latest/meta-data/)を指定し、クラウドインスタンスのメタデータや内部サービスにアクセスできます。厳密な許可リスト方式でredirect_uriを検証すれば、この攻撃を防止できます。

メールクレームの衝突によるアカウント乗っ取り

多くのアプリケーションは、OIDC IDトークンのemailクレームを使ってプロバイダー間のアカウントを関連付けています。攻撃者が、別のプロバイダーにある被害者のアカウントと一致するメールアドレスを管理している場合、そのメールアドレスを使って別のプロバイダーに登録し、被害者のアカウントにアクセスできる可能性があります。対策は、メールアドレスだけでなく、(iss、sub)の組み合わせだけでアカウントを関連付けることです。

JWTアルゴリズム混同

JWTアルゴリズム混同攻撃は、「alg」ヘッダーを信頼して検証アルゴリズムを選択する実装の弱点を悪用します。攻撃では、「alg」を「RS256」から「HS256」に変更し、サーバーの公開鍵をHMACの秘密鍵としてトークンに署名します(公開鍵は公開されているためです)。対策として、検証コードで想定するアルゴリズムを必ず明示し、トークンヘッダーのalgクレームを決して信頼しないでください。

同意画面の偽装によるOAuthフィッシング

攻撃者は、正規アプリに見える名前とロゴで悪意のあるOAuthクライアントを登録し、標的にフィッシングリンクを送ります。被害者には、悪意のあるアプリケーションに対する本物のOAuth同意画面(GoogleやMicrosoftなどがホストするもの)が表示され、アクセスを許可してしまいます。対策として、client_idが想定するアプリケーションに対応していることを確認してください。GoogleとMicrosoftは、正規アプリ向けにクライアント検証プログラムを提供しています。

スコープエスカレーション攻撃

スコープエスカレーションは、クライアントがユーザーの認可した範囲を超える、より広い権限を持つトークンを取得したときに発生します。トークンエンドポイントでのスコープ検証を省略すること、異なるリクエストのスコープを統合してトークンをキャッシュすること、発行したトークンのスコープが認可されたスコープを超えていないことを検証しないことなどの実装上の欠陥は、OAuthを介した権限昇格につながる可能性があります。

セキュリティのベストプラクティスのまとめ

OAuth実装を防御するには、redirect_uriを完全一致で検証し、すべてのパブリッククライアントにPKCEを要求し、CSRF対策としてstateパラメーターを検証し、IDトークンをメールアドレスではなく(iss、sub)で結び付け、想定するJWTアルゴリズムを明示し、最小限のスコープを要求し、短期間で期限切れになるアクセストークンとリフレッシュトークンローテーションを使用し、ブランド偽装のリスクがないか同意画面の表示を監査します。

OAuth redirect_uriの確認

OAuth認可サーバーが、「https://app.example.com」で始まるredirect_uriをすべて受け入れるとします。これによって、どのような攻撃が可能になりますか?

レッスンのまとめ:OAuthの攻撃パターン

主なOAuth攻撃には、redirect_uriの検証が緩いことによるオープンリダイレクト(完全一致を使用)、stateパラメーターの欠如によるCSRF、モバイルでのコードインターセプト(PKCEで緩和)、URL内のトークン漏えい、複数プロバイダー構成でのミックスアップ(issを検証)、サーバーが取得したredirect_uriを介したSSRF、メールクレームの衝突(iss+subを使用)、JWTアルゴリズム混同(想定するalgを固定)、偽の同意画面によるフィッシングがあります。

よくある質問

「OAuthの脆弱性と攻撃パターン」レッスンは無料ですか?

はい。「OAuthの脆弱性と攻撃パターン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「OAuthの脆弱性と攻撃パターン」で何を学びますか?

リダイレクトURIの改ざん、認可エンドポイントに対するCSRF、トークン漏洩の脆弱性について学習します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「OAuthの脆弱性と攻撃パターン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. OAuth 2.0のフローとトークンの種類
  2. PKCE:パブリッククライアントの保護
  3. OpenID ConnectのクレームとIDトークン
  4. OAuthの脆弱性と攻撃パターン
← Cryptology Academyに戻る