CVE-2021-39935

GitLab Community and Enterprise Editions

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2026-02-03

Официальное описание

GitLab Community and Enterprise Editions contain a server-side request forgery vulnerability which could allow unauthorized external users to perform Server Side Requests via the CI Lint API.

🛡️
Технический анализ и план устранения

Суть уязвимости

Уязвимость CVE-2021-39935 представляет собой подделку запросов со стороны сервера (SSRF — Server-Side Request Forgery) в GitLab Community Edition (CE) и Enterprise Edition (EE).

Проблема кроется в эндпоинте CI Lint API, который используется для валидации конфигурационных файлов .gitlab-ci.yml. Из-за недостаточной фильтрации входных данных неавторизованный внешний злоумышленник может передать специально сформированный запрос, заставив сервер GitLab выполнить HTTP-запрос от своего имени.

Возможные последствия: * Сканирование внутренних портов и сервисов, недоступных извне. * Доступ к внутренним API и микросервисам компании. * Чтение метаданных облачных провайдеров (например, AWS IMDS по адресу 169.254.169.254), что может привести к компрометации облачной инфраструктуры. * Обход межсетевых экранов (Firewall bypass).

Как исправить

Единственным надежным способом устранения уязвимости является обновление GitLab до версий, в которых данная проблема исправлена. Уязвимости подвержены версии начиная с 13.5.

Пропатченные версии GitLab: * 14.4.1 и выше * 14.3.4 * 14.2.6

Процесс обновления (для Omnibus-установок):

Для систем на базе Debian/Ubuntu (замените gitlab-ee на gitlab-ce, если используете Community-версию):

apt-get update && apt-get install gitlab-ee

Для систем на базе RHEL/CentOS:

yum update gitlab-ee

После установки обновления обязательно перезапустите сервисы GitLab и проверьте их статус:

gitlab-ctl restart

gitlab-ctl status

Временные меры

Если немедленное обновление невозможно, необходимо применить компенсирующие меры (Workarounds), чтобы снизить риск эксплуатации.

1. Блокировка уязвимого эндпоинта на уровне WAF или Reverse Proxy Вы можете временно заблокировать доступ к CI Lint API (/api/v4/ci/lint). Обратите внимание, что это нарушит работу легитимных инструментов, использующих данный API для проверки CI/CD пайплайнов.

Пример блокировки через встроенный Nginx в GitLab. Откройте конфигурационный файл:

nano /var/opt/gitlab/nginx/conf/gitlab-http.conf

Добавьте следующее правило в блок server:

location ~ ^/api/v4/ci/lint {
    deny all;
    return 403;
}

Перезагрузите конфигурацию Nginx:

gitlab-ctl hup nginx

2. Сетевая изоляция сервера GitLab (Network Segmentation) Ограничьте исходящий трафик с сервера GitLab, чтобы он не мог обращаться к критичным внутренним ресурсам. * Заблокируйте доступ к IP-адресу метаданных облака (например, 169.254.169.254). * Запретите серверу GitLab инициировать соединения с внутренними подсетями (например, 10.0.0.0/8, 192.168.0.0/16), если это не требуется для интеграции с другими вашими сервисами (LDAP, базы данных).

Пример блокировки доступа к метаданным AWS через iptables:

iptables -A OUTPUT -d 169.254.169.254 -j DROP

3. Мониторинг и алертинг Настройте SIEM-систему на отслеживание аномальной активности: * Мониторинг логов Nginx (/var/log/gitlab/nginx/gitlab_access.log) на предмет большого количества запросов к /api/v4/ci/lint от неавторизованных пользователей. * Отслеживание исходящих сетевых соединений от процесса GitLab к нестандартным внутренним IP-адресам.