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-hostmatcher-0001-ssrf — Forgejo 16.0.5 - Alta - Remota - SSRF - hostmatcher consente 0.0.0.1 come IP pubblico | Kitploit
Strumenti/GitHubGitHub/abraxas/forgejo-hostmatcher-0001-ssrf
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration TestingRed TeamingLab e Pratica
GitHubabraxas/forgejo-hostmatcher-0001-ssrf

forgejo-hostmatcher-0001-ssrf

Forgejo 16.0.5 - Alta - Remota - SSRF - hostmatcher consente 0.0.0.1 come IP pubblico

Vedi Repository
14 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-hostmatcher-0001-ssrf

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-hostmatcher-0001-ssrf

forgejo-hostmatcher-0001-ssrf

Classe: SSRF Portata: Remota

Forgejo 16.0.5 (8d24b7d) - Forgejo

Il valore predefinito di [webhook] ALLOWED_HOST_LIST è vuoto, quindi services/webhook/deliver.go costruisce il client con l'external integrato. Quel predicato è Go IsGlobalUnicast() && !isPrivate(). isPrivate è RFC1918/4193 più l'aggiunta CGNAT della v16.0.2. L'RFC 6890 0.0.0.0/8 non è nessuno di questi. 127.0.0.1 è loopback ed è negato. 0.0.0.1 è consentito.

Un utente autenticato può impostare un webhook verso http://0.0.0.1 e leggere il corpo HTTP dalla cronologia degli hook. 127.0.0.1 sulla stessa porta è negato.

IDnessuna CVE al momento
ClasseSSRF
PortataRemota (autenticato; qualsiasi utente che può creare un webhook di repository)
CWECWE-918
CVSSAlto: 7.7 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
ProdottoForgejo
Affettofino alla v16.0.5 (8d24b7d); residuo dell'aggiunta CGNAT della v16.0.2
Authutente autenticato che può creare un webhook di repository
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Registrarsi su un'installazione predefinita, creare un repository, impostare un webhook forgejo verso http://0.0.0.1:<port>/..., testarlo e leggere il corpo della risposta.

PrivilegioMetodo / sinkRecon / integrità / disponibilitàProvato in lab o dedotto
Connettere 0.0.0.1 di questa rete aggirando la allow-list predefinita dei webhookPOST /api/v1/repos/{owner}/{repo}/hooks poi POST .../hooks/{id}/tests con URL http://0.0.0.1:8080/ssrfRecon (HTTP in uscita dall'host Forgejo)Provato in lab. Cronologia memorizza corpo HTTP 200 FORGEJO-HOSTMATCHER-0001-WITNESS
Leggere l'intera risposta HTTP di qualunque cosa abbia rispostoGET /{owner}/{repo}/settings/hooks/{id} stampa ResponseInfo.BodyRecon (SSRF con risposta completa)Provato in lab. Stesso witness nella pagina della cronologia
Stessa classe tramite IPv4-mapped [::ffff:0.0.0.1]Stesso matcher To4() poi checkIPReconDedotto da hostmatcher. Il lab ha usato 0.0.0.1
Raggiungere un listener che si è bindato più ampiamente del loopback nel netns di ForgejoLa connect() di Linux verso 0.0.0.0/8 è this-host una volta che 0.0.0.1 è su loReconProvato in lab contro l'oracle sidecar. Non è un'affermazione su uno specifico IMDS cloud

Chiusi sullo stesso matcher predefinito: 127.0.0.1 (negazione provata in lab nella cronologia), 127.0.0.0/8, RFC1918, CGNAT 100.64.0.0/10, link-local 169.254.0.0/16 incluso IPv4 IMDS, non specificato 0.0.0.0. Il webhook in uscita non ottiene X-Forgejo-Internal-Auth / INTERNAL_TOKEN. Questo non è RCE di per sé.

Questa non è la correzione CGNAT della v16.0.2. Forgejo non ha mai sviluppato una lista di reti riservate in stile Gitea. Stessa classe di gitea-hostmatcher-0000-ssrf.

Come l'ho trovato

La v16.0.2 ha inserito il CGNAT in private. Le patch che aggiungono una deny-list sono un regalo: leggi la lista, poi ti chiedi cosa l'IANA ha ancora che la lista ha dimenticato. Una caccia parallela sosteneva che IsGlobalUnicast di Go 1.26 chiudesse 0.0.0.1. Ho controllato il predicato e i test nel repository. Non coprono mai 0.0.0.1.

Vicoli ciechi già registrati: trattare l'HTTP 201 di creazione webhook come oracle (la cronologia è l'oracle); la consegna verso 127.0.0.1 che riesce (sarebbe un bug diverso - il lab richiede che sia negata); colpire /api/internal con X-Forgejo-Internal-Auth; una reverse shell. Teatro.

Lab

python3 forgejo-hostmatcher-0001-ssrf-Abraxas-Labs.py

oppure:

cd lab
./run.sh

Target solo http://127.0.0.1:19320. Immagine codeberg.org/forgejo/forgejo:16.0.5. L'oracle sidecar condivide il netns di Forgejo sulla porta 8080.

create-hook name=neg-loopback ...
negative-control 127.0.0.1 blocked
create-hook name=hit-0001 ...
poll id=2 witness=True
SUCCESS forgejo-hostmatcher-0001-ssrf how=live pin=v16.0.5 0.0.0.1:8080 HTTP 200 FORGEJO-HOSTMATCHER-0001-WITNESS

La correzione

Trattare l'RFC 6890 0.0.0.0/8 come non-external (una lista di reti riservate, non IsGlobalUnicast). 0.0.0.1 deve essere negato allo stesso modo di 127.0.0.1.

Riferimenti

  • codeberg.org/forgejo/forgejo tag v16.0.5
  • hostmatcher.go
  • Correlato già corretto: v16.0.2 CGNAT
  • Stessa classe su Gitea: gitea-hostmatcher-0000-ssrf
  • RFC 6890
  • CWE-918

Licenza

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

Scarica lo strumento