TGViewer
Codeby Codeby @codeby_sec · 37K subscribers
Post #10084 4.79K
Один git push — и миллионы чужих репозиториев у тебя в кармане

В марте 2026 года команда Wiz Research отправила репорт в GitHub Bug Bounty. Через 40 минут уязвимость подтвердили, через два часа на github.com выкатили патч. Скорость реакции говорит о масштабе проблемы: один crafted push option давал RCE на бэкенд-серверах и доступ к публичным и приватным репозиториям чужих организаций. На момент раскрытия 88% self-hosted GHES-инстансов оставались уязвимы.

Но самое интересное тут — не сама дыра, а то, как её нашли.

🔍 Архитектура, которая подвела

Когда ты делаешь git push на GitHub через SSH, запрос проходит цепочку из четырёх сервисов: babeld (git-прокси) → gitauth (аутентификация) → gitrpcd (внутренний RPC) → pre-receive hook. Каждый написан на своём языке. И каждый безусловно доверяет предыдущему.

Связующее звено между ними — заголовок X-Stat. Формат примитивный: пары key=value, разделённые точкой с запятой. Парсинг — тривиальный split. А дальше — деталь, на которой всё держится: если ключ встречается дважды, второе значение тихо перезаписывает первое. Без предупреждений, без логов. Last-write-wins.

Push options — стандартная фича git-протокола (git push -o <value>). babeld кодирует их как поля в X-Stat. Пользователь контролирует значение. Точка с запятой не экранируется. Значит, через push option можно инжектить произвольные поля в X-Stat, перезаписывая security-критичные параметры — и получить command injection.

⚙️ Как AI помог — и где не помог

Wiz копали GHES и раньше, но объём закрытых бинарников делал полноценный аудит нерентабельным. Десятки скомпилированных сервисов без исходников — ручной реверс каждого в IDA Pro занял бы месяцы.

Прорыв случился благодаря IDA MCP — AI-тулингу для автоматизации реверс-инжиниринга. Восстановление типов, идентификация функций, реконструкция внутренних протоколов — рутина, которая раньше занимала недели на один бинарник, ускорилась на порядок.

Но вот что важно: AI ускорил рутину, а не нашёл баг. Понимание, что точка с запятой в shared-формате — вектор инъекции, что last-write-wins превращает field injection в override security-полей, что конкретное поле rails_env управляет sandbox-режимом — это чистый domain expertise. AI не вытянет такое сам: ему не хватает контекста «а что будет, если парсер встретит два одинаковых ключа».

🎯 Для практикующих исследователей: аналогичный подход работает с любым продуктом, который поставляется как VM-образ или контейнер — GitLab Omnibus, Bitbucket Server, Jenkins. Для SaaS-only — вектор закрыт.

Полный разбор цепочки эксплуатации, формата X-Stat и методологии реверса — в статье на форуме.

https://codeby.net/threads/github-enterprise-rce-cve-2026-3854-ot-reversa-zakrytykh-binarnikov-do-polnoi-komprometatsii-servera.92950/
  • 🔥 9
  • ❤ 3
  • 👍 2
More from @codeby_sec
  1. Sep 26, 2026🚩 Новые задания на платформе HackerLab! 👩‍💻 Категория Pentest Machines (Active Director…
  2. Sep 25, 2026Post #10469
  3. Sep 25, 2026Tookie-OSINT: Инструмент разведки по имени пользователя Tookie-OSINT — инструмент с открыт…
  4. Sep 24, 202614 резюме за три дня. Где вакансии? За месяц работодатели не разместили на форуме ни одной…
  5. Sep 24, 2026UDP-сканирование: ты доверяешь zenmap или запускаешь nmap руками? Дефолтный профиль zenmap…
  6. Sep 24, 2026🌐HExHTTP Инструмент для тестирования HTTP-заголовков и анализа результатов с целью выявле…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →