
Эксплойт для захвата учётной записи GitLab через CVE-2023-7028, демонстрирующий обход сброса пароля путём внедрения email атакующего для получения токена сброса.
GitLab — это широко используемый веб-менеджер репозиториев, предоставляющий комплексную платформу для управления исходным кодом, интеграции, сопровождения и совместной работы в проектах разработки программного обеспечения.CVE-2023-7028 — это уязвимость, позволяющая атакующему захватить учётную запись пользователя (Account TakeOver) через форму reset password.версиях GitLab:
reset password, а именно в API endpoint POST /users/password GitLab. Атакующий эксплуатирует уязвимость в поле email address, обходя проверку неверного формата, что позволяет атакующему вставить свой email, и тогда GitLab отправляет reset token на email атакующего.Основываясь на фрагменте кода, предоставленном GitLab, мы видим следующее:

Часть обработки запроса на сброс пароля находится в файле spec/controllers/passwords_controller_spec.rb, которая позволяет вводить несколько email из входных данных, но не имеет никакого механизма проверки email для подтверждения того, что это email пользователя.
Серверная сторона требует только authenticity_token (это скрытый токен для защиты от CSRF) от атакующего в отправляемой форме для отправки запроса на сброс пароля.

→ Таким образом, мы можем вставить свой email, чтобы получить reset token для сброса пароля email жертвы и, следовательно, захватить учётную запись пользователя.
Перехватив запрос на сброс пароля, мы получаем следующее:

authenticity_token, используемый для защиты от CSRF; email пользователя, чей пароль сбрасывается, помещается в переменную user[email].Добавляем email атакующего с помощью payload &user[email][]=victim_email&user[email][]=attacker_email и отправляем запрос:

→ Проверив email атакующего, обнаруживаем, что токен сброса пароля был отправлен, и можно получить к нему доступ для изменения пароля.

