AWS - Cognito Privesc
Cognito
Cognitoに関する詳細情報は次をチェックしてください:
AWS - Cognito EnumIdentity Poolから資格情報を収集
Cognitoは認証済みおよび未認証のユーザーにIAMロール資格情報を付与できるため、アプリケーションのIdentity Pool ID(アプリケーションにハードコーディングされているはず)を特定すると、新しい資格情報を取得し、したがってprivesc(おそらく以前は資格情報を持っていなかったAWSアカウント内で)が可能です。
詳細はこのページをチェックしてください。
潜在的な影響: 認証されていないユーザーに関連付けられたサービスロールへの直接的なprivesc(おそらく認証されたユーザーに関連付けられたものも)。
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
この権限を持つと、Cognitoアプリの認証済み/未認証ユーザーに任意のCognitoロールを付与できます。
cognito-identity:update-identity-pool
cognito-identity:update-identity-pool
この権限を持つ攻撃者は、例えば、自分が制御するCognitoユーザープールや、ログインできる他のIDプロバイダーを設定することができます。その後、そのユーザープロバイダーにログインするだけで、Identity Pool内で構成された認証済みロールにアクセスできるようになります。
次のように、この権限を悪用して基本認証を許可することも可能です:
潜在的影響: アイデンティティプール内で構成された認証済みIAMロールを侵害する。
cognito-idp:AdminAddUserToGroup
cognito-idp:AdminAddUserToGroup
この権限は、CognitoユーザーをCognitoグループに追加することを許可します。したがって、攻撃者はこの権限を悪用して、自分の管理下のユーザーをより優れた権限や異なるIAMロールを持つ他のグループに追加することができます。
潜在的影響: 他のCognitoグループやユーザープールグループにアタッチされたIAMロールへの権限昇格。
(cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
これらの権限を持つ攻撃者は、すべてのIAMロールを作成/更新し、侵害されたCognito Identity Providerで使用できるIAMロールに侵害されたユーザーをグループの一部として作成することができ、これによりすべてのロールにアクセスできます:
潜在的影響: 他のCognito IAMロールへの権限昇格。
cognito-idp:AdminConfirmSignUp
cognito-idp:AdminConfirmSignUp
この権限はサインアップを確認することを可能にします。デフォルトでは誰でもCognitoアプリケーションにサインインできますが、それが残されている場合、ユーザーは任意のデータでアカウントを作成し、この権限で確認できます。
潜在的影響: 新しいユーザーを登録できる場合、認証済みユーザーのアイデンティティプールIAMロールへの間接的な昇格が可能になります。 任意のアカウントを確認できるため、他のアプリ機能への間接的な昇格も可能です。
cognito-idp:AdminCreateUser
cognito-idp:AdminCreateUser
この権限を持つと、攻撃者はユーザープール内に新しいユーザーを作成できます。 新しいユーザーは有効な状態で作成されますが、パスワードを変更する必要があります。
潜在的影響: 認証済みユーザーのアイデンティティプールIAMロールへの直接的な昇格。任意のユーザーを作成できるため、他のアプリ機能への間接的な昇格も可能です。
cognito-idp:AdminEnableUser
cognito-idp:AdminEnableUser
この権限は、無効になっているユーザーの資格情報を見つけた攻撃者が、そのユーザーを再度有効にする必要がある非常に限られたケースで役立ちます。
潜在的影響: 認証済みユーザーのアイデンティティプールIAMロールへの間接的な昇格と、攻撃者が無効化されたユーザーの資格情報を持っている場合のユーザーの権限への昇格。
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
この権限は、メソッド ADMIN_USER_PASSWORD_AUTH**を使用してログインすることを可能にします。**詳細についてはリンクを参照してください。
cognito-idp:AdminSetUserPassword
cognito-idp:AdminSetUserPassword
この権限により、攻撃者は任意のユーザーのパスワードを変更でき、MFAが有効になっていないユーザーをなりすませることができます。
潜在的影響: 潜在的に任意のユーザーへの直接権限昇格が可能であり、各ユーザーがメンバーであるすべてのグループへのアクセスおよびIdentity Pool認証済みIAMロールへのアクセスが可能です。
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: 攻撃者は、この権限を悪用して、自分がコントロールする携帯電話をユーザーのSMS MFAとして設定する可能性があります。
SetUserMFAPreference: 前述のものと同様に、この権限はユーザーのMFA設定を変更してMFA保護をバイパスするために使用できます。
SetUserPoolMfaConfig: 前述のものと同様に、この権限はユーザープールのMFA設定を変更してMFA保護をバイパスするために使用できます。
UpdateUserPool: ユーザープールを更新してMFAポリシーを変更することも可能です。こちらのcliを確認してください。
潜在的影響: 攻撃者が資格情報を知っている可能性のある任意のユーザーに間接的な権限昇格が可能であり、これによりMFA保護をバイパスすることができる可能性があります。
cognito-idp:AdminUpdateUserAttributes
cognito-idp:AdminUpdateUserAttributes
この権限を持つ攻撃者は、自分がコントロールするユーザーのメールアドレスや電話番号、または他の属性を変更して、基盤となるアプリケーションでより多くの特権を取得しようとすることができます。 これにより、メールアドレスや電話番号を変更して検証済みとして設定することができます。
潜在的影響: Cognitoユーザープールを使用して特権を与えるアプリケーション内の間接的な特権昇格の可能性。
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
この権限を持つ攻撃者は、既存のプールクライアントよりも制限の少ない新しいユーザープールクライアントを作成できます。たとえば、新しいクライアントは、任意の認証方法を許可し、秘密を持たず、トークンの取り消しを無効にし、トークンの有効期間を延長することができます...
同じことが、新しいクライアントを作成する代わりに、既存のクライアントを変更することで行うこともできます。
コマンドライン(または更新コマンド)では、すべてのオプションを確認できます。
潜在的影響: 新しいクライアントを作成することでセキュリティ対策を緩和し、攻撃者が作成できたユーザーでログインすることを可能にする、ユーザープールによって使用されるIdentity Poolの権限昇格への潜在的な間接的な昇格。
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
攻撃者はこの権限を悪用して、新しいユーザーを作成するために新しいユーザーのCSVをアップロードすることができます。
潜在的影響: 認証済みユーザーのアイデンティティプールIAMロールへの直接的な昇格。任意のユーザーを作成できるため、他のアプリ機能への間接的な昇格。
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
攻撃者は新しいアイデンティティプロバイダーを作成し、その後このプロバイダーを通じてログインできるようになる可能性があります。
潜在的影響: 認証済みユーザーのアイデンティティプールIAMロールへの直接権限昇格。任意のユーザーを作成できるため、他のアプリ機能への間接的な権限昇格。
cognito-sync:* 分析
これはCognito Identity Poolsのロールにデフォルトで設定されている非常に一般的な権限です。許可許可にワイルドカードが含まれている場合は常に悪い印象を与えますが(特にAWSから来た場合)、攻撃者の視点から見ても与えられた権限はあまり有用ではありません。
この権限により、Identity PoolsおよびIdentity Pools内のIdentity IDのユーザー情報を読み取ることができます(これは機密情報ではありません)。 Identity IDには、それらに割り当てられたDatasetsがあり、これはセッションの情報(AWSではセーブデータと定義されています)。これには機密情報が含まれる可能性がありますが、確率は非常に低いです。この情報にアクセスする方法については、列挙ページで見つけることができます。
攻撃者は、これらの権限を使用して、これらのデータセットに変更を公開するCognitoストリームに自分自身を登録したり、Cognitoイベントでトリガーされるラムダに登録することもできます。これが使用された例を見たことはありませんし、ここに機密情報が含まれていることを期待することはできませんが、不可能ではありません。
自動ツール
Pacu、AWSのエクスプロイテーションフレームワークには、現在、アカウント内のすべてのCognitoアセットの列挙を自動化し、弱い構成、アクセス制御に使用されるユーザー属性などをフラグ付けし、MFAサポートを含むユーザーの作成、変更可能なカスタム属性に基づく権限昇格、使用可能なアイデンティティプール資格情報、IDトークン内の仮定可能なロールなどを自動化する「cognito__enum」と「cognito__attack」モジュールが含まれています。
モジュールの機能の説明については、ブログ記事の第2部を参照してください。インストール手順については、メインのPacuページを参照してください。
使用方法
指定されたアイデンティティプールとユーザープールクライアントに対してユーザー作成を試行し、すべての権限昇格ベクトルに対するサンプルcognito__attackの使用例:
サンプルcognito__enumの使用方法を示します。現在のAWSアカウントで表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集します。
Cognito Scanner は、Cognito 上でさまざまな攻撃を実装する Python の CLI ツールであり、privesc エスカレーションも含まれています。
インストール
使用法
詳細はhttps://github.com/padok-team/cognito-scannerをチェックしてください。
Last updated