В этом блоге
Amazon Cognito управляет аутентификацией и авторизацией пользователей (RBAC). Пулы пользователей позволяют выполнять вход и подписку. Пулы удостоверений (федеративные удостоверения) позволяют аутентифицированным и неаутентифицированным пользователям получать доступ к ресурсам AWS с использованием временных учетных данных.
Вкратце, пул пользователей хранит всех пользователей, а пул удостоверений позволяет этим пользователям получать доступ к сервисам AWS.
На приведенном ниже рисунке показан процесс аутентификации и авторизации AWS Cognito. Пользователь аутентифицируется в пуле пользователей, и после успешной аутентификации пользовательский пул назначает 3 токена JWT (ID, Access и Refresh) пользователю. Идентификатор JWT передается в пул идентификационных данных для получения временных учетных данных AWS с ролями, назначенными поставщику идентификационных данных.
Ссылка:
История атаки
Во время недавнего пентеста мы наткнулись на страницу входа. У него не было других функций, связанных с аутентификацией, таких как забытый пароль или страница регистрации.
В ходе дальнейшего расследования мы обнаружили, что приложение использует AWS Cognito для аутентификации и авторизации с использованием JavaScript SDK. SDK JavaScript для данных клиента, таких как идентификатор клиента приложения, идентификатор пула пользователей, идентификатор пула идентификаторов и информация о регионе, через файл конфигурации JavaScript. JavaScript SDK для AWS Cognito требует эту информацию для доступа к Cognito User Pool и проверки пользователей.
Amazon Cognito имеет режим аутентификации и неаутентификации для создания временных учетных данных AWS для пользователей. Права доступа без аутентификации могут быть получены любым пользователем, использующим определенный вызов API. Поэтому мы попытались получить доступ к учетным данным AWS с помощью неаутентифицированных идентификаторов, но доступ к неаутентифицированным идентификаторам был отключен.
Здесь приведен интересный пример использования незащищенных удостоверений для служб AWS:
В дальнейшем мы сосредоточились на выявлении доступных нам функций. Мы обнаружили, что приложение непреднамеренно раскрыло некоторые функциональные возможности из-за неправильной конфигурации AWS Cognito. Используя AppClientId, мы создали пользователя в пуле пользователей Amazon Cognito. Письмо с подтверждением было отправлено на указанный адрес электронной почты вместе с кодом подтверждения.
Мы определили, что учетную запись пользователя можно подтвердить с помощью токена, полученного на зарегистрированном электронном письме, с помощью API ConfirmSignUp.
Теперь, когда мы вошли в приложение с новой зарегистрированной учетной записью, приложение ответило с ошибкой «пользователь не входит ни в одну группу». Таким образом, приложение разрешило доступ на основе групповых привилегий, предоставленных в приложении.
Мы поняли, что приложение по существу проверило вновь созданного пользователя и вернуло токены доступа, но не позволило пользователю получить доступ к какой-либо странице, поскольку пользователь не входил ни в какие группы, которые имели доступ к приложению.
Теперь, когда у нас есть аутентифицированный доступ и идентификационный токен. Эти значения можно использовать для создания временных учетных данных AWS для аутентифицированных идентификаторов.
Теперь мы можем использовать интерфейс командной строки AWS (CLI) для взаимодействия со службами AWS:
С помощью команды «aws sts get-caller-identity» было установлено, что токен работает нормально.
Используя наши
aws лямбда-лист-функции
Мы обнаружили, что одна из функций Lambda (RotateAccessKeys-CIS) имеет чрезмерно допустимые политики IAM.
aws iam list-attach-role-policy –role-name IAM-CIS
Мы решили изменить код функции Lambda (RotateAccessKeys-CIS) таким образом, чтобы он работал как требуется, но дополнительно выполнил команду, которая позволяла считывать учетные данные AWS из переменных среды.
Посмотрим, как мы модифицировали указанную функцию.
Мы загрузили код функции Lambda из расположения кода, как выделено
aws lambda get-function –function-name RotateAccessKeys-CIS –query 'Code.Location'
Функция lambda_handler в загруженном коде была изменена для печати переменных среды.
Кроме того, мы создали ZIP-файл, который содержал измененный код, чтобы он теперь выполнял измененную функцию Lambda после загрузки и запуска пакета.
Лямбда функции «RotateAccessKeys-CIS» уа s обновлен.
aws лямбда-код-функции-обновления -function-name RotateAccessKeys-CIS -zip-файл fileb: ///root//lambda_function.zip
После того, как код функции Lambda был обновлен, как и предполагалось, мы вызвали его, используя указанную ниже команду. Эта команда вызвала функцию и напечатала журнал на экране, который содержал временные учетные данные AWS.
aws lambda invoke –function-name RotateAccessKeys-CIS out –log-type Tail –query 'LogResult' –output text | base64 -d
Мы повторили те же шаги и определили набор временных учетных данных, которые были весьма разрешительными при полном доступе к IAM.
Затем мы настроили интерфейс командной строки AWS с использованием новых учетных данных AWS для создания нового пользователя nirahua и прикрепили управляемую политику AWS с именем AdministratorAccess к пользователю с помощью следующих команд.
aws iam create-user –user-name nirahua
aws iam create-login-profile –user-name nirahua –password s8iUzu ******
aws iam attach-user-policy –policy-arn arn: aws: iam :: aws: policy / AdministratorAccess –user-name nirahua
И, как вы можете видеть, мы успешно вошли в систему как администратор через консоль AWS с вновь созданным пользователем.
Рекомендации
Источник:
Ссылка скрыта от гостей
, наш ведущий преподаватель учебного класса «Advanced Web Hacking», расскажет о том, как на практике происходит захват учетной записи AWS через неправильно настроенную AWS Cognito. - Тестируемое приложение имело только страницу входа в систему и не показывало функцию регистрации.
- Целевое приложение использует AWS Cognito JavaScript SDK, который раскрывает идентификатор клиента приложения, идентификатор пула пользователей, идентификатор пула идентификаторов и информацию о регионе
- AWS Cognito настроен неправильно, чтобы разрешить регистрацию нового пользователя
- Зарегистрируйтесь и войдите в систему, чтобы получить временный токен AWS для аутентифицированных личностей.
- У токена AWS есть доступ к функциям Lambda, который используется для повышения доступа
Amazon Cognito управляет аутентификацией и авторизацией пользователей (RBAC). Пулы пользователей позволяют выполнять вход и подписку. Пулы удостоверений (федеративные удостоверения) позволяют аутентифицированным и неаутентифицированным пользователям получать доступ к ресурсам AWS с использованием временных учетных данных.
Вкратце, пул пользователей хранит всех пользователей, а пул удостоверений позволяет этим пользователям получать доступ к сервисам AWS.
На приведенном ниже рисунке показан процесс аутентификации и авторизации AWS Cognito. Пользователь аутентифицируется в пуле пользователей, и после успешной аутентификации пользовательский пул назначает 3 токена JWT (ID, Access и Refresh) пользователю. Идентификатор JWT передается в пул идентификационных данных для получения временных учетных данных AWS с ролями, назначенными поставщику идентификационных данных.
Ссылка:
Ссылка скрыта от гостей
История атаки
Во время недавнего пентеста мы наткнулись на страницу входа. У него не было других функций, связанных с аутентификацией, таких как забытый пароль или страница регистрации.
В ходе дальнейшего расследования мы обнаружили, что приложение использует AWS Cognito для аутентификации и авторизации с использованием JavaScript SDK. SDK JavaScript для данных клиента, таких как идентификатор клиента приложения, идентификатор пула пользователей, идентификатор пула идентификаторов и информация о регионе, через файл конфигурации JavaScript. JavaScript SDK для AWS Cognito требует эту информацию для доступа к Cognito User Pool и проверки пользователей.
Amazon Cognito имеет режим аутентификации и неаутентификации для создания временных учетных данных AWS для пользователей. Права доступа без аутентификации могут быть получены любым пользователем, использующим определенный вызов API. Поэтому мы попытались получить доступ к учетным данным AWS с помощью неаутентифицированных идентификаторов, но доступ к неаутентифицированным идентификаторам был отключен.
Здесь приведен интересный пример использования незащищенных удостоверений для служб AWS:
Ссылка скрыта от гостей
. В дальнейшем мы сосредоточились на выявлении доступных нам функций. Мы обнаружили, что приложение непреднамеренно раскрыло некоторые функциональные возможности из-за неправильной конфигурации AWS Cognito. Используя AppClientId, мы создали пользователя в пуле пользователей Amazon Cognito. Письмо с подтверждением было отправлено на указанный адрес электронной почты вместе с кодом подтверждения.
Мы определили, что учетную запись пользователя можно подтвердить с помощью токена, полученного на зарегистрированном электронном письме, с помощью API ConfirmSignUp.
Теперь, когда мы вошли в приложение с новой зарегистрированной учетной записью, приложение ответило с ошибкой «пользователь не входит ни в одну группу». Таким образом, приложение разрешило доступ на основе групповых привилегий, предоставленных в приложении.
Мы поняли, что приложение по существу проверило вновь созданного пользователя и вернуло токены доступа, но не позволило пользователю получить доступ к какой-либо странице, поскольку пользователь не входил ни в какие группы, которые имели доступ к приложению.
Теперь, когда у нас есть аутентифицированный доступ и идентификационный токен. Эти значения можно использовать для создания временных учетных данных AWS для аутентифицированных идентификаторов.
Теперь мы можем использовать интерфейс командной строки AWS (CLI) для взаимодействия со службами AWS:
С помощью команды «aws sts get-caller-identity» было установлено, что токен работает нормально.
Используя наши
Ссылка скрыта от гостей
мы обнаружили, что токен AWS имеет полные разрешения для функций AWS Lambda. Это позволило нам изучить конфигурацию AWS Lambda клиента. Мы начали с просмотра списка функций Lambda:aws лямбда-лист-функции
Мы обнаружили, что одна из функций Lambda (RotateAccessKeys-CIS) имеет чрезмерно допустимые политики IAM.
aws iam list-attach-role-policy –role-name IAM-CIS
Мы решили изменить код функции Lambda (RotateAccessKeys-CIS) таким образом, чтобы он работал как требуется, но дополнительно выполнил команду, которая позволяла считывать учетные данные AWS из переменных среды.
Посмотрим, как мы модифицировали указанную функцию.
Мы загрузили код функции Lambda из расположения кода, как выделено
aws lambda get-function –function-name RotateAccessKeys-CIS –query 'Code.Location'
Функция lambda_handler в загруженном коде была изменена для печати переменных среды.
Кроме того, мы создали ZIP-файл, который содержал измененный код, чтобы он теперь выполнял измененную функцию Lambda после загрузки и запуска пакета.
Лямбда функции «RotateAccessKeys-CIS» уа s обновлен.
aws лямбда-код-функции-обновления -function-name RotateAccessKeys-CIS -zip-файл fileb: ///root//lambda_function.zip
После того, как код функции Lambda был обновлен, как и предполагалось, мы вызвали его, используя указанную ниже команду. Эта команда вызвала функцию и напечатала журнал на экране, который содержал временные учетные данные AWS.
aws lambda invoke –function-name RotateAccessKeys-CIS out –log-type Tail –query 'LogResult' –output text | base64 -d
Мы повторили те же шаги и определили набор временных учетных данных, которые были весьма разрешительными при полном доступе к IAM.
Затем мы настроили интерфейс командной строки AWS с использованием новых учетных данных AWS для создания нового пользователя nirahua и прикрепили управляемую политику AWS с именем AdministratorAccess к пользователю с помощью следующих команд.
aws iam create-user –user-name nirahua
aws iam create-login-profile –user-name nirahua –password s8iUzu ******
aws iam attach-user-policy –policy-arn arn: aws: iam :: aws: policy / AdministratorAccess –user-name nirahua
И, как вы можете видеть, мы успешно вошли в систему как администратор через консоль AWS с вновь созданным пользователем.
Рекомендации
- Отключить регистрацию на AWS Cognito, если не требуется
- Никогда не назначайте привилегии сверх необходимого минимума при настройке AWS Cognito для аутентифицированных и не аутентифицированных идентификаторов.
- Используйте расширенные функции безопасности для Amazon Cognito, чтобы защитить пользователей приложений от несанкционированного доступа.
Источник:
Ссылка скрыта от гостей