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


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

20066[b]Фотосинтез в глазах мышей: возможно ли это без превращения в растение?[/b] 20065[b]СПКЯ стало СПМЯ: почему переименование болезни, затрагивающей миллионы женщин, заняло... 20064[b]Почему великая пирамида Гизы пережила все землетрясения за 4500 лет[/b] 20063[b]Генетика Homo erectus: что зубная эмаль рассказала о наших предках[/b] 20062[b]Кости в бухте эребус: что кости моряков Франклина рассказывают спустя полтора века[/b] 20061[b]Крупнейший плавучий ветрогенератор в мире: Китай испытывает установку у берегов... 20060[b]Карие глаза младенца стали индиго после лечения от COVID-19[/b] 20058[b]Почему серебряная чаша с Афиной пролежала в немецком лесу две тысячи лет?[/b] 20057[b]Дыра в атмосфере солнца: вспышка достигла пика и может зажечь полярное сияние[/b] 20056[b]Динго возрастом 950 лет: кто и зачем кормил могилу животного сотни лет?[/b] 20055[b]Томоэ гозэн: женщина-самурай, которая существовала на самом деле[/b] 20054[b]Что видели астронавты «Аполлона-12» над лунным горизонтом?[/b] 20053[b]Восковой блокнот на латыни и шёлковая туалетная бумага: кто посещал средневековый... 20052[b]Хантавирус на борту: 41 человек под наблюдением после рейса MV Hondius[/b]
Ссылка