GitLab экстренно закрыла две критические уязвимости в GraphQL API - Академия Selectel

GitLab экстренно закрыла две критические уязвимости в GraphQL API

Дмитрий Домлоджанов
Дмитрий Домлоджанов Технический редактор
18 августа 2026

GitLab внепланово пропатчила две уязвимости, позволявшие менять и удалять чужие данные без аккаунта. Разбираем механику атак и что делать администраторам.

Изображение записи

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 между уязвимой и исправленной версией. По этой причине окно между релизом патча и появлением рабочих эксплойтов для обеих уязвимостей обычно измеряется днями, а не неделями.

Рекомендации

  1. Обновите self-managed GitLab CE/EE до 18.11.11, 19.0.8, 19.1.6 или 19.2.4 в приоритетном порядке — вне зависимости от обычного цикла патчинга.
  2. Проверьте логи GraphQL API (/api/graphql) на аномальные мутации от неаутентифицированных клиентов за период с момента появления уязвимого кода.
  3. Если обновление отложено — рассмотрите временное ограничение доступа к GraphQL API на уровне WAF/reverse proxy для анонимных запросов к публичным ресурсам.
  4. Отслеживайте публикацию деталей PoC ближе к ноябрю 2026 — риск массовой автоматизированной эксплуатации резко возрастет сразу после раскрытия.

Наибольшую угрозу сейчас представляют собой ИИ-агенты и боты, которые обучены эксплуатировать уязвимости и нарушать тем самым работу систем. Отсюда — два базовых принципа защиты:

своевременно отслеживайте критические патчи для оперативного закрытия уязвимостей в используемом ПО;
логируйте GraphQL и, где возможно, подключать автоматизированный (в том числе на основе ИИ) мониторинг для оперативных оповещений об аномальной активности.

Антон Дятлов Инженер по ИБ