
RCE su GitHub tramite X-Stat Push Option Injection
Solo per scopi educativi e di ricerca sulla sicurezza autorizzata.
Non utilizzare su alcun sistema senza esplicita autorizzazione scritta.
CVE-2026-3854 è una vulnerabilità di esecuzione di codice remoto (Remote Code Execution) nella pipeline di push di Git di GitHub Enterprise Server (e di GitHub.com).
Quando un client fornisce opzioni push (git push -o), il codice Ruby interno di GitHub costruisce un header X-Stat concatenando ogni valore di opzione con punti e virgola come delimitatori di campo. Poiché i valori venivano inseriti verbatim (senza sanitizzazione), un attaccante poteva incorporare punti e virgola in un'opzione push per iniettare campi chiave-valore arbitrari nell'header e sovrascrivere impostazioni critiche per la sicurezza — ottenendo infine una RCE senza sandbox come utente git.
X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0=<USER INPUT>
Iniettando normal_value;rails_env=staging come valore dell'opzione push si ottiene:
...;push_option_0=normal_value;rails_env=staging
Il parser considera l'ultima occorrenza di ogni chiave, quindi rails_env ora è staging (senza sandbox), sovrascrivendo il valore legittimo production impostato in precedenza.
list[str] / dict[str, str])python3 exploi-git.py
Lo script esegue tre dimostrazioni consecutive interamente in memoria — nessuna connessione di rete, nessun comando shell, nessuna scrittura su file:
| Demo | Cosa mostra |
|---|---|
| 1 | Iniezione di base con punto e virgola che sovrascrive rails_env |
| 2 | Catena RCE concettuale completa in 3 passaggi |
| 3 | Comportamento corretto (patch) — i punti e virgola sono codificati in percentuale e l'iniezione è neutralizzata |
GitHub ha corretto la vulnerabilità codificando in percentuale i punti e virgola nei valori delle opzioni push prima di inserirli nell'header X-Stat:
normal_value;rails_env=staging → normal_value%3Brails_env=staging
Questo rende il punto e virgola una parte letterale del valore e interrompe l'iniezione.
Questo repository è fornito esclusivamente per scopi educativi e per sostenere la ricerca sulla sicurezza autorizzata. Gli autori non si assumono alcuna responsabilità per un uso improprio. Ottenere sempre un'esplicita autorizzazione scritta prima di testare qualsiasi sistema di cui non si è proprietari.