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-keys-idor — Forgejo 16.0.5 - Alta - Remota - IDOR - GET /api/v1/user/keys/{id} restituisce le chiavi SSH e deploy di altri utenti | Kitploit
Strumenti/GitHubGitHub/abraxas/forgejo-keys-idor
Autenticazione e AutorizzazioneAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebRaccolta InformazioniPenetration TestingSicurezza delle APILab e Pratica
GitHubabraxas/forgejo-keys-idor

forgejo-keys-idor

Forgejo 16.0.5 - Alta - Remota - IDOR - GET /api/v1/user/keys/{id} restituisce le chiavi SSH e deploy di altri utenti

53 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
Vedi Repository

Abraxas Labs - forgejo-keys-idor

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-keys-idor

forgejo-keys-idor

Classe: IDOR Portata: Remota

Forgejo 16.0.5 (8d24b7d) - Forgejo

GET /api/v1/user/keys/{id} si trova nel gruppo dell'utente corrente (reqToken, scope utente). L'handler carica comunque public_key tramite ID numerico senza alcun controllo del proprietario. La stessa tabella contiene chiavi utente, deploy key e principal. GPG su questa versione lo fa correttamente: GetGPGKeyForUserByID(ctx, ctx.Doer().ID, id). I campi extra privati sono protetti. Il materiale della chiave pubblica, il titolo e il fingerprint non lo sono. Gli ID sono sequenziali.

Un token read:user scorre 1, 2, 3 e inventaria le chiavi SSH e deploy di altre persone.

IDnessuna CVE al momento
ClasseIDOR
PortataRemota (autenticato read:user / sessione)
CWECWE-639
CVSSAlto: 7.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
ProdottoForgejo
Affettofino alla v16.0.5 (8d24b7d)
Authautenticato (token read:user o sessione)
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Registrare o usare qualsiasi account, generare un token read:user (o usare un cookie di sessione), scorrere /api/v1/user/keys/{id}. Ottiene titoli, fingerprint e materiale della chiave pubblica per chiavi che non possiede. Non ottiene la chiave privata. Non ottiene una shell. Inventaria chi ha accesso a cosa.

PrivilegioMetodo / sinkRecon / integrità / disponibilitàProvato in lab o dedotto
Leggere titolo, fingerprint e materiale della chiave pubblica SSH di un altro utenteGET /api/v1/user/keys/{id} come proprietario estraneoRecon (riservatezza dell'inventario delle chiavi pubbliche)Provato in lab. Titolo witness FORGEJO-KEYS-IDOR-WITNESS su id 1; la lista dell'attaccante contiene solo id 2
Inventariare le deploy key allo stesso modoStesso handler, righe KeyTypeDeploy in public_key (OwnerID 0)ReconDedotto dalla tabella. Il lab ha piazzato una chiave SSH utente, non una deploy key
Leggere i principal dei certificati SSHStesso handler, righe KeyTypePrincipal. ListPublicKeys esclude questo tipoReconDedotto dalla tabella
Vedere chiavi che appartengono a utenti limitati o privatiNessun controllo di visibilità su questa lookupReconDedotto dall'handler
JSON extra (user, key_type, read_only)appendPrivateInformation solo se admin o proprietarioReconProvato in lab chiuso: la risposta per non-proprietario non aveva il campo user

Chiusi su questa route: materiale della chiave privata, una shell, GET /users/{username}/keys (lista pubblica con scope per username), GPG GET /api/v1/user/gpg_keys/{id} (404 su un id estraneo), DeletePublicKey (403 per proprietario/admin). Cross-repo GET /repos/{owner}/{repo}/keys/{id} restituisce 404 quando RepoID non corrisponde.

Le patch di sicurezza della v16.0.5 (#14370) erano RCE via git-apply e CSRF su OpenID. Non hanno chiuso questa lookup. Stessa classe di gitea-user-keys-idor, indipendentemente ancora aperta qui.

Come l'ho trovata

Ho fissato Forgejo v16.0.5 dopo l'ondata del 2026-09. Gitea 1.27.3 aveva ancora questa lookup. Forgejo si è diversificato, quindi ho riletto l'handler delle chiavi dell'utente corrente accanto a GPG invece di copiare il pacchetto Gitea. GPG restituisce 404 su un id estraneo. SSH no.

Vicoli ciechi già registrati: trattare la lista dell'attaccante stesso come la fuga (non lo è - la lista ha scope, il GET-by-id no); trattare DISABLE_REGISTRATION=true sull'installer come una chiusura (qualsiasi account esistente è sufficiente); una reverse shell. Teatro.

Lab

python3 forgejo-keys-idor-Abraxas-Labs.py

oppure:

cd lab
./run.sh

Target solo http://127.0.0.1:19310. Immagine codeberg.org/forgejo/forgejo:16.0.5. Due account. Witness FORGEJO-KEYS-IDOR-WITNESS.

IOC planted victim-id=1 attacker-id=2
IOC attacker-list status=200 ... title=attacker-own-key
IOC get id=1 status=200 ... FORGEJO-KEYS-IDOR-WITNESS
IOC gpg-neg id=1 status=404
SUCCESS forgejo-keys-idor victim-id=1 get-http=200 list-has-id=no gpg-http=404 FORGEJO-KEYS-IDOR-WITNESS

La correzione

404 a meno che key.OwnerID == ctx.Doer().ID (o site admin). Rifiutare KeyTypeDeploy / KeyTypePrincipal su questa route. Allinearsi a GetGPGKeyForUserByID.

Riferimenti

  • codeberg.org/forgejo/forgejo tag v16.0.5
  • GetPublicKey
  • Stessa classe su Gitea: gitea-user-keys-idor
  • Vicino, già patchato (non questa lookup): patch di sicurezza v16.0.5
  • CWE-639

Licenza

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

Scarica lo strumento