CVE-2023-7028
GitLab GitLab CE/EE
2024-05-01
GitLab Community and Enterprise Editions contain an improper access control vulnerability. This allows an attacker to trigger password reset emails to be sent to an unverified email address to ultimately facilitate an account takeover.
Технический анализ и план устранения
Суть уязвимости
CVE-2023-7028 — это критическая уязвимость (CVSS 10.0), связанная с недостаточным контролем доступа в механизме сброса пароля GitLab CE/EE. Проблема заключается в том, что логика приложения позволяла передавать массив адресов электронной почты в запросе на восстановление пароля.
Злоумышленник мог отправить запрос, содержащий как основной email жертвы, так и свой собственный (неподтвержденный) адрес. В результате ссылка для сброса пароля отправлялась на оба адреса. Это позволяло атакующему сменить пароль от любой учетной записи, не имея к ней легитимного доступа, что приводило к полному захвату аккаунта (Account Takeover). Уязвимость актуальна даже при отсутствии включенной двухфакторной аутентификации (2FA), однако наличие 2FA предотвращает вход злоумышленника после смены пароля.
Как исправить
Основным и рекомендуемым способом устранения является обновление GitLab до исправленной версии. Разработчики выпустили патчи для версий 16.7.2, 16.5.6 и 16.6.4. Также были портированы исправления в более старые ветки.
1. Обновление репозиториев и установка патча (для систем на базе Debian/Ubuntu):
apt-get update
apt-get install --only-upgrade gitlab-ee
2. Обновление для систем на базе RHEL/CentOS:
yum update gitlab-ee
3. Перезапуск конфигурации и сервисов:
gitlab-ctl reconfigure
gitlab-ctl restart
4. Проверка текущей версии (убедитесь, что версия выше или равна исправленным):
gitlab-rake gitlab:env:info
Безопасные версии: * 16.7.2 и выше * 16.6.4 и выше * 16.5.6 и выше * 16.1.6 (Backport) * 16.2.9 (Backport) * 16.3.7 (Backport) * 16.4.5 (Backport)
Временные меры
Если немедленное обновление невозможно, необходимо применить следующие защитные меры:
1. Включение двухфакторной аутентификации (2FA): Это критически важно. Даже если злоумышленник сбросит пароль через данную уязвимость, он не сможет войти в аккаунт без второго фактора. Рекомендуется сделать 2FA обязательной для всех пользователей в настройках инстанса.
2. Мониторинг логов:
Проверьте логи на наличие подозрительной активности, связанной со сбросом паролей. Ищите запросы к эндпоинту /users/password с несколькими email-адресами в параметрах.
grep -E "password_reset_token" /var/log/gitlab/gitlab-rails/production_json.log
3. Проверка почтовых логов: Проанализируйте логи вашего почтового сервера на предмет отправки писем о сбросе пароля на внешние или подозрительные домены, которые не принадлежат вашим сотрудникам.
4. Ограничение доступа: Временно ограничьте доступ к веб-интерфейсу GitLab только доверенными IP-адресами или через VPN, чтобы снизить поверхность атаки до момента установки патча.