Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-

This commit is contained in:
Translator
2025-01-26 14:51:47 +00:00
parent b94a614d66
commit 4b53fcadf6
3 changed files with 35 additions and 35 deletions

View File

@@ -2,9 +2,9 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Основна інформація
## Basic Information
Identity pools відіграють важливу роль, дозволяючи вашим користувачам **отримувати тимчасові облікові дані**. Ці облікові дані є необхідними для доступу до різних AWS сервісів, включаючи, але не обмежуючись, Amazon S3 та DynamoDB. Помітною особливістю identity pools є їх підтримка як анонімних гостьових користувачів, так і різноманітних постачальників ідентичності для аутентифікації користувачів. Підтримувані постачальники ідентичності включають:
Identity pools виконують важливу роль, дозволяючи вашим користувачам **отримувати тимчасові облікові дані**. Ці облікові дані є необхідними для доступу до різних AWS сервісів, включаючи, але не обмежуючись, Amazon S3 та DynamoDB. Помітною особливістю identity pools є їх підтримка як анонімних гостьових користувачів, так і різноманітних постачальників ідентичності для аутентифікації користувачів. Підтримувані постачальники ідентичності включають:
- Amazon Cognito user pools
- Соціальні варіанти входу, такі як Facebook, Google, Login with Amazon та Sign in with Apple
@@ -35,7 +35,7 @@ print(response)
```
### Cognito Sync
Щоб згенерувати сесії Identity Pool, спочатку потрібно **згенерувати ідентифікатор Identity ID**. Цей ідентифікатор Identity ID є **ідентифікацією сесії цього користувача**. Ці ідентифікації можуть мати до 20 наборів даних, які можуть зберігати до 1MB пар ключ-значення.
Щоб згенерувати сесії Identity Pool, спочатку потрібно **згенерувати ідентифікатор Identity ID**. Цей ідентифікатор є **ідентифікацією сесії цього користувача**. Ці ідентифікації можуть мати до 20 наборів даних, які можуть зберігати до 1 МБ пар ключ-значення.
Це **корисно для збереження інформації про користувача** (який завжди буде використовувати один і той же ідентифікатор Identity ID).
@@ -43,7 +43,7 @@ print(response)
### Tools for pentesting
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), фреймворк експлуатації AWS, тепер включає модулі "cognito\_\_enum" та "cognito\_\_attack", які автоматизують перерахування всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувачів, що використовуються для контролю доступу тощо, а також автоматизують створення користувачів (включаючи підтримку MFA) та ескалацію привілеїв на основі змінних користувацьких атрибутів, використовуваних облікових даних пулу ідентичностей, ролей, які можна прийняти в токенах ідентифікації тощо.
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), фреймворк експлуатації AWS, тепер включає модулі "cognito\_\_enum" та "cognito\_\_attack", які автоматизують перерахування всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувачів, що використовуються для контролю доступу тощо, а також автоматизують створення користувачів (включаючи підтримку MFA) та ескалацію привілеїв на основі змінних атрибутів, що підлягають модифікації, використовуваних облікових даних пулу ідентичностей, ролей, які можна прийняти в токенах ідентифікації тощо.
Для опису функцій модулів дивіться частину 2 [блог-посту](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Для інструкцій з установки дивіться основну сторінку [Pacu](https://github.com/RhinoSecurityLabs/pacu).
@@ -73,14 +73,14 @@ $ cognito-scanner --help
## Доступ до IAM ролей
### Неавтентифікований
### Неавтентифіковані
Єдине, що потрібно зловмиснику, щоб **отримати AWS облікові дані** в додатку Cognito як неавтентифікованому користувачу, це **ID пулу ідентичності**, і цей **ID повинен бути закодований** в веб/мобільному **додатку** для його використання. ID виглядає так: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (його не можна зламати методом перебору).
Єдине, що атакуючий повинен знати, щоб **отримати AWS облікові дані** в додатку Cognito як неавтентифікований користувач, це **ID пулу ідентичності**, і цей **ID повинен бути закодований** в веб/мобільному **додатку** для його використання. ID виглядає так: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (його не можна зламати методом перебору).
> [!TIP]
> **IAM роль Cognito для неавтентифікованих користувачів, створена через**, за замовчуванням називається `Cognito_<Назва пулу ідентичності>Unauth_Role`
Якщо ви знайдете ID пулу ідентичності, закодований в додатку, і він дозволяє неавтентифікованим користувачам, ви можете отримати AWS облікові дані за допомогою:
Якщо ви знайдете ID пулу ідентичності, закодований у коді, і він дозволяє неавтентифікованим користувачам, ви можете отримати AWS облікові дані за допомогою:
```python
import requests
@@ -114,9 +114,9 @@ aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --
> [!WARNING]
> Зверніть увагу, що за замовчуванням неавтентифікований cognito **користувач НЕ МОЖЕ мати жодних дозволів, навіть якщо вони були призначені через політику**. Перевірте наступний розділ.
### Покращений vs Базовий потік автентифікації
### Розширений vs Базовий потік автентифікації
Попередній розділ слідував **за замовчуванням покращеному потоку автентифікації**. Цей потік встановлює **обмежувальну** [**політику сесії**](../../aws-basic-information/#session-policies) для сесії ролі IAM, що генерується. Ця політика дозволить сесії [**використовувати послуги з цього списку**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (навіть якщо роль мала доступ до інших послуг).
Попередній розділ слідував **за замовчуванням розширеному потоку автентифікації**. Цей потік встановлює **обмежувальну** [**політику сесії**](../../aws-basic-information/index.html#session-policies) для сесії ролі IAM, що генерується. Ця політика дозволить сесії лише [**використовувати послуги з цього списку**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (навіть якщо роль мала доступ до інших послуг).
Однак є спосіб обійти це, якщо **Ідентифікаційний пул має увімкнений "Базовий (Класичний) Потік"**, користувач зможе отримати сесію, використовуючи цей потік, який **не матиме цієї обмежувальної політики сесії**.
```bash
@@ -135,7 +135,7 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.`
Маючи набір облікових даних IAM, вам слід перевірити [які права ви маєте](../../#whoami) і спробувати [підвищити привілеї](../../aws-privilege-escalation/).
Маючи набір облікових даних IAM, вам слід перевірити [які права ви маєте](../../index.html#whoami) і спробувати [підвищити привілеї](../../aws-privilege-escalation/index.html).
### Аутентифіковані
@@ -147,29 +147,29 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
Для цього вам може знадобитися доступ до **постачальника ідентичності**. Якщо це **Cognito User Pool**, можливо, ви зможете зловживати стандартною поведінкою і **створити нового користувача самостійно**.
> [!TIP]
> **IAM роль Cognito, створена через**, за замовчуванням називається `Cognito_<Identity Pool name>Auth_Role`
> **IAM роль Cognito, створена через**, за замовчуванням називається `Cognito_<Ім'я Identity Pool>Auth_Role`
У будь-якому випадку, **наступний приклад** передбачає, що ви вже увійшли в **Cognito User Pool**, який використовується для доступу до Identity Pool (не забувайте, що також можуть бути налаштовані інші типи постачальників ідентичності).
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
--identity-pool-id &#x3C;identity_pool_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-pool-id <identity_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# Отримайте identity_id з відповіді попередньої команди
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# У IdToken ви можете знайти ролі, до яких має доступ користувач через групи User Pool
# Використовуйте --custom-role-arn, щоб отримати облікові дані для конкретної ролі
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
<strong> --custom-role-arn &#x3C;role_arn> \
</strong> --logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
<strong> --custom-role-arn <role_arn> \
</strong> --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
</code></pre>
> [!WARNING]
> Можливо **налаштувати різні ролі IAM в залежності від постачальника ідентичності**, під яким користувач увійшов, або навіть просто в залежності **від користувача** (використовуючи претензії). Тому, якщо у вас є доступ до різних користувачів через одного або різних постачальників, можливо, **варто увійти та отримати доступ до ролей IAM всіх з них**.
> Можливо **налаштувати різні IAM ролі в залежності від постачальника ідентичності**, під яким користувач увійшов, або навіть просто в залежності **від користувача** (використовуючи заяви). Тому, якщо у вас є доступ до різних користувачів через одного або різних постачальників, можливо, **варто увійти і отримати доступ до IAM ролей усіх з них**.
{{#include ../../../../banners/hacktricks-training.md}}