17 августа GitLab выпустила критический патч-релиз для версий 19.2.4, 19.1.6, 19.0.8 и 18.11.11, закрывающий две уязвимости в GraphQL API платформы. Главная из них, CVE-2026-19478, получила оценку CVSS 9.4 (Critical) и позволяла неаутентифицированному злоумышленнику удаленно изменять или удалять публичные проекты и пользовательские данные — без какой-либо учетной записи в GitLab.
Релиз вышел вне расписания планового обновления, которое прошло всего пятью днями ранее. К слову, подробнее о нем мы рассказывали в отдельном материале. Этот факт сам по себе сигнализирует об уровне серьезности: GitLab обычно накапливает фиксы до очередного цикла, а внеочередной патч означает, что риск эксплуатации в проде посчитали неприемлемым для ожидания.
Чего коснулась уязвимость
CVE-2026-19478 — инъекция через GraphQL-директиву
Согласно пояснению от GitLab, уязвимость описана как code injection issue involving a GraphQL directive — то есть баг связан с обработкой директив в GraphQL-запросах (конструкции вида @include, @skip или кастомные директивы схемы, которые модифицируют выполнение запроса на уровне резолверов). Некорректная валидация или обработка такой директивы позволяла обойти проверки авторизации и выполнить мутации над публичными ресурсами от имени анонимного пользователя.
CVSS-вектор — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H:
- AV:N / AC:L — атака выполняется удаленно по сети, без специальных условий;
- PR:N / UI:N — не требуются ни привилегии, ни действия пользователя (жертвы вообще нет, так как атакуется сам сервер);
- C:L / I:H / A:H — минимальное влияние на конфиденциальность, но высокое на целостность и доступность данных: то есть основной риск — не утечка, а порча/удаление данных.
На практике это означает, что атакующий мог модифицировать или удалять публичные проекты и связанные с ними пользовательские данные без валидной учетной записи GitLab.
CVE-2026-19650 — CSRF в обработчике multiplex-запросов GraphQL
Вторая уязвимость оценена ниже — CVSS 7.1 (High), однако она не менее показательна. Речь здесь о CSRF (Cross-Site Request Forgery) в обработчике multiplex-запросов GraphQL: это механизм, который позволяет упаковать несколько GraphQL-операций в один HTTP-запрос.
Из-за неправильной валидации такого запроса GraphQL-мутации можно было выполнять через GET-запросы — а именно GET, в отличие от POST, чаще всего проскальзывает мимо классических CSRF-защит, поскольку по спецификации HTTP считается «безопасным» и идемпотентным методом.
CVSS-вектор — CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:L:
AV:N / AC:L— как и в первом случае, атака выполняется удаленно по сети, без специальных условий;PR:N / UI:R— привилегии атакующему не нужны, но здесь впервые появляется требование взаимодействия пользователя. Жертва должна перейти по подготовленной ссылке или открыть вредоносную страницу — именно из ее браузера уйдет GET-запрос с мутацией, авторизованный текущей сессией;C:N / I:H / A:L— конфиденциальность не затрагивается, зато высокое влияние на целостность данных (мутации) и умеренное — на доступность.
Ключевое отличие от CVE-2026-19478 — как раз в UI:R: эксплуатация невозможна без жертвы с активной сессией, тогда как первая уязвимость не требовала взаимодействия пользователя вовсе.
Затронутые версии
Обе уязвимости затрагивают одинаковый диапазон версий GitLab Community Edition и Enterprise Edition в равной степени:
- 18.2.x – 18.11.10 (исправлено в 18.11.11);
- 19.0.x до 19.0.8;
- 19.1.x до 19.1.6;
- 19.2.x до 19.2.4.
Всем администраторам self-managed инсталляций рекомендуется обновиться до соответствующих патч-версий немедленно. Для GitLab.com фикс уже применен на стороне провайдера.
Кто нашел и как раскрывали
Обе уязвимости пришли через публичную багбаунти-программу GitLab на HackerOne: CVE-2026-19478 обнаружил исследователь под ником hiimguardian, CVE-2026-19650 — исследователь kreep.
На момент публикации GitLab не зафиксировала подтвержденных случаев эксплуатации в реальных атаках, а полные технические подробности по обычной практике планируется раскрыть публично ориентировочно через 90 дней, т. е. ориентировочно в ноябре 2026 года. Это стандартная отсрочка, чтобы дать организациям время накатить патч до появления в открытом доступе рабочего эксплойта.
Почему это важно
Обе уязвимости примечательны также низким порогом эксплуатации. CVE-2026-19478 не требует ни аккаунта, ни какого-либо действия со стороны других людей: атакующему достаточно прямого доступа к публичному GraphQL-эндпоинту инстанса. CVE-2026-19650 устроена иначе: атакующему тоже не нужен собственный аккаунт, но нужна аутентифицированная жертва, которая перейдет по подготовленной ссылке или откроет вредоносную страницу, — именно из браузера жертвы уйдет GET-запрос с мутацией, авторизованный ее текущей сессией.
Для организаций, у которых есть публичные проекты (open source, публичные wiki/issue-трекеры на self-managed GitLab), это означает два независимых вектора компрометации данных: прямую атаку без всякого взаимодействия и атаку через социальную инженерию против авторизованного пользователя. Комбинация critical + unauthenticated + integrity/availability impact — именно тот профиль, который в первую очередь берут в оборот сканеры и автоматизированные боты сразу после публикации патча, сопоставляя diff между уязвимой и исправленной версией. По этой причине окно между релизом патча и появлением рабочих эксплойтов для обеих уязвимостей обычно измеряется днями, а не неделями.
Рекомендации
- Обновите self-managed GitLab CE/EE до 18.11.11, 19.0.8, 19.1.6 или 19.2.4 в приоритетном порядке — вне зависимости от обычного цикла патчинга.
- Проверьте логи GraphQL API (/api/graphql) на аномальные мутации от неаутентифицированных клиентов за период с момента появления уязвимого кода.
- Если обновление отложено — рассмотрите временное ограничение доступа к GraphQL API на уровне WAF/reverse proxy для анонимных запросов к публичным ресурсам.
- Отслеживайте публикацию деталей PoC ближе к ноябрю 2026 — риск массовой автоматизированной эксплуатации резко возрастет сразу после раскрытия.
Наибольшую угрозу сейчас представляют собой ИИ-агенты и боты, которые обучены эксплуатировать уязвимости и нарушать тем самым работу систем. Отсюда — два базовых принципа защиты:
своевременно отслеживайте критические патчи для оперативного закрытия уязвимостей в используемом ПО;
логируйте GraphQL и, где возможно, подключать автоматизированный (в том числе на основе ИИ) мониторинг для оперативных оповещений об аномальной активности.