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
34 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

forgejo-restore-file-open

Classe: Lettura di file Reach: 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 antepone 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
ReachLocale (operatore forgejo restore-repo di 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 / sinkRecon / 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.txtRecon (riservatezza dei file dell'host)Provato in lab. Il corpo dell'allegato è FORGEJO-RESTORE-FILE-OPEN-WITNESS. Il decoy nel dump INSIDE-DUMP-NOT-HOST non è stato servito
Stesso risultato con un symlink piantato dentro il dumpIl percorso risultante dal join resta sotto baseDir; os.Open segue il linkReconDedotto 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>.patchReconDedotto 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>ReconProvato 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 configurazioneReconDedotto. 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). Escape dal join della radice del dump con DownloadURL assoluto (in Go filepath.Join("/dump", "/etc/passwd") resta /dump/etc/passwd). Ripristino HTTP non autenticato (solo CLI / token interno). Backup dump che impacchetta app.ini (segreti by 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. In Go filepath.Join non scarta un secondo argomento assoluto come fa os.path.join di Python. L'input che funziona è il relativo ... Il localFileURL di Gitea non è in questo albero.

Vicoli ciechi già registrati: escape dal join della radice del dump tramite un DownloadURL assoluto; LFI file:// su migrate live; 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

oppure:

cd lab
./run.sh

Target 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

Contenere i percorsi risultanti dal join sotto baseDir dopo EvalSymlinks (Gitea PR 38215 localFileURL). Rifiutare ... Non seguire symlink lato dump fuori dal dump. Rimuovere file:// da uri.Open tranne che per 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 lab su loopback. Nessuna garanzia.

Scarica lo strumento