
Proof-of-concept e laboratorio per una divulgazione di informazioni non autenticata in Gitea: l'API stargazers e watchers espone nomi utente che gli endpoint del profilo nascondono.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitea-stargazers-hidden
Gitea 1.27.3 - Gitea
Gli utenti limited e private dovrebbero sparire dalla vista degli osservatori anonimi. GetInfo restituisce già 404 per loro. Le liste dei follower applicano già isUserVisibleToViewerCond in SQL. GetStargazers è una join su star senza filtro di visibilità. ListStargazers poi esegue convert.ToUser su tutto. ListSubscribers ha la stessa forma per i watcher.
Senza effettuare il login, il JSON degli stargazers di un repo pubblico nomina utenti che GET /users/{name} nasconde.
| ID | nessuna CVE al momento |
| CWE | CWE-200 |
| CVSS | Medium: 5.3 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N |
| Prodotto | Gitea |
| Affetto | fino alla v1.27.3 (146cc3e) |
| Auth | non autenticato |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1 |
Senza effettuare il login, leggere gli stargazers e i watcher di un repo pubblico e scoprire username che GET /users/{name} nasconde. Si tratta di ricognizione su account limited e private che hanno messo una stella o guardato qualcosa di pubblico: persone che hanno impostato la visibilità per non comparire nella ricerca, ma che hanno comunque cliccato sulla stella.
È uno username, non un'email, non una lettura di git privato, non RCE. Combinato con l'oracolo Follow 204 vs 404, puoi confermare che un login nascosto esiste anche quando il profilo restituisce 404.
La visibilità è stata un tema della ondata di GHSA della 1.27.3. Quando un prodotto restituisce 404 su un profilo di proposito, la domanda successiva è quali endpoint di lista eseguono ancora la join su user senza quella condizione. Stars e watchers lo fanno.
Ho creato hidstar come limited, ha messo una stella e guardato un repo pubblico, e ho colpito l'istanza senza token. GET /api/v1/users/hidstar non autenticato restituisce 404. Il JSON degli stargazers non autenticato include hidstar. I watcher non autenticati includono hidstar. L'HTML dei follower non autenticato no. Il profilo è timido. La tabella delle stelle no.
Vicoli ciechi già registrati: GET /users/hidstar non autenticato che restituisce 200 (allora la visibilità è del tutto disattivata - il lab richiede 404); l'HTML dei follower che elenca hidstar (quel percorso applica già la condizione); trattare un 200 su /stargazers con soli nomi pubblici come SUCCESS; una reverse shell. Teatro. La fuga è il login limited nel JSON.
cd lab
./run.sh
Target solo http://127.0.0.1:18133. Compose consente la visibilità public,limited,private e lascia le stelle attive.
unauth-user-get status=404
unauth-stargazers status=200 stargazer-names=['hidstar']
unauth-watchers leak=True
unauth-followers-web limited-in-html=False
SUCCESS GITEA-STARGAZERS-HIDDEN
Applicare isUserVisibleToViewerCond in GetStargazers / GetRepoWatchers. Gli stargazers e i watcher non autenticati devono omettere hidstar allo stesso modo in cui già fanno i follower.
star.go · modello star.go · subscriber.go · GetInfo · GetUserFollowersGNU Affero GPL v3.0. Vedi LICENSE. Solo lab su loopback. Nessuna garanzia.