AWS - Cognito Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Для отримання додаткової інформації про Cognito перегляньте:
Оскільки Cognito може надавати облікові дані IAM ролі як авторизованим, так і неавторизованим користувачам, якщо ви знайдете ID Identity Pool програми (повинен бути закодований в ній), ви можете отримати нові облікові дані і, отже, privesc (всередині облікового запису AWS, де ви, ймовірно, раніше не мали жодних облікових даних).
Для отримання додаткової інформації перегляньте цю сторінку.
Потенційний вплив: Прямий privesc до ролі сервісу, прикріпленої до неавторизованих користувачів (і, ймовірно, до тієї, що прикріплена до авторизованих користувачів).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
З цим дозволом ви можете надавати будь-яку роль cognito авторизованим/неавторизованим користувачам програми cognito.
Якщо додаток cognito не має увімкнених неавтентифікованих користувачів, вам також може знадобитися дозвіл cognito-identity:UpdateIdentityPool
, щоб увімкнути його.
Потенційний вплив: Пряме підвищення привілеїв до будь-якої ролі cognito.
cognito-identity:update-identity-pool
Зловмисник з цим дозволом міг би, наприклад, налаштувати підконтрольний йому Cognito User Pool або будь-який інший постачальник ідентичності, де він може увійти, як спосіб доступу до цього Cognito Identity Pool. Тоді просто вхід на цьому постачальнику користувачів дозволить йому отримати доступ до налаштованої автентифікованої ролі в Identity Pool.
Цю дозволу також можна зловживати для дозволу базової аутентифікації:
Потенційний вплив: Компрометація налаштованої аутентифікованої IAM ролі всередині пулу ідентичностей.
cognito-idp:AdminAddUserToGroup
Ця дозволена дія дозволяє додати користувача Cognito до групи Cognito, тому зловмисник може зловживати цим дозволом, щоб додати користувача під своїм контролем до інших груп з кращими привілеями або іншими IAM ролями:
Потенційний вплив: Привілейоване підвищення до інших груп Cognito та IAM ролей, прикріплених до груп користувачів.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
Зловмисник з цими дозволами може створювати/оновлювати групи з кожною IAM роллю, яка може бути використана скомпрометованим постачальником ідентичності Cognito і зробити скомпрометованого користувача частиною групи, отримуючи доступ до всіх цих ролей:
Потенційний вплив: Privesc до інших ролей IAM Cognito.
cognito-idp:AdminConfirmSignUp
Ця дозволяє підтвердити реєстрацію. За замовчуванням будь-хто може увійти в програми Cognito, якщо це залишити, користувач може створити обліковий запис з будь-якими даними та підтвердити його за допомогою цього дозволу.
Потенційний вплив: Непряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів, якщо ви можете зареєструвати нового користувача. Непряме підвищення привілеїв до інших функцій програми, маючи можливість підтвердити будь-який обліковий запис.
cognito-idp:AdminCreateUser
Ця дозволена дія дозволить зловмиснику створити нового користувача в пулі користувачів. Новий користувач створюється як активний, але повинен буде змінити свій пароль.
Потенційний вплив: Пряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів. Непряме підвищення привілеїв до інших функцій програми, що дозволяє створювати будь-якого користувача.
cognito-idp:AdminEnableUser
Ці дозволи можуть допомогти в дуже крайніх випадках, коли зловмисник знайшов облікові дані вимкненого користувача і йому потрібно включити його знову.
Потенційний вплив: Непряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів та дозволів користувача, якщо зловмисник мав облікові дані для деактивованого користувача.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Цей дозвіл дозволяє увійти за допомогою методу ADMIN_USER_PASSWORD_AUTH. Для отримання додаткової інформації перейдіть за посиланням.
cognito-idp:AdminSetUserPassword
Цей дозвіл дозволить зловмиснику змінити пароль будь-якого користувача, що дозволить йому видавати себе за будь-якого користувача (який не має увімкненої MFA).
Потенційний вплив: Пряме підвищення привілеїв до потенційно будь-якого користувача, отже доступ до всіх груп, членом яких є кожен користувач, та доступ до аутентифікованої IAM ролі Identity Pool.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: Зловмисник може потенційно зловживати цим дозволом, щоб встановити мобільний телефон під своїм контролем як SMS MFA користувача.
SetUserMFAPreference: Схоже на попереднє, ця дозволена дія може бути використана для налаштування переваг MFA користувача, щоб обійти захист MFA.
SetUserPoolMfaConfig: Схоже на попереднє, ця дозволена дія може бути використана для налаштування переваг MFA користувацького пулу, щоб обійти захист MFA.
UpdateUserPool: Також можливо оновити пул користувачів, щоб змінити політику MFA. Перевірте cli тут.
Potential Impact: Непряме підвищення привілеїв до потенційно будь-якого користувача, облікові дані якого відомі атакуючому, це може дозволити обійти захист MFA.
cognito-idp:AdminUpdateUserAttributes
Атакуючий з цим дозволом може змінити електронну пошту або номер телефону або будь-який інший атрибут користувача під його контролем, щоб спробувати отримати більше привілеїв в основному додатку. Це дозволяє змінити електронну пошту або номер телефону та встановити його як перевірений.
Потенційний вплив: Потенційний непрямий підвищення привілеїв в основному застосунку, що використовує Cognito User Pool, який надає привілеї на основі атрибутів користувача.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
Зловмисник з цим дозволом може створити новий User Pool Client менш обмежений, ніж вже існуючі клієнти пулу. Наприклад, новий клієнт може дозволити будь-який метод аутентифікації, не мати жодного секрету, мати вимкнене відкликання токенів, дозволяти токени бути дійсними протягом більш тривалого періоду...
Те ж саме можна зробити, якщо замість створення нового клієнта, модифікується існуючий.
В командному рядку (або оновленому) ви можете побачити всі опції, перевірте це!.
Потенційний вплив: Потенційний непрямий privesc до авторизованого користувача Identity Pool, використаного User Pool, шляхом створення нового клієнта, який послаблює заходи безпеки і дозволяє зловмиснику увійти з користувачем, якого він зміг створити.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
Зловмисник може зловживати цим дозволом для створення користувачів, завантажуючи csv з новими користувачами.
(У випадку, якщо ви створюєте нову задачу імпорту, вам також може знадобитися дозвіл iam passrole, я ще не тестував це).
Потенційний вплив: Пряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів. Непряме підвищення привілеїв до інших функцій програми, що дозволяє створювати будь-якого користувача.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
Зловмисник може створити нового постачальника ідентичностей, щоб потім мати можливість увійти через цього постачальника.
Potential Impact: Пряме підвищення привілеїв до IAM ролі пулу ідентичностей для автентифікованих користувачів. Непряме підвищення привілеїв до інших функцій програми, що дозволяє створювати будь-якого користувача.
Це дуже поширений дозвіл за замовчуванням у ролях пулів ідентичностей Cognito. Навіть якщо символ підстановки в дозволах завжди виглядає погано (особливо з AWS), надані дозволи не є надто корисними з точки зору атакуючого.
Цей дозвіл дозволяє читати інформацію про використання пулів ідентичностей та ідентифікатори ідентичностей всередині пулів ідентичностей (що не є чутливою інформацією). Ідентифікатори ідентичностей можуть мати Datasets, які містять інформацію про сесії (AWS визначає це як збережену гру). Можливо, що це містить якийсь вид чутливої інформації (але ймовірність цього досить низька). Ви можете знайти на сторінці перерахування як отримати доступ до цієї інформації.
Атакуючий також може використовувати ці дозволи, щоб зареєструватися на потік Cognito, який публікує зміни в цих датасетах або lambda, яка спрацьовує на події cognito. Я не бачив, щоб це використовувалося, і не очікував би чутливої інформації тут, але це не неможливо.
Pacu, фреймворк експлуатації AWS, тепер включає модулі "cognito__enum" та "cognito__attack", які автоматизують перерахування всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувачів, що використовуються для контролю доступу тощо, а також автоматизують створення користувачів (включаючи підтримку MFA) та підвищення привілеїв на основі змінних атрибутів, що підлягають модифікації, використовуваних облікових даних пулу ідентичностей, ролей, які можна прийняти в токенах ідентичності тощо.
Для опису функцій модулів дивіться частину 2 блог-посту. Для інструкцій з установки дивіться основну сторінку Pacu.
Приклад використання cognito__attack для спроби створення користувача та всіх векторів підвищення привілеїв проти даного пулу ідентичностей та клієнта пулу користувачів:
Приклад використання cognito__enum для збору всіх пулів користувачів, клієнтів пулів користувачів, пулів ідентичності, користувачів тощо, видимих у поточному обліковому записі AWS:
Cognito Scanner - це інструмент CLI на python, який реалізує різні атаки на Cognito, включаючи ескалацію привілеїв.
Для отримання додаткової інформації перегляньте https://github.com/padok-team/cognito-scanner
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)