Недавно, в процессе работы с одним веб-приложением от популярной программы Багбаунти я обнаружил интересную уязвимость, и мне не терпится поделиться с вами моей находкой. В статье покажу, как я использовал неправильную конфигурацию Auth0 для обхода ограничений на вход в систему и последующего взлома веб-приложения.
Еще по теме: Уязвимость Broken authentication на bWAPP
Использование Auth0 для обхода ограничений входа
В ходе анализа веб-приложения я обнаружил страницу авторизации, с помощью которой пользователи могут войти в систему, но без функции регистрации нового аккаунта. Опция регистрации/подписки отключена, поскольку она предназначена для доступа только авторизованных лиц.
Статья в образовательных целях, для обучения этичных хакеров. Несанкционированный взлом веб-приложений — это уголовное преступление. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Я решил проверить, удастся ли обнаружить скрытые страницы регистрации или уязвимые конечные точки. К сожалению, мои усилия не увенчались успехом. Но затем я случайно ввел email и пароль на странице входа и перехватил запрос с помощью Burp Suite.
При перехвате запросов с помощью Burp Suite был сгенерирован POST-запрос следующего типа.

Когда я увидел структуру тела запроса, мне показалось, что это веб-приложение использует Auth0, а это означает, что злоумышленники могут создавать учетные записи с помощью API Auth0, отправляя POST-запрос на конечную точку /dbconnections/signup, даже если на сайте нет опции регистрации.
Я подумал: возможно, на этом сайте регистрация отключена, но Auth0 все равно может позволить создать учетную запись. Поэтому отправил перехваченный запрос в repeater Burp Suite и изменил запрос на:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
POST /dbconnections/signup HTTP/2 Host: xyz.web.example.com Content-Length: 198 Content-Type: application/json Origin: https://xyz.web.example.com Referer: https://xyz.web.example.com { "client_id": "", "email": "admin@attacker.com", "password": "Admin@123", "connection": "", "credential_type": "http://auth0.com/oauth/grant-type/password-realm" } |
Во-первых я добавил конечную точку:
1 |
/dbconnections/signup/ |
вместо
1 |
/co/authenticate |
Во-вторых, я изменил название параметра username на email и realm на connection.
Эта конечная точка требует определенных параметров:
- client_id — уникальный идентификатор приложения, запрашивающего доступ к сервисам Auth0.
- connection — указывает провайдера идентификации для аутентификации.
- email — адрес электронной почты пользователя.
- password — желаемый пароль в соответствии с настроенной политикой паролей.
Изменив запрос, я просто отправил модифицированный запрос на создание учетной записи. И угадайте, что произошло — я получил ответ 200 OK с:
1 2 3 4 5 |
{ "_id": "", "email": "admin@attacker.com", "email_verified": false } |
Это означает, что я успешно зарегистрировался.

Выполнив эти шаги, злоумышленник может использовать неправильную конфигурацию в Auth0 и обойти предусмотренный механизм регистрации, создав неавторизованную учетную запись и получив доступ к приложению.
После этого я просто использовал вновь созданные учетные данные для входа в приложение, и я успешно вошел в веб-приложение.
Теперь давайте прольем немного света на Auth0.
Неправильная конфигурация Auth0
Auth0 — это платформа аутентификации, широко используемая веб-сайтами и приложениями для управления идентификационными данными пользователей и обеспечения безопасного доступа к их услугам. Она предлагает различные рабочие процессы, позволяющие легко интегрировать процессы входа и регистрации.
По умолчанию Auth0 включает опцию регистрации при создании нового приложения. Однако если этот параметр настроен неправильно, он может представлять значительный риск для безопасности. Даже если в системе отключена регистрация, но реализована Auth0, существует вероятность обойти это ограничение.
Правильная конфигурация Auth0
Я рекомендую предпринять следующие шаги для снижения риска и предотвращения несанкционированного доступа.
Чтобы предотвратить подобные эксплойты, убедитесь, что функция Disable Sign Ups активирована в настройках базы данных приложения. Для этого перейдите на вкладку Authentication (Аутентификация) —> Database Connections (Подключения к базе данных) —> {YourApplicationDatabaseName} —> Disable Sign-Ups (Отключить регистрацию).

Если эта функция включена, любая попытка зарегистрироваться через Auth0 API приведет к появлению четкого сообщения о том, что публичная регистрация отключена.

Вот и все, друзья. Если у вас есть какие-то мысли, не стесняйтесь делиться ими в комментариях. Удачной охоты за ошибками!
ПОЛЕЗНЫЕ ССЫЛКИ: