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
forgejo-restore-file-open — Forgejo 16.0.5 - Alto - Remoto - Lettura di file - restore-repo segue file:// lato dump negli allegati | Kitploit
Strumenti/GitHubGitHub/abraxas/forgejo-restore-file-open
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebRaccolta InformazioniPenetration TestingLab e Pratica
GitHubabraxas/forgejo-restore-file-open

forgejo-restore-file-open

Forgejo 16.0.5 - Alto - Remoto - Lettura di file - restore-repo segue file:// lato dump negli allegati

Vedi Repository
189 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 - forgejo-restore-file-open

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

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

forgejo-restore-file-open

Classe: Lettura di file Portata: Locale

Forgejo 16.0.5 (8d24b7d) - Forgejo

forgejo restore-repo di un dump non attendibile riscrive gli URL degli asset di release con filepath.Join(baseDir, download_url) grezzo e aggiunge il prefisso file://. uri.Open esegue comunque os.Open su quel percorso. Un --units vuoto ripristina le release. Gitea 1.27.0 ha aggiunto localFileURL e ha saltato l'escaping delle voci. Quell'helper qui non c'è.

Il ripristino da parte dell'operatore di un dump non attendibile copia un file dell'host che l'uid forgejo può aprire in un allegato di release.

IDnessuna CVE al momento
ClasseLettura di file
PortataLocale (forgejo restore-repo dell'operatore su un dump non attendibile)
CWECWE-22 / CWE-73
CVSSAlto: 7.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
ProdottoForgejo
Affettofino alla v16.0.5 (8d24b7d); ripristino locale da parte dell'operatore
Authripristino locale da parte dell'operatore di un dump non attendibile
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Consegnare all'operatore una directory di dump (o disporre già di INTERNAL_TOKEN e di un percorso che il server può leggere). Le unità includono releases / release_assets.

PrivilegioMetodo / sinkRicognizione / integrità / disponibilitàProvato in lab o dedotto
Leggere un file dell'host che l'uid forgejo può aprire, tramite .. fuori dal dumprelease.yml download_url: ../FORGEJO-FILE-WITNESS.txt; il ripristino esegue il join, uri.Open esegue os.Open, i byte vengono memorizzati come witness.txtRicognizione (riservatezza dei file dell'host)Provato in lab. Il corpo dell'allegato è FORGEJO-RESTORE-FILE-OPEN-WITNESS. L'esca interna al dump INSIDE-DUMP-NOT-HOST non è stata servita
Stesso risultato con un symlink inserito nel dumpIl percorso risultante dal join resta sotto baseDir; os.Open segue il linkRicognizioneDedotto da uri.Open file -> os.Open. Il lab ha usato .., non un symlink
Stesso sink sulle patch delle PRpull_request.yml PatchURL viene riscritto allo stesso modo, poi uri.Open in repo/pulls/<n>.patchRicognizioneDedotto da restore.go GetPullRequests. Il lab ha ripristinato solo le release
I lettori del repo ripristinato scaricano il file dell'hostGET /<owner>/<repo>/releases/download/<tag>/<name>RicognizioneProvato in lab come labadmin Basic sul repo pubblico ripristinato
File tipici dell'host: app.ini, INTERNAL_TOKEN, SECRET_KEY, password del DBl'uid forgejo può leggere l'albero di configurazioneRicognizioneDedotto. Il witness del lab era un file piantato accanto al dump, non segreti reali

Chiusi qui: LFI file:// live su POST /repos/migrate (DownloadFunc impostato; PatchURL delle PR verificato con prefisso rispetto alla base HTTP del clone). Fuga dal join della radice del dump con DownloadURL assoluto (filepath.Join("/dump", "/etc/passwd") di Go resta /dump/etc/passwd). Ripristino HTTP non autenticato (solo CLI / token interno). Backup dump che impacchetta app.ini (segreti per design, modalità archivio 0600). Non è OS LPE. Non è LFI remoto.

Come l'ho trovato

Avevo due idee di ripristino. Ho prima ragionato mentalmente sul join assoluto di Gitea. filepath.Join di Go non scarta un secondo argomento assoluto come fa os.path.join di Python. L'input che funziona è .. relativo. localFileURL di Gitea non è presente in questo albero.

Percorsi errati già registrati: fuga dalla join su dump-root tramite un DownloadURL assoluto; LFI file:// in live migrate; X-Forgejo-Internal-Auth (il ripristino è CLI come uid forgejo, non /api/internal); trattare il ripristino HTTP come remoto non autenticato; una reverse shell. Teatro.

Lab

python3 forgejo-restore-file-open-Abraxas-Labs.py

o:

cd lab
./run.sh

Indirizza solo http://127.0.0.1:19340. Immagine codeberg.org/forgejo/forgejo:16.0.5. Witness FORGEJO-RESTORE-FILE-OPEN-WITNESS.

IOC asset name='witness.txt' ...
IOC download status=200 bytes=34 snippet=b'FORGEJO-RESTORE-FILE-OPEN-WITNESS\n'
SUCCESS forgejo-restore-file-open how=live ..-join file:// os.Open FORGEJO-RESTORE-FILE-OPEN-WITNESS

La correzione

Contiene i percorsi uniti sotto baseDir dopo EvalSymlinks (Gitea PR 38215 localFileURL). Rifiuta ... Non seguire i symlink lato dump al di fuori del dump. Rimuovi file:// da uri.Open tranne un helper con radice nel dump.

Riferimenti

  • codeberg.org/forgejo/forgejo tag v16.0.5
  • restore.go · uri.go
  • Stessa classe su Gitea: gitea-restore-file-open
  • CWE-22 · CWE-73

Licenza

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

Scarica lo strumento