Gitblit Embedded SSH Auth Bypass (CVE-2024-28080)
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Résumé
CVE-2024-28080 est un contournement dâauthentification dans le service SSH embarquĂ© de Gitblit dĂ» Ă une gestion incorrecte de lâĂ©tat de session lors de lâintĂ©gration avec Apache MINA SSHD. Si un compte utilisateur possĂšde au moins une clĂ© publique SSH enregistrĂ©e, un attaquant qui connaĂźt le nom dâutilisateur et lâune des clĂ©s publiques de cet utilisateur peut sâauthentifier sans la clĂ© privĂ©e et sans le mot de passe.
- Affecté : Gitblit < 1.10.0 (observé sur 1.9.3)
- Corrigé : 1.10.0
- Conditions nécessaires pour exploiter :
- Git over SSH activĂ© sur lâinstance
- Le compte victime a au moins une clé publique SSH enregistrée dans Gitblit
- Lâattaquant connaĂźt le nom dâutilisateur de la victime et lâune de ses clĂ©s publiques (souvent dĂ©couvrable, p.ex. https://github.com/
.keys)
Cause racine (state leaks between SSH methods)
Dans la RFC 4252, lâauthentification par clĂ©âpublique se dĂ©roule en deux phases : le serveur vĂ©rifie dâabord si une clĂ© publique fournie est acceptable pour un nom dâutilisateur, et ce nâest quâaprĂšs un challenge/rĂ©ponse avec une signature quâil authentifie lâutilisateur. Dans MINA SSHD, le PublickeyAuthenticator est invoquĂ© deux fois : lors de lâacceptation de la clĂ© (pas encore de signature) et plus tard aprĂšs que le client renvoie une signature.
Le PublickeyAuthenticator de Gitblit a mutĂ© le contexte de session lors du premier appel prĂ©âsignature en liant le UserModel authentifiĂ© Ă la session et en retournant true (âkey acceptableâ). Lorsque lâauthentification est ensuite retombĂ©e sur le mot de passe, le PasswordAuthenticator sâest fiĂ© Ă cet Ă©tat de session mutĂ© et a courtâcircuitĂ©, retournant true sans valider le mot de passe. En consĂ©quence, nâimporte quel mot de passe (y compris vide) Ă©tait acceptĂ© aprĂšs une âacceptationâ prĂ©alable par clĂ©âpublique pour le mĂȘme utilisateur.
Flux défaillant (haut niveau) :
- Le client propose nom dâutilisateur + clĂ© publique (pas encore de signature)
- Le serveur reconnaĂźt que la clĂ© appartient Ă lâutilisateur et attache prĂ©maturĂ©ment lâutilisateur Ă la session, retourne true (âacceptableâ)
- Le client ne peut pas signer (pas de clĂ© privĂ©e), donc lâauthentification retombe sur le mot de passe
- Lâauthentification par mot de passe voit un utilisateur dĂ©jĂ prĂ©sent dans la session et renvoie inconditionnellement le succĂšs
Exploitation pas Ă pas
- Recueillir le nom dâutilisateur dâune victime et lâune de ses clĂ©s publiques :
- GitHub expose les clés publiques à https://github.com/
.keys - Les serveurs publics exposent souvent authorized_keys
- Configurer OpenSSH pour ne prĂ©senter que la moitiĂ© publique afin que la gĂ©nĂ©ration de signature Ă©choue, forçant un retour arriĂšre vers le mot de passe tout en dĂ©clenchant quand mĂȘme le chemin dâacceptation par clĂ©âpublique sur le serveur.
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)
Connectez-vous et appuyez sur EntrĂ©e Ă lâinvite du mot de passe (ou tapez nâimporte quelle chaĂźne) :
ssh gitblit-target
# or Git over SSH
GIT_SSH_COMMAND="ssh -F ~/.ssh/config" git ls-remote ssh://<victim-username>@<host>/<repo.git>
Lâauthentification rĂ©ussit parce que la phase prĂ©cĂ©dente de publicâkey a mutĂ© lâĂ©tat de session en celui dâun utilisateur authentifiĂ©, et password auth fait incorrectement confiance Ă cet Ă©tat.
Note : Si le ControlMaster multiplexing est activĂ© dans la configuration SSH, les commandes Git suivantes peuvent rĂ©utiliser la connexion authentifiĂ©e, augmentant lâimpact.
Impact
- Usurpation complĂšte de nâimporte quel utilisateur Gitblit disposant dâau moins une SSH public key enregistrĂ©e
- AccĂšs en lecture/Ă©criture aux repositories selon les permissions de la victime (exfiltration de code source, pushes non autorisĂ©s, risques pour la chaĂźne dâapprovisionnement)
- Impact administratif possible si un utilisateur admin est ciblé
- Exploit purement réseau ; pas de brute force ni de private key requis
Idées de détection
- Passer en revue les logs SSH pour des sĂ©quences oĂč une tentative publickey est suivie dâune authentification password rĂ©ussie avec un mot de passe vide ou trĂšs court
- Rechercher des flux : la mĂ©thode publickey propose un matĂ©riel de clĂ© non pris en charge/incompatible suivi dâun succĂšs immĂ©diat de password pour le mĂȘme nom dâutilisateur
Atténuations
- Mettre Ă jour vers Gitblit v1.10.0+
- JusquâĂ la mise Ă jour :
- Désactiver Git over SSH sur Gitblit, ou
- Restreindre lâaccĂšs rĂ©seau au service SSH, et
- Surveiller les schĂ©mas suspects dĂ©crits ciâdessus
- Réinitialiser les identifiants des utilisateurs affectés si une compromission est suspectée
GĂ©nĂ©ral : abus du stateâleakage des mĂ©thodes dâauth SSH (services basĂ©s sur MINA/OpenSSH)
ModĂšle : Si lâauthenticator publicâkey dâun serveur modifie lâĂ©tat user/session pendant la phase prĂ©âsignature âkey acceptableâ et que dâautres authenticators (p.ex. password) font confiance Ă cet Ă©tat, vous pouvez contourner lâauthentification en :
- PrĂ©sentant une public key lĂ©gitime pour lâutilisateur cible (pas de private key)
- Forçant le client à échouer la signature pour que le serveur retombe sur password
- Fournissant nâimporte quel password pendant que le password authenticator courtâcircuite sur lâĂ©tat leaked
Conseils pratiques :
- Public key harvesting at scale: pull public keys from common sources such as https://github.com/
.keys, organizational directories, team pages, leaked authorized_keys - Forcer lâĂ©chec de signature (cĂŽtĂ© client) : pointer IdentityFile vers uniquement le .pub, dĂ©finir IdentitiesOnly yes, garder PreferredAuthentications pour inclure publickey puis password
- MINA SSHD integration pitfalls :
- PublickeyAuthenticator.authenticate(âŠ) ne doit pas attacher lâĂ©tat user/session tant que le chemin de vĂ©rification postâsignature ne confirme la signature
- PasswordAuthenticator.authenticate(âŠ) ne doit pas infĂ©rer le succĂšs Ă partir dâun Ă©tat mutĂ© pendant une mĂ©thode dâauthentification antĂ©rieure incomplĂšte
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
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

