
RCE GitHub via injection d'option de push X-Stat
Uniquement à des fins de recherche en sécurité éducative et autorisée.
Ne pas utiliser contre un système sans autorisation écrite explicite.
CVE-2026-3854 est une vulnérabilité d'exécution de code à distance (RCE) dans le pipeline git push de GitHub Enterprise Server (et de GitHub.com).
Lorsqu'un client fournit des options push (git push -o), le code Ruby interne de GitHub construit un en-tête X-Stat en concaténant chaque valeur d'option avec des points-virgules comme délimiteurs de champs. Comme les valeurs étaient insérées telles quelles (sans assainissement), un attaquant pouvait intégrer des points-virgules dans une option push pour injecter des champs clé-valeur arbitraires dans l'en-tête et remplacer des paramètres critiques pour la sécurité — aboutissant finalement à une RCE non sandboxée en tant qu'utilisateur git.
X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0=<USER INPUT>
Injecter normal_value;rails_env=staging comme valeur de l'option push donne :
...;push_option_0=normal_value;rails_env=staging
L'analyseur prend la dernière occurrence de chaque clé, donc rails_env est désormais staging (non sandboxé), remplaçant la valeur légitime production définie précédemment.
list[str] / dict[str, str])python3 exploi-git.py
Le script exécute trois démonstrations successives entièrement en mémoire — aucune connexion réseau, aucune commande shell, aucune écriture de fichier :
| Démo | Ce qu'elle montre |
|---|---|
| 1 | Injection basique de points-virgules remplaçant rails_env |
| 2 | Chaîne RCE conceptuelle complète en 3 étapes |
| 3 | Comportement corrigé — les points-virgules sont encodés en pourcentage et l'injection est neutralisée |
GitHub a corrigé la vulnérabilité en encodant en pourcentage les points-virgules dans les valeurs des options push avant de les insérer dans l'en-tête X-Stat :
normal_value;rails_env=staging → normal_value%3Brails_env=staging
Cela fait du point-virgule une partie littérale de la valeur et neutralise l'injection.
Ce dépôt est fourni uniquement à des fins éducatives et pour soutenir la recherche en sécurité autorisée. Les auteurs déclinent toute responsabilité en cas de mauvaise utilisation. Obtenez toujours une autorisation écrite explicite avant de tester un système que vous ne possédez pas.