Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Gitea-template-sync-Path-Traversal-Privilege-Escalation-CVE-2026-38526- — PoC e write-up per l'escalation di privilegi di HackTheBox "Nexus": servizio di sincronizzazione template Gitea eseguito come root, vulnerabile a path traversal tramite oggetti Git contraffatti. Solo per uso didattico. | Kitploit
Strumenti/GitHubGitHub/shirouuu/gitea-template-sync-path-traversal-privilege-escalation-cve-2026-38526-
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPost-ExploitCTFPenetration TestingApprendimento e FormazioneSviluppo Payload

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Lab e Pratica
GitHubshirouuu/gitea-template-sync-path-traversal-privilege-escalation-cve-2026-38526-

Gitea-template-sync-Path-Traversal-Privilege-Escalation-CVE-2026-38526-

PoC e write-up per l'escalation di privilegi di HackTheBox "Nexus": servizio di sincronizzazione template Gitea eseguito come root, vulnerabile a path traversal tramite oggetti Git contraffatti. Solo per uso didattico.

Vedi Repository
6h 45m faNon ancora revisionato

Nexus — PoC di Escalation di Privilegi Locali

Path traversal nel template-sync di Gitea tramite oggetti Git contraffatti → root

Un exploit proof-of-concept per l'escalation di privilegi sulla macchina HackTheBox Nexus. Un servizio systemd di proprietà di root sincronizza i repository template di Gitea su disco senza sanificare i nomi delle voci, consentendo a un utente autenticato con privilegi bassi di scrivere file arbitrari come root tramite directory traversal — usato qui per impiantare una chiave SSH in /root/.ssh/authorized_keys.


⚠️ Disclaimer

Questo codice è fornito per scopi educativi e test di sicurezza autorizzati soltanto — ovvero ambienti di laboratorio come HackTheBox, o sistemi di tua proprietà o per cui hai esplicita autorizzazione scritta a eseguire test. L'uso non autorizzato contro sistemi che non controlli è illegale. L'autore non si assume alcuna responsabilità per usi impropri.

Se la macchina Nexus è ancora attiva su HackTheBox, non pubblicare o condividere questo exploit — le regole di HTB proibiscono la distribuzione di soluzioni per macchine attive.


Riepilogo della vulnerabilità

Lo script di sincronizzazione legge i file dai repository contrassegnati come template in Gitea e li scrive sul filesystem locale. Il percorso di destinazione è costruito all'incirca così:

root@kitploit:~
dest = os.path.join(base_dir, name)   # name comes straight from the Git tree
open(dest, "w").write(content)

os.path.join() non neutralizza le sequenze ... Una voce di tree il cui nome è un percorso di traversal (ad es. ../../../../../root/.ssh/authorized_keys) fa quindi scrivere il processo privilegiato al di fuori della directory prevista.


Perché oggetti Git contraffatti?

Git memorizza contenuto e nomi separatamente:

  • un blob contiene il contenuto grezzo di un file (senza nome);
  • un tree mappa nome → oggetto (è qui che risiede il nome del file);
  • un commit punta a un tree di livello superiore.

Il nome del file in una voce di tree è solo testo, quindi può essere .. — ma il client Git standard rifiuta di creare una tale voce, proprio per prevenire questo attacco.

Questo PoC aggira quel controllo lato client scrivendo oggetti Git grezzi direttamente in .git/objects/ (calcolando gli id SHA-1 a mano) e costruendo refs/heads/main manualmente. Il repository pushato contiene quindi una voce di tree chiamata .., che il processo di sincronizzazione root risolve e segue.


Catena di attacco (contesto completo della macchina)

  1. Foothold — upload di file senza restrizioni in Krayin CRM (CVE-2026-38526) → RCE come www-data.
  2. Movimento laterale — credenziali in chiaro nel .env di produzione, riutilizzate come password di sistema → SSH come utente con privilegi bassi.
  3. Escalation di privilegi — questo PoC → root.

Il tema ricorrente in tutte e tre le fasi: un processo privilegiato che si fida di dati controllati dall'attaccante senza validazione (un MIME type falsificato, una password riutilizzata, un nome di file non sanificato).


Requisiti

  • Eseguire sull'host target, come utente autenticato con privilegi bassi.
  • Gitea raggiungibile su http://localhost:3000.
  • git, python3, curl e ssh disponibili (predefiniti sulla macchina).

Utilizzo

root@kitploit:~
chmod +x nexus_privesc.sh
./nexus_privesc.sh -t <TARGET_IP> -u <GITEA_USER> -p <GITEA_PASS> [-d DEPTH]

Esempio:

root@kitploit:~
./nexus_privesc.sh -t 10.129.21.192 -u jones -p 'REDACTED' -d 5

Cosa fa lo script

  1. Genera una coppia di chiavi SSH ed25519 (/tmp/.exploit_key).
  2. Richiede un token API di Gitea tramite basic auth.
  3. Crea un repository e lo contrassegna come template.
  4. Contraffà oggetti Git grezzi codificando un tree di traversal .. che mappa a /root/.ssh/authorized_keys, con la chiave pubblica dell'attaccante come contenuto.
  5. Pusha il repository avvelenato.
  6. Attende il timer di sync di proprietà di root (~60s).
  7. Effettua il login come root con la chiave impiantata.

Monitora la sincronizzazione sul target con:

root@kitploit:~
tail -f /var/log/template-sync.log

Un'esecuzione riuscita registra una riga come:

root@kitploit:~
synced: ../../../../../root/.ssh/authorized_keys

Regolare DEPTH

DEPTH è il numero di livelli .. necessari per risalire dalla directory di sync/staging fino alla radice del filesystem (/). Se la sincronizzazione riesce nel log ma l'SSH root fallisce, il traversal è atterrato al livello sbagliato — riprova con -d 4 o -d 6. Il valore esatto può essere confermato leggendo il percorso di staging in /etc/gitea/template-sync.py.


Remediation

  • Non costruire mai percorsi filesystem da nomi non attendibili con il solo os.path.join(). Normalizza e confina i percorsi, ad es.:

    root@kitploit:~
    base = os.path.realpath(base_dir)
    dest = os.path.realpath(os.path.join(base, name))
    if not dest.startswith(base + os.sep):
        raise ValueError("path traversal blocked")
    
  • Rifiuta i nomi delle voci di tree che contengono .., percorsi assoluti o separatori di percorso.

  • Esegui il servizio di sync sotto un account dedicato con privilegi bassi, non root.

  • Abilita receive.fsckObjects = true in Gitea per rifiutare oggetti pushati malformati.


Riferimenti

  • CWE-22 — Improper Limitation of a Pathname to a Restricted Directory (Path Traversal)
  • CVE-2026-38526 — Krayin CRM unrestricted file upload (foothold stage)
  • Git internals — objects (blob / tree / commit): https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
  • MITRE ATT&CK — T1068 Exploitation for Privilege Escalation

Autore

<your name / handle> — per uso educativo su HackTheBox.

Scarica lo strumento
ClassePath Traversal (CWE-22) → Escalation di Privilegi Locali
Componentegitea-template-sync.service (custom /etc/gitea/template-sync.py)
Eseguito comeroot, attivato ogni ~60s da gitea-template-sync.timer
Causa principaleos.path.join() su nomi non sanificati presi dagli oggetti tree di Git
ImpattoUtente autenticato con privilegi bassi → root
FlagDescrizionePredefinito
-tIP target (per l'SSH root finale)— (obbligatorio)
-uUsername Gitea— (obbligatorio)
-pPassword Gitea— (obbligatorio)
-dNumero di livelli .. per raggiungere / dalla directory di sync5