Cognito Identity Pools
Основна інформація
Пули ідентичності відіграють важливу роль, дозволяючи вашим користувачам отримувати тимчасові облікові дані. Ці облікові дані є необхідними для доступу до різних служб AWS, включаючи, але не обмежуючись Amazon S3 та DynamoDB. Важливою особливістю пулів ідентичності є підтримка як анонімних гостевих користувачів, так і ряду постачальників ідентичності для аутентифікації користувачів. Підтримувані постачальники ідентичності включають:
Пули користувачів Amazon Cognito
Соціальні опції входу, такі як Facebook, Google, Увійти за допомогою Amazon та Увійти за допомогою Apple
Постачальники, що відповідають вимогам OpenID Connect (OIDC)
Постачальники ідентичності SAML (Security Assertion Markup Language)
Підтверджені розробником ідентичності
Cognito Sync
Для генерації сеансів пулу ідентифікації спочатку потрібно створити ідентифікатор ідентичності. Цей ідентифікатор ідентичності є ідентифікацією сеансу цього користувача. Ці ідентифікації можуть містити до 20 наборів даних, в яких можна зберігати до 1 МБ пар ключ-значення.
Це корисно для збереження інформації про користувача (який завжди буде використовувати той самий ідентифікатор ідентичності).
Крім того, служба cognito-sync - це служба, яка дозволяє керувати та синхронізувати цю інформацію (у наборах даних, надсилаючи інформацію в потоки та повідомлення SNS...).
Інструменти для пентесту
Pacu, фреймворк експлуатації AWS, тепер включає модулі "cognito__enum" та "cognito__attack", які автоматизують перелік всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувача, використані для контролю доступу тощо, а також автоматизують створення користувача (включаючи підтримку MFA) та підвищення привілеїв на основі змінних користувацьких атрибутів, використовуваних облікових даних пулу ідентичності, ролей, які можна припускати в ідентифікаційних токенах тощо.
Для опису функцій модулів див. частину 2 посту в блозі. Інструкції щодо установки див. на головній сторінці Pacu.
Використання
Приклад використання атаки cognito__attack для спроби створення користувача та всіх векторів підвищення привілеїв проти заданого пулу ідентичності та клієнта пулу користувачів:
Приклад використання cognito__enum для збору всіх пулів користувачів, клієнтів пулу користувачів, пулів ідентичності, користувачів тощо, які видно в поточному обліковому записі AWS:
Cognito Scanner - це інструмент командного рядка на python, який реалізує різні атаки на Cognito, включаючи небажане створення облікового запису та ескалацію пулу ідентифікації.
Встановлення
Використання
Для отримання додаткової інформації перевірте https://github.com/padok-team/cognito-scanner
Отримання ролей IAM
Неаутентифікований
Єдине, що потрібно знати зловмиснику для отримання облікових даних AWS в додатку Cognito як неаутентифікованому користувачу, це ID пула ідентифікації, і цей ID повинен бути захардкоджений в веб- / мобільному додатку, щоб використовувати його. ID виглядає наступним чином: eu-west-1:098e5341-8364-038d-16de-1865e435da3b
(його неможливо перебрати).
Роль IAM Cognito для неаутентифікованих користувачів, створена за допомогою, за замовчуванням називається Cognito_<Ім'я пула ідентифікації>Unauth_Role
Якщо ви знаходите захардкоджений ID пулів ідентифікації, який дозволяє неаутентифікованим користувачам, ви можете отримати облікові дані AWS за допомогою:
Або ви можете використати наступні команди aws cli:
Зверніть увагу, що за замовчуванням невідомий користувач cognito НЕ може мати жодних дозволів, навіть якщо вони були надані через політику. Перевірте наступний розділ.
Покращений проти базового потоку аутентифікації
Попередній розділ слідував стандартному покращеному потоку аутентифікації. Цей потік встановлює обмежувальну політику сеансу для створеного сеансу ролі IAM. Ця політика дозволить сеансу лише використовувати послуги з цього списку (навіть якщо роль мала доступ до інших послуг).
Однак є спосіб обійти це, якщо Пул ідентичності має увімкнений "Базовий (Класичний) потік", користувач зможе отримати сеанс, використовуючи цей потік, який не матиме цієї обмежувальної політики сеансу.
Якщо ви отримали цю помилку, це тому, що базовий потік не увімкнено (типово)
An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.
Маючи набір облікових даних IAM, вам слід перевірити який доступ у вас є і спробувати підвищити привілеї.
Аутентифікований
Пам'ятайте, що аутентифікованим користувачам, ймовірно, будуть надані різні дозволи, тому якщо ви можете зареєструватися в додатку, спробуйте це зробити і отримати нові облікові дані.
Також можуть бути доступні ролі для аутентифікованих користувачів, які отримують доступ до пулу ідентифікаторів.
Для цього вам може знадобитися доступ до постачальника ідентифікації. Якщо це Пул користувачів Cognito, можливо, ви можете зловживати типовою поведінкою і створити нового користувача самостійно.
Роль аутентифікованого IAM Cognito, створена через, типово називається Cognito_<Ім'я пулу ідентифікаторів>Auth_Role
У будь-якому випадку, наступний приклад передбачає, що ви вже увійшли в Пул користувачів Cognito, який використовується для доступу до пулу ідентифікаторів (не забудьте, що також можуть бути налаштовані інші типи постачальників ідентифікації).
Можливо налаштувати різні ролі IAM в залежності від постачальника ідентифікації, в якого входить користувач або навіть просто в залежності від користувача (за допомогою претензій). Тому, якщо у вас є доступ до різних користувачів через одного або різних постачальників, варто увійти та отримати доступ до ролей IAM всіх них.
Last updated