
GitHub RCE через инъекцию push-опции X-Stat
Только для образовательных целей и авторизованных исследований в области безопасности.
Не используйте против любой системы без явного письменного разрешения.
CVE-2026-3854 — это уязвимость удалённого выполнения кода (RCE) в конвейере git push в GitHub Enterprise Server (и GitHub.com).
Когда клиент передаёт push-опции (git push -o), внутренний Ruby-код GitHub
формирует заголовок X-Stat, объединяя каждое значение опции через точку с запятой в качестве
разделителя полей. Поскольку значения вставлялись дословно (без санитизации),
злоумышленник мог встроить точки с запятой в push-опцию, чтобы внедрить произвольные
пары ключ-значение в заголовок и переопределить критически важные для безопасности настройки — в конечном
итоге получив RCE без песочницы от имени пользователя git.
X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0=<USER INPUT>
Инъекция normal_value;rails_env=staging в качестве значения push-опции превращается в:
...;push_option_0=normal_value;rails_env=staging
Парсер берёт последнее вхождение каждого ключа, поэтому rails_env теперь
равен staging (без песочницы), переопределяя легитимное значение production, установленное ранее.
list[str] / dict[str, str])python3 exploi-git.py
Скрипт выполняет три последовательные демонстрации полностью в памяти — без сетевых подключений, shell-команд и записи файлов:
| Демо | Что показывает |
|---|---|
| 1 | Базовая инъекция точки с запятой, переопределяющая rails_env |
| 2 | Полная концептуальная цепочка RCE из 3 шагов |
| 3 | Исправленное поведение — точки с запятой кодируются как percent-encoding, инъекция нейтрализована |
GitHub устранил уязвимость, добавив percent-encoding для точек с запятой в значениях push-опций
перед вставкой в заголовок X-Stat:
normal_value;rails_env=staging → normal_value%3Brails_env=staging
Это делает точку с запятой буквальной частью значения и нейтрализует инъекцию.
Этот репозиторий предоставляется исключительно в образовательных целях и для поддержки авторизованных исследований в области безопасности. Автор(ы) не несут ответственности за неправомерное использование. Всегда получайте явное письменное разрешение перед тестированием любой системы, которая вам не принадлежит.