Gitblit Embedded SSH Auth Bypass (CVE-2024-28080)
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Sažetak
CVE-2024-28080 je authentication bypass u Gitblit‑ovom embedded SSH servisu zbog incorrect session state handling pri integraciji sa Apache MINA SSHD. Ako korisnički nalog ima bar jedan SSH public key registrovan, napadač koji zna username i neki od public keys tog korisnika može se autentifikovati bez private key i bez password‑a.
- Affected: Gitblit < 1.10.0 (observed on 1.9.3)
- Fixed: 1.10.0
- Requirements to exploit:
- Git over SSH enabled on the instance
- Victim account has at least one SSH public key registered in Gitblit
- Attacker knows victim username and one of their public keys (often discoverable, e.g., https://github.com/
.keys)
Glavni uzrok (state leaks between SSH methods)
U RFC 4252, public‑key authentication ide u dve faze: server prvo proverava da li je prosleđeni public key acceptable za dati username, i tek nakon challenge/response sa signature autentifikuje korisnika. U MINA SSHD, PublickeyAuthenticator se poziva dva puta: prilikom key acceptance (još bez signature) i kasnije nakon što klijent vrati signature.
Gitblit‑ov PublickeyAuthenticator je izmenio session context pri prvom, pre‑signature pozivu tako što je vezao autentifikovani UserModel za session i vratio true (“key acceptable”). Kada se kasnije autentikacija vratila na password, PasswordAuthenticator je verovao toj izmenjenoj session state i short‑circuited, vraćajući true bez validacije password‑a. Kao rezultat, bilo koji password (uključujući prazan) je bio prihvaćen nakon prethodne public‑key “acceptance” za istog korisnika.
High‑level flawed flow:
- Client offers username + public key (no signature yet)
- Server recognizes the key as belonging to the user and prematurely attaches user to the session, returns true (“acceptable”)
- Client cannot sign (no private key), so auth falls back to password
- Password auth sees a user already present in session and unconditionally returns success
Eksploatacija korak po korak
- Prikupite username žrtve i jedan od njihovih public keys:
- GitHub exposes public keys at https://github.com/
.keys - Public servers often expose authorized_keys
- Konfigurišite OpenSSH da predstavi samo public half tako da generisanje signature ne uspe, prisiljavajući fallback na password dok se i dalje pokreće public‑key acceptance path na serveru.
Example SSH client config (no private key available):
# ~/.ssh/config
Host gitblit-target
HostName <host-or-ip>
User <victim-username>
PubkeyAuthentication yes
PreferredAuthentications publickey,password
IdentitiesOnly yes
IdentityFile ~/.ssh/victim.pub # public half only (no private key present)
Povežite se i pritisnite Enter pri upitu za lozinku (ili unesite bilo koji niz):
ssh gitblit-target
# or Git over SSH
GIT_SSH_COMMAND="ssh -F ~/.ssh/config" git ls-remote ssh://<victim-username>@<host>/<repo.git>
Autentifikacija uspeva zato što je ranija public‑key faza izmenila sesiju u autentifikovanog korisnika, a password auth pogrešno veruje tom stanju.
Napomena: Ako je ControlMaster multiplexing omogućen u vašem SSH configu, naredne Git komande mogu ponovo koristiti autentifikovanu konekciju, čime se povećava impact.
Impact
- Potpuna impersonacija bilo kog Gitblit korisnika sa najmanje jednim registrovanim SSH public key
- Read/write pristup repozitorijumima u skladu sa permisijama žrtve (source exfiltration, unauthorized pushes, supply‑chain risks)
- Potencijalni administrativni uticaj ako se cilja admin korisnik
- Čisti network exploit; nije potreban brute force ili private key
Detection ideas
- Pregledajte SSH logove za sekvence u kojima pokušaj publickey bude praćen uspešnom password authentication sa praznim ili vrlo kratkim password-om
- Potražite tokove: publickey metoda koja nudi nepodržani/neslagajući key material, nakon čega sledi trenutni password success za isti username
Mitigations
- Ažurirajte Gitblit na v1.10.0+
- Dok se ne ažurira:
- Onemogućite Git over SSH na Gitblit, ili
- Ograničite network pristup SSH servisu, i
- Pratite sumnjive obrasce opisane gore
- Promenite kredencijale pogođenih korisnika ako se sumnja na kompromitovanje
General: abusing SSH auth method state‑leakage (MINA/OpenSSH‑based services)
Pattern: Ako public‑key authenticator servera mutira user/session state tokom pre‑signature “key acceptable” faze, i drugi authenticators (npr. password) veruju tom stanju, možete zaobići autentifikaciju tako što ćete:
- Predstaviti legitimni public key za ciljног korisnika (bez private key)
- Prinuditi klijenta da ne uspe u signing-u tako da server pređe na password
- Uneti bilo koji password dok password authenticator short‑circuits na leaked state
Praktični saveti:
- Public key harvesting at scale: povucite public keys sa uobičajenih izvora kao što su https://github.com/
.keys, organizacione direktorijume, team pages, leaked authorized_keys - Forcing signature failure (client‑side): postavite IdentityFile na samo .pub, set IdentitiesOnly yes, zadržite PreferredAuthentications da uključuje publickey pa password
- MINA SSHD integration pitfalls:
- PublickeyAuthenticator.authenticate(…) must not attach user/session state until the post‑signature verification path confirms the signature
- PasswordAuthenticator.authenticate(…) must not infer success from any state mutated during a prior, incomplete authentication method
Related protocol/design notes and literature:
- SSH userauth protocol: RFC 4252 (publickey method is a two‑stage process)
- Historical discussions on early acceptance oracles and auth races, e.g., CVE‑2016‑20012 disputes around OpenSSH behavior
References
- Gitblit CVE-2024-28080: SSH public‑key fallback to password authentication bypass (Silent Signal blog)
- Gitblit v1.10.0 release notes
- Apache MINA SSHD project
- PublickeyAuthenticator API
- RFC 4252: The Secure Shell (SSH) Authentication Protocol
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

