
GitHub RCE über X-Stat Push-Options-Injection
Nur für Bildungszwecke und autorisierte Sicherheitsforschung.
Verwenden Sie es nicht gegen ein System ohne ausdrückliche schriftliche Genehmigung.
CVE-2026-3854 ist eine Schwachstelle zur Remote-Code-Ausführung in der Git-Push-Pipeline von GitHub Enterprise Server (und GitHub.com).
Wenn ein Client Push-Optionen bereitstellt (git push -o), baut GitHub's interner Ruby-Code einen X-Stat-Header, indem er jeden Optionswert mit Semikolons als Feldtrennzeichen verkettet. Da Werte unverändert (ohne Bereinigung) eingefügt wurden, konnte ein Angreifer Semikolons in eine Push-Option einbetten, um beliebige Schlüssel-Wert-Felder in den Header zu injizieren und sicherheitskritische Einstellungen zu überschreiben – was letztendlich zu einer ungesandboxten RCE als der git-Benutzer führte.
X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0=<USER INPUT>
Das Injizieren von normal_value;rails_env=staging als Push-Optionswert führt zu:
...;push_option_0=normal_value;rails_env=staging
Der Parser nimmt das letzte Vorkommen jedes Schlüssels, sodass rails_env jetzt staging (ungesandboxt) ist und den zuvor gesetzten legitimen production-Wert überschreibt.
list[str] / dict[str, str]-Typannotationen)python3 exploi-git.py
Das Skript führt drei aufeinanderfolgende Demonstrationen vollständig im Speicher durch – keine Netzwerkverbindungen, keine Shell-Befehle, keine Dateischreibvorgänge:
| Demo | Zeigt |
|---|---|
| 1 | Grundlegende Semikolon-Injektion, die rails_env überschreibt |
| 2 | Vollständige 3-Schritt-Konzept-RCE-Kette |
| 3 | Gepatchtes Verhalten – Semikolons werden prozentkodiert und die Injektion wird neutralisiert |
GitHub hat die Schwachstelle behoben, indem Semikolons in Push-Optionswerten prozentkodiert werden, bevor sie in den X-Stat-Header eingefügt werden:
normal_value;rails_env=staging → normal_value%3Brails_env=staging
Dadurch wird das Semikolon zu einem literal Teil des Werts und die Injektion wird unterbrochen.
Dieses Repository wird ausschließlich zu Bildungszwecken und zur Unterstützung autorisierter Sicherheitsforschung bereitgestellt. Der/die Autor(en) übernehmen keine Verantwortung für Missbrauch. Holen Sie stets eine ausdrückliche schriftliche Genehmigung ein, bevor Sie Tests an Systemen durchführen, die Sie nicht besitzen.