Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
gitea-restore-file-open — Proof-of-concept per una vulnerabilità di tipo local file inclusion (CWE-73) in Gitea restore-repo tramite file://, che copia i target dei symlink al di fuori di un dump non attendibile all'interno degli allegati di release. | Kitploit
Strumenti/GitHubGitHub/abraxas/gitea-restore-file-open
Analisi delle VulnerabilitàExploitRaccolta InformazioniVirtualizzazione per la SicurezzaSicurezza WebPenetration TestingLab e Pratica
GitHub
abraxas/gitea-restore-file-open

gitea-restore-file-open

Proof-of-concept per una vulnerabilità di tipo local file inclusion (CWE-73) in Gitea restore-repo tramite file://, che copia i target dei symlink al di fuori di un dump non attendibile all'interno degli allegati di release.

Vedi Repository
156 giorni faNon ancora revisionato

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

Abraxas Labs - gitea-restore-file-open

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  gitea-restore-file-open

Write-up: https://abraxaslabs.tech/research/gitea-restore-file-open

gitea-restore-file-open

Gitea 1.27.3 - Gitea

CVE-2026-59765 ha aggiunto un client HTTP hostmatcher su OpenWithClient. Il ramo file:// ignora quel client e chiama os.Open. Il ripristino di un dump non ha DownloadFunc. gitea_uploader.go apre quindi l'URL file:// riscritto. os.Open segue un symlink lato dump. Il join resta sotto il dump. Il symlink no.

Il ripristino da parte dell'operatore di un dump non attendibile copia il target del symlink in un allegato di release. Con l'uid di Gitea, si tratta di qualsiasi file che l'account di servizio può leggere.

IDnessuna CVE al momento
CWECWE-73
CVSSMedium: 4.2 CVSS:3.1/AV:L/AC:L/PR:H/UI:R/S:U/C:H/I:N/A:N
ProdottoGitea
Affettofino alla v1.27.3 (146cc3e); operatore locale gitea restore-repo
Authripristino da parte dell'operatore locale di un dump non attendibile
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Consegnare a un amministratore un dump non attendibile (una directory di "backup", un ripristino da un remoto non attendibile) che contiene un symlink sotto il percorso unito sotto il dump. Il ripristino copia il file target in un allegato di release sul repository ripristinato. Chiunque possa leggere quel repository può scaricarlo.

Se l'autore del dump indica app.ini, si tratta di furto di credenziali (INTERNAL_TOKEN, SECRET_KEY, JWT, password del DB). L'oracolo del lab era un file testimone piantato, non app.ini. Non è un LPE a livello di OS. Non è non autenticato. Non è un'evasione del join dalla radice del dump. La migrazione live da GitHub/GitLab/Gitea imposta DownloadFunc e non esegue os.Open su un file:// controllato dall'attaccante.

Come l'ho trovato

Due mappe di ripristino giacevano sulla tabella dei residui. Ho testato in lab prima quella ovvia.

Il finding 8 era l'evasione del join dalla radice del dump: inserire un DownloadURL assoluto in release.yml, sperando che FilePathJoinAbs elimini il prefisso del dump come farebbe un ingenuo filepath.Join(base, "/etc/passwd"). Su 1.27.3 non lo fa. Ogni sub è filepath.Clean("/"+s) e poi filepath.Join(base, cleaned). Il join replicato di /tmp/dump + /tmp/GITEA-JOIN-OUTSIDE è rimasto /tmp/dump/tmp/GITEA-JOIN-OUTSIDE. Il ripristino ha riscritto file:// sotto il dump e ha fallito con open ...: no such file or directory. Non è un'evasione del join su questo tag.

Il finding 9 è quello che ha funzionato. Ho piantato un file testimone fuori dal dump, ho inserito un symlink nel percorso unito sotto il dump, ho eseguito gitea restore-repo. Ripristino rc=0. L'allegato di release ripristinato conteneva GITEA-FILE-OPEN-WITNESS.

Vicoli ciechi già registrati: evasione del join dalla radice del dump tramite un DownloadURL assoluto; LFI file:// in migrazione live; X-Gitea-Internal-Auth (il ripristino è CLI con l'uid di Gitea, non /api/internal); trattare l'HTTP di ripristino come remoto non autenticato (il CVSS è locale, privilegi elevati, interazione utente); una reverse shell. Teatro.

Lab

cd lab
./run.sh

Prendi di mira solo http://127.0.0.1:18137. Compose monta lab/dump in sola lettura. run.sh inserisce il witness all'interno del container, costruisce il dump, crea il symlink, poi esegue gitea restore-repo.

restore-rc=0 Restore repo labadmin/restored successfully
download status=200 snippet=GITEA-FILE-OPEN-WITNESS
SUCCESS GITEA-RESTORE-FILE-OPEN

La correzione

Rimuovere file:// da OpenWithClient, oppure rifiutarsi di seguire i symlink dei dump, e non ripristinare dump non attendibili. L'allegato ripristinato non deve contenere il witness fuori dal dump.

Riferimenti

  • github.com/go-gitea/gitea tag v1.27.3
  • uri.go · gitea_uploader.go · FilePathJoinAbs
  • Correlato e corretto: CVE-2026-59765
  • CWE-73

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo laboratorio su loopback. Nessuna garanzia.

Scarica lo strumento