Как одна команда git push открывала доступ к миллионам репозиториев

Исследователи из компании Wiz, принадлежащей Google, обнаружили критическую уязвимость в инфраструктуре GitHub, которой присвоен идентификатор CVE-2026-3854 с оценкой по шкале CVSS 8.7. Суть проблемы проста до неловкости: обычная команда git push с заранее подготовленными параметрами позволяла аутентифицированному пользователю выполнить произвольный код на сервере. Никакого специального доступа, никаких эксплойтов нулевого дня — достаточно было иметь права на запись в любой репозиторий.
Как одна команда git push открывала доступ к миллионам репозиториев
Изображение носит иллюстративный характер

Уязвимость нашёл исследователь безопасности Сажи Цадик 4 марта 2026 года. GitHub получил отчёт и задеплоил исправление на в течение двух часов — это, пожалуй, один из самых быстрых патчей для уязвимости такого масштаба. При публичном раскрытии информации около 88% инстансов по-прежнему оставались уязвимыми. Данных о реальной эксплуатации в дикой природе нет, но это скорее удача, чем закономерность.
Техническая причина кроется в обработке параметров git push во внутренней сервисной инфраструктуре GitHub. Пользовательские опции перед передачей в заголовок X-Stat внутренних запросов не проходили нормальную санитизацию. Формат этого заголовка использует точку с запятой как разделитель полей метаданных — и этого оказалось достаточно. Подставив точку с запятой в строку параметров, атакующий мог дописать произвольные поля в заголовок и изменить поведение внутренних сервисов.
Цепочка эксплойта, по словам самих исследователей из Wiz, оказалась «поразительно простой» и состояла из трёх последовательных инъекций. Первая — подмена значения rails_env на нестандартное, что отключало sandbox-защиту. Вторая — инъекция custom_hooks_dir для перенаправления директории хуков под контроль атакующего. Третья — подстановка repo_pre_receive_hooks с crafted-записью, которая через path traversal запускала произвольные команды от имени пользователя git.
Отдельного внимания заслуживает то, как эту же цепочку удалось применить к , где хуки по умолчанию отключены флагом enterprise mode со значением «false». Проблема в том, что сам этот флаг передаётся через тот же уязвимый заголовок X-Stat. Атакующий просто добавлял в инъекцию переключение флага на «true» — и вся конструкция работала точно так же, как на корпоративном сервере.
Результат выполнения такого кода — полный контроль над инстансом GHES: несандбоксированное выполнение команд от имени git, чтение и запись на файловой системе, доступ к конфигурациям внутренних сервисов. Это плохо. Но самое опасное в этой истории — другое.
GitHub использует мультитенантную архитектуру с общей бэкенд-инфраструктурой. Выполнение кода на одном узле открывало доступ к общим хранилищам, где лежат репозитории совершенно разных организаций и пользователей. Миллионы репозиториев — без каких-либо организационных или пользовательских границ. Один взломанный узел, и вся логика изоляции тенантов становится бесполезной.
Алексис Уэлс, директор по информационной безопасности GitHub, подтвердила уязвимость. Затронутые платформы: , GitHub Enterprise Cloud, GitHub Enterprise Cloud with Data Residency, GitHub Enterprise Cloud with Enterprise Managed Users и GitHub Enterprise Server. Для последнего выпущены патчи — пользователи должны обновиться до версий 3.14.25, 3.15.20, 3.16.16, 3.17.13, 3.18.8, 3.19.4 или 3.20.0.
Wiz описали системную проблему, которая стоит за этой уязвимостью: «Когда несколько сервисов, написанных на разных языках, передают данные через общий внутренний протокол, допущения каждого сервиса относительно этих данных становятся критической поверхностью атаки». Иными словами, каждый сервис в цепочке молча предполагает, что данные уже провалидированы кем-то другим — и именно в этих промежутках живут подобные баги.
Командам, строящим мультисервисные архитектуры, стоит заново пройтись по тому, как пользовательский ввод движется через внутренние протоколы. Особенно там, где безопасность-критичные конфигурации опираются на общие форматы данных с символами-разделителями — запятыми, точками с запятой, амперсандами. Это не новая класса уязвимостей, но случай с GitHub наглядно показывает, какой может быть цена неправильных предположений о доверенности данных внутри собственной инфраструктуры.


Новое на сайте

20086Мне не передали текст статьи для анализа — в структуре, которую ты предоставил,... 20085Живая квантовая сеть в Нью-Йорке: как Qunnect пытается построить интернет, который нельзя... 20084Живые обои: дрожжи, алгинат и 3D-принтер вместо поклейки 20083ИИ-агент уничтожил базу данных за 9 секунд и сам же признался в этом 20082CVE-2026-5027: почему уязвимость в Langflow уже активно эксплуатируется хакерами? 20081GreatXML: новый обход BitLocker через Recovery Partition 20080Июньский Patch Tuesday 2026: 206 уязвимостей, три zero-day и неуправляемый ИИ в поиске дыр 20079Почему CISOs массово переводят бюджеты на BAS после того, как ИИ уничтожил привычное... 20078Почему npm 12 запрещает запускать скрипты без вашего разрешения? 20077Ivanti, Fortinet и SAP выпустили критические патчи: что стоит за каждой уязвимостью? 20076Кто стоит за защитой, которую никто не замечает: итоги Cybersecurity Stars Awards 2026 20075Чистый отчёт по пентесту — это хорошо или плохо? 20072Эффект красоты решает исход собеседования до первых слов 20069Как черта характера крадёт деньги на переговорах 20068Карточная игра против главной дисфункции команды
Ссылка