# AWS - Cognito 未認証列挙

{{#include ../../../../banners/hacktricks-training.md}}

## 未認証の Cognito

Cognito は、開発者が **アプリのユーザーに AWS サービスへのアクセスを付与** できる AWS のサービスです。開発者はアプリ内で **認証済みユーザーに IAM ロールを付与** します（場合によってはユーザーが単にサインアップできることもあります）。また、**未認証ユーザーに IAM ロールを付与** することも可能です。

For basic info about Cognito check:

{{#ref}}
../../aws-services/aws-cognito-enum/
{{#endref}}

### Identity Pool ID

Identity Pools は、**Identity Pool ID** をただ知っているだけの **未認証ユーザーに IAM ロールを付与** することがあり（Identity Pool ID は比較的見つけやすいことが多い）、攻撃者はこの情報を使って当該 **IAM ロールにアクセス** したり悪用したりする可能性があります。さらに、IAM ロールは Identity Pool にアクセスする **認証済みユーザー** にも割り当てられることがあります。攻撃者が **ユーザーを登録できる**、あるいは既にその Identity Pool で使われている **identity provider へのアクセス** を持っている場合、**認証済みユーザーに与えられる IAM ロール** にアクセスして権限を乱用できる可能性があります。

[**詳しい方法はここを参照してください**](../../aws-services/aws-cognito-enum/cognito-identity-pools.md).

### User Pool ID

デフォルトで Cognito は **新しいユーザーの登録を許可** します。ユーザーを登録できることにより、**基盤となるアプリケーションへのアクセス** や、Cognito User Pool を identity provider として受け入れている Identity Pool の **認証済み IAM アクセスロール** に対するアクセスを得られる可能性があります。 [**詳しい方法はここを参照してください**](../../aws-services/aws-cognito-enum/cognito-user-pools.md#registration).

### Pacu modules for pentesting and enumeration

Pacu (https://github.com/RhinoSecurityLabs/pacu)、AWS の攻撃フレームワークは現在 "cognito__enum" と "cognito__attack" モジュールを含んでおり、アカウント内のすべての Cognito アセットの列挙を自動化し、弱い設定、アクセス制御に使われるユーザー属性などを検出します。また、ユーザー作成（MFA サポートを含む）や、変更可能なカスタム属性、利用可能な identity pool の資格情報、id トークンでアサイン可能なロールなどに基づく権限昇格を自動化します。

モジュールの機能の説明は [blog post](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) のパート2を参照してください。インストール手順はメインの [Pacu](https://github.com/RhinoSecurityLabs/pacu) ページを参照してください。

#### 使用方法

指定した identity pool と user pool client に対してユーザー作成と全ての privesc ベクトルを試行するサンプル `cognito__attack` の使い方:
```bash
Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX
```
現在の AWS アカウントに表示されるすべてのユーザープール、ユーザープールクライアント、アイデンティティプール、ユーザーなどを収集するための cognito\_\_enum の使用例:
```bash
Pacu (new:test) > run cognito__enum
```
{{#include ../../../../banners/hacktricks-training.md}}
