Cognito User Pools
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)
Пул користувачів - це каталог користувачів в Amazon Cognito. За допомогою пулу користувачів ваші користувачі можуть увійти до вашого веб- або мобільного додатку через Amazon Cognito, або федеративно через постачальника ідентичності (IdP). Незалежно від того, чи входять ваші користувачі безпосередньо або через третю сторону, всі члени пулу користувачів мають профіль каталогу, до якого ви можете отримати доступ через SDK.
Пули користувачів надають:
Послуги реєстрації та входу.
Вбудований, налаштовуваний веб-інтерфейс для входу користувачів.
Соціальний вхід через Facebook, Google, Login with Amazon та Sign in with Apple, а також через постачальників ідентичності SAML та OIDC з вашого пулу користувачів.
Управління каталогом користувачів та профілями користувачів.
Функції безпеки, такі як багатофакторна аутентифікація (MFA), перевірки на компрометовані облікові дані, захист від захоплення облікового запису та перевірка телефону та електронної пошти.
Налаштовані робочі процеси та міграція користувачів через тригери AWS Lambda.
Код джерела додатків зазвичай також міститиме ID пулу користувачів та ID клієнтського додатку, (а іноді і секрет додатку?), які потрібні для входу користувача до пулу користувачів Cognito.
Реєстрація: За замовчуванням користувач може зареєструватися самостійно, тому він може створити обліковий запис для себе.
Перерахування користувачів: Функціональність реєстрації може бути використана для знаходження імен користувачів, які вже існують. Ця інформація може бути корисною для атаки методом грубої сили.
Атака методом грубої сили на вхід: У розділі Аутентифікація ви маєте всі методи, які користувач має для входу, ви можете спробувати атакувати їх методом грубої сили, щоб знайти дійсні облікові дані.
Pacu, тепер включає модулі cognito__enum
та cognito__attack
, які автоматизують перерахування всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувачів, що використовуються для контролю доступу тощо, а також автоматизують створення користувачів (включаючи підтримку MFA) та ескалацію привілеїв на основі змінних атрибутів, що підлягають модифікації, використовуваних облікових даних пулу ідентичності, ролей, які можна прийняти в токенах ідентифікації тощо.
Для опису функцій модулів дивіться частину 2 блог-посту. Для інструкцій з установки дивіться основну сторінку Pacu.
Cognito Scanner - це інструмент CLI на python, який реалізує різні атаки на Cognito, включаючи небажане створення облікових записів та обліковий оракул. Перегляньте це посилання для отримання додаткової інформації.
CognitoAttributeEnum: Цей скрипт дозволяє перераховувати дійсні атрибути для користувачів.
User Pools дозволяє за замовчуванням реєструвати нових користувачів.
Ви можете знайти помилку, яка вказує на те, що вам потрібно надати більше деталей про користувача:
Ви можете надати необхідні деталі у форматі JSON, наприклад:
Ви також можете використовувати цю функціональність для перерахунку існуючих користувачів. Ось повідомлення про помилку, коли користувач вже існує з таким ім'ям:
Зверніть увагу в попередній команді, як кастомні атрибути починаються з "custom:". Також знайте, що при реєстрації ви не можете створити нові кастомні атрибути для користувача. Ви можете лише надати значення за замовчуванням атрибутам (навіть якщо вони не є обов'язковими) та кастомним атрибутам, що вказані.
Або просто, щоб перевірити, чи існує ідентифікатор клієнта. Це помилка, якщо ідентифікатор клієнта не існує:
Ви знайдете цю помилку і не зможете зареєструвати або перерахувати користувачів:
Cognito дозволяє перевірити нового користувача, підтвердивши його електронну пошту або номер телефону. Тому, при створенні користувача, зазвичай вам буде потрібно принаймні ім'я користувача та пароль, а також електронна пошта та/або номер телефону. Просто вкажіть один який ви контролюєте, щоб ви отримали код для підтвердження вашого новоствореного користувача акаунту ось так:
Навіть якщо здається, що ви можете використовувати ту ж електронну пошту та номер телефону, коли вам потрібно підтвердити створеного користувача, Cognito буде скаржитися на використання тієї ж інформації і не дозволить вам підтвердити обліковий запис.
За замовчуванням користувач може змінювати значення своїх атрибутів за допомогою чогось на зразок:
Ви можете знайти кастомні атрибути (такі як isAdmin
), оскільки за замовчуванням ви можете змінювати значення своїх власних атрибутів, ви можете підвищити привілеї, змінивши значення самостійно!
Ви можете використовувати це, щоб змінити електронну пошту та номер телефону користувача, але навіть якщо обліковий запис залишається перевіреним, ці атрибути встановлені в статус неперевіреного (вам потрібно перевірити їх знову).
Ви не зможете увійти за електронною поштою або номером телефону, поки не перевірите їх, але ви зможете увійти з іменем користувача.
Зверніть увагу, що навіть якщо електронна пошта була змінена і не перевірена, вона з'явиться в ID Token у полі email
і поле email_verified
буде false, але якщо додаток не перевіряє це, ви можете видавати себе за інших користувачів.
Крім того, зверніть увагу, що ви можете ввести будь-що в поле name
, просто змінивши атрибут імені. Якщо додаток перевіряє це поле з якоїсь причини замість email
(або будь-якого іншого атрибута), ви можете видавати себе за інших користувачів.
У будь-якому випадку, якщо з якоїсь причини ви змінили свою електронну пошту, наприклад, на нову, до якої маєте доступ, ви можете підтвердити електронну пошту за кодом, який ви отримали на цю електронну адресу:
Використовуйте phone_number
замість email
для зміни/перевірки нового номера телефону.
Адміністратор також може активувати опцію входу з бажаним ім'ям користувача. Зверніть увагу, що ви не зможете змінити це значення на будь-яке ім'я користувача або бажане_ім'я, яке вже використовується для видавання себе за іншого користувача.
Можливо відновити пароль, просто знаючи ім'я користувача (або приймається email або телефон), і маючи доступ до нього, оскільки код буде надіслано туди:
Відповідь сервера завжди буде позитивною, ніби ім'я користувача існує. Ви не можете використовувати цей метод для перерахунку користувачів
З кодом ви можете змінити пароль за допомогою:
Щоб змінити пароль, вам потрібно знати попередній пароль:
Пул користувачів підтримує різні способи аутентифікації. Якщо у вас є ім'я користувача та пароль, також підтримуються різні методи для входу. Більше того, коли користувач аутентифікований у пулі, надаються 3 типи токенів: ID токен, Access токен та Refresh токен.
ID токен: Він містить заяви про особу аутентифікованого користувача, такі як name
, email
та phone_number
. ID токен також можна використовувати для аутентифікації користувачів на ваших ресурсних серверах або серверних додатках. Ви повинні перевірити підпис ID токена, перш ніж довіряти будь-яким заявам всередині ID токена, якщо ви використовуєте його в зовнішніх додатках.
ID токен — це токен, який містить значення атрибутів користувача, навіть користувацьких.
Access токен: Він містить заяви про аутентифікованого користувача, список груп користувача та список обсягів. Мета Access токена — авторизувати API операції в контексті користувача в пулі користувачів. Наприклад, ви можете використовувати Access токен, щоб надати вашому користувачу доступ до додавання, зміни або видалення атрибутів користувача.
Refresh токен: За допомогою Refresh токенів ви можете отримувати нові ID токени та Access токени для користувача, поки Refresh токен не стане недійсним. За замовчуванням Refresh токен закінчує термін дії через 30 днів після того, як ваш користувач увійде до вашого пулу користувачів. Коли ви створюєте додаток для вашого пулу користувачів, ви можете встановити термін дії Refresh токена додатка на будь-яке значення від 60 хвилин до 10 років.
Це потік аутентифікації на стороні сервера:
Додаток на стороні сервера викликає AdminInitiateAuth
API операцію (замість InitiateAuth
). Ця операція вимагає облікові дані AWS з дозволами, які включають cognito-idp:AdminInitiateAuth
та cognito-idp:AdminRespondToAuthChallenge
. Операція повертає необхідні параметри аутентифікації.
Після того, як додаток на стороні сервера отримав параметри аутентифікації, він викликає AdminRespondToAuthChallenge
API операцію. API операція AdminRespondToAuthChallenge
успішна лише тоді, коли ви надаєте облікові дані AWS.
Цей метод НЕ активований за замовчуванням.
Щоб увійти, вам потрібно знати:
id пулу користувачів
id клієнта
ім'я користувача
пароль
секрет клієнта (тільки якщо додаток налаштовано на використання секрету)
Щоб мати можливість увійти за цим методом, цей додаток повинен дозволяти вхід з ALLOW_ADMIN_USER_PASSWORD_AUTH
.
Більше того, для виконання цієї дії вам потрібні облікові дані з дозволами cognito-idp:AdminInitiateAuth
та cognito-idp:AdminRespondToAuthChallenge