
🫖 Strumento di scoperta correlata ai contratti e validazione autorizzata per Gitea CVE-2026-60004
Uno strumento autonomo di scoperta, valutazione e validazione correlata al contratto per la vulnerabilità di esecuzione remota di codice nel Git-hook
diffpatchdi Gitea.
scanner.py offre a penetration tester, difensori e ricercatori di sicurezza un unico strumento senza dipendenze per:
Questo progetto è fornito solo per test di sicurezza autorizzati, validazione difensiva, ricerca e istruzione. Esegui le modalità attive esclusivamente su sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta. Sei responsabile del rispetto di tutte le leggi, i contratti, le regole di ingaggio e i requisiti di divulgazione applicabili.
Gli autori e i contributori non sono responsabili di uso improprio, danni, interruzioni di servizio, perdita di dati o conseguenze legali. Il PoC attivo esegue un comando come utente del sistema operativo di Gitea e modifica lo stato del server creando un repository privato. Trattalo come qualsiasi altro strumento di validazione RCE.
CVE-2026-60004 colpisce il flusso di lavoro diffpatch dei repository di Gitea. Un utente con permessi di scrittura sul repository può inviare contenuto di patch controllato che installa un Git hook in un clone temporaneo bare condiviso. Applicando la patch modificata due volte si innesca una collisione add/add e si fa eseguire l'hook come account di servizio di Gitea.
Forgejo e altri fork non sono automaticamente classificati come vulnerabili. La loro implementazione deve essere revisionata in modo indipendente.
Le modalità attive non accettano elenchi di target o wildcard.
PATHdiscoverLo scanner usa solo la libreria standard di Python. Non è richiesto alcun pip install.
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-Validator.git
cd CVE-2026-60004-Gitea-Validator
python3 scanner.py --help
python3 scanner.py verify \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/version.json
python3 scanner.py recon \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/recon.json
Il rilevamento della versione è un segnale di valutazione, non una prova di sfruttabilità. Patch backportate, build personalizzate, reverse proxy e fork possono richiedere una revisione manuale.
Tieni la password fuori dalla cronologia della shell inserendola nell'ambiente per il comando:
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
A meno che non venga fornito --yes-i-am-authorized per l'automazione, confirm ti chiede di digitare la frase di conferma legata al contratto. Il comando remoto predefinito è id.
Usa questa opzione solo quando la creazione di account è consentita dalle regole di ingaggio:
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--register-test-account \
--credential-log evidence/credentials.txt \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
La password è memorizzata solo nel log delle credenziali privato, non duplicata nelle evidenze JSON o nel pannello dei risultati del terminale.
python3 scanner.py test \
https://gitea.example \
--contract-number ENG-2026-001
🚨 test è un comando di comodità attivo. Su un target vulnerabile con registrazione abilitata, crea automaticamente un account e un repository privato, scrive il marcatore del contratto, esegue id e salva i risultati in afterdark-results/. Non ha intenzionalmente alcun prompt interattivo aggiuntivo, quindi invocarlo costituisce l'accettazione dell'autorizzazione.
Per una validazione strettamente limitata ed esplicitamente approvata, confirm e test accettano --cmd. Preferisci il profilo predefinito id quando è sufficiente.
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--cmd 'uname -a' \
--output evidence/confirmation.json
export LEAKIX_API_KEY='replace-with-your-key'
python3 scanner.py discover \
--method app \
--pages 3 \
--output evidence/leakix.json
Per ispezionare i record LeakIX di un host noto senza contattare quell'host:
python3 scanner.py discover \
--method host \
--target gitea.example \
--pages 1 \
--output evidence/leakix-host.json
I risultati della scoperta sono indizi, non autorizzazione a scansionare o sfruttare i sistemi elencati.
hooks/post-index-change.diffpatch del repository.0600 e rifiuta di sovrascrivere evidenze esistenti.I reindirizzamenti HTTP autenticati sono limitati all'origine del target selezionato. Il recupero dell'output Git disabilita anche i reindirizzamenti mentre l'header di autorizzazione è attivo.
Le esecuzioni attive possono produrre:
confirmation.json — timestamp, target, nome account, valutazione versione, codice di ritorno e output catturatoconfirmation.command-output.txt — output completo del comando remotocredentials.txt — password generata per l'account usa e getta, quando richiestaembedded-result.txt preservato nelle evidenze JSONQuesti file possono contenere dati sensibili dell'engagement. Sono ignorati dal .gitignore incluso, creati con modalità 0600 e dovrebbero essere crittografati a riposo secondo la tua policy di gestione delle evidenze.
Lo strumento evita deliberatamente la cancellazione automatica affinché le evidenze rimangano disponibili per la revisione. Dopo il test, un amministratore del target dovrebbe:
audit-* generato, se creatoafterdark-* generato/tmp/gitea-validation-*/client.txt1.27.1 o successivaL'esecuzione riuscita del PoC dimostra l'esecuzione di comandi come account di servizio di Gitea. Non prova da sola accesso root, persistenza, movimento laterale o compromissione dell'host sottostante.
id o whoami--execute-poc per confirmI test inclusi sono locali e non effettuano richieste di rete:
python3 -m unittest discover -s tests -v
Sono benvenuti miglioramenti responsabili, in particolare correzioni di compatibilità, riduzione dei falsi positivi, miglioramenti della qualità delle evidenze e flussi di pulizia più sicuri. Non inviare dettagli reali di target, credenziali, evidenze private o payload weaponizzati.
Per un problema di sicurezza in questo strumento stesso, segui SECURITY.md.
Realizzato per ricercatori attenti che credono che un buon PoC debba essere riproducibile, attribuibile e noioso da ripulire. 🛡️
| Elemento | Dettaglio |
|---|
| Prodotto | Gitea |
| Versioni interessate | >= 1.17.0, < 1.27.1 |
| Versione corretta | 1.27.1 |
| Impatto | Esecuzione remota di comandi come utente OS di Gitea |
| Accesso richiesto | Permessi di scrittura sul repository; la registrazione aperta può consentire a un attaccante di crearlo |
| Advisory | GHSA-rcr6-4jqh-j84m |
| Modalità | Comportamento di rete | Modifica lo stato del target? | Scopo |
|---|
discover | Interroga solo LeakIX | No | Cerca in un indice di terze parti esistente; non contatta gli host scoperti |
recon | Un solo target esatto | No | Inventaria le rotte pubbliche fisse e il documento Swagger pubblicato dal target |
verify | Un solo target esatto | No | Legge /api/v1/version e classifica la versione di Gitea riportata |
test | Un solo target esatto | Sì | Flusso di comodità: gate di versione, controllo registrazione, account usa e getta, marcatore, id ed evidenze |
confirm | Un solo target esatto | Sì | Conferma controllata con un account approvato o registrazione usa e getta esplicita |