Cognito Identity 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)
Identity pools виконують важливу роль, дозволяючи вашим користувачам отримувати тимчасові облікові дані. Ці облікові дані є необхідними для доступу до різних AWS сервісів, включаючи, але не обмежуючись, Amazon S3 та DynamoDB. Помітною особливістю identity pools є їх підтримка як анонімних гостьових користувачів, так і ряду постачальників ідентичності для аутентифікації користувачів. Підтримувані постачальники ідентичності включають:
Amazon Cognito user pools
Соціальні варіанти входу, такі як Facebook, Google, Login with Amazon та Sign in with Apple
Постачальники, що відповідають OpenID Connect (OIDC)
Постачальники ідентичності SAML (Security Assertion Markup Language)
Ідентичності, аутентифіковані розробником
Щоб згенерувати сесії Identity Pool, спочатку потрібно згенерувати ідентифікатор Identity ID. Цей ідентифікатор Identity ID є ідентифікацією сесії цього користувача. Ці ідентифікації можуть мати до 20 наборів даних, які можуть зберігати до 1 МБ пар ключ-значення.
Це корисно для збереження інформації про користувача (який завжди буде використовувати той самий ідентифікатор Identity ID).
Більше того, сервіс cognito-sync є сервісом, який дозволяє керувати та синхронізувати цю інформацію (в наборах даних, надсилаючи інформацію в потоках та повідомленнях SNS...).
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 облікові дані в додатку 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, вам слід перевірити які у вас є доступи і спробувати підвищити привілеї.
Пам'ятайте, що аутентифікованим користувачам можуть бути надані різні дозволи, тому якщо ви можете зареєструватися в додатку, спробуйте це зробити і отримати нові облікові дані.
Також можуть бути доступні ролі для аутентифікованих користувачів, які отримують доступ до Identity Pool.
Для цього вам може знадобитися доступ до постачальника ідентичності. Якщо це Cognito User Pool, можливо, ви зможете зловживати поведінкою за замовчуванням і створити нового користувача самостійно.
IAM роль Cognito, аутентифікована через, за замовчуванням називається Cognito_<Identity Pool name>Auth_Role
У будь-якому випадку, наступний приклад передбачає, що ви вже увійшли в Cognito User Pool, який використовується для доступу до Identity Pool (не забувайте, що також можуть бути налаштовані інші типи постачальників ідентичності).
Можливо налаштувати різні ролі IAM в залежності від постачальника ідентичності, під яким користувач увійшов, або навіть просто в залежності від користувача (використовуючи претензії). Тому, якщо у вас є доступ до різних користувачів через одного або різних постачальників, можливо, варто увійти та отримати доступ до ролей IAM всіх з них.
Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)