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


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

19987Китайские хакерские группы атакуют правительства и журналистов по всему миру 19986Как 30 000 аккаунтов Facebook оказались в руках вьетнамских хакеров? 19985LofyGang вернулась: как бразильские хакеры охотятся на геймеров через поддельные читы 19984Автономная проверка защиты: как не отстать от ИИ-атак 19983Взлом Trellix: хакеры добрались до исходного кода одной из ведущих компаний по... 19982Почему почти 3000 монет в норвежском поле перевернули представление о викингах? 19981Как поддельная CAPTCHA опустошает ваш счёт и крадёт криптовалюту? 19980Слежка за каждым шагом: как ИИ превращает государство в машину тотального контроля 19979Как хакеры грабят компании через звонок в «техподдержку» 19978Почему именно Нью-Йорк стал самым уязвимым городом восточного побережья перед... 19977Как одна команда git push открывала доступ к миллионам репозиториев 19976Зачем древние народы убивали ножами и мечами: оружие как основа власти 19975Как Python-бэкдор DEEPDOOR крадёт ваши облачные пароли незаметно? 19974Послание в бутылке: математика невозможного 19973Почему ИИ-инфраструктура стала новой целью хакеров быстрее, чем ждали все?
Ссылка