Cyberattaques alimentées par l'IA : Comment détecter, prévenir et se défendre contre les menaces intelligentes

Lire la suite
Nous utilisons l'intelligence artificielle pour les traductions de sites et, bien que nous nous efforcions d'être précis, il se peut que les traductions ne soient pas toujours exactes à 100 %. Nous vous remercions de votre compréhension.

Analyse et correction de la vulnérabilité de Git CVE-2024-32002

par OPSWAT
Partager cet article
Minh Pham et Thai Do, étudiants de l'Université de technologie de Ho Chi Minh, qui ont participé au programme de bourses OPSWAT .
Des étudiants ont participé au programme de bourses OPSWAT .

Une vulnérabilité critique dans Git permettant des attaques RCE (exécution de code à distance) a été récemment divulguée, impactant plusieurs versions de Git et Microsoft Visual Studio 2017. La vulnérabilité permet aux attaquants de manipuler les référentiels Git à l'aide de submodules, en exploitant un bug dans Git qui permet d'écrire des fichiers en dehors de l'arbre de travail du submodule et dans le répertoire .git/. Ce bogue permet l'exécution d'un hook malveillant alors qu'une opération de clonage de référentiel est toujours en cours [1]. 

La vulnérabilité CVE-2024-32002 affecte Microsoft Visual Studio 2017 version 15.9 et les versions de Git antérieures à 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 et 2.39.4. Elle peut être exploitée dans les environnements où la prise en charge des liens symboliques est activée sur les systèmes d'exploitation insensibles à la casse. 

Informations CVSS (Common Vulnerability Scoring System) 3.x sur la gravité et les vecteurs, avec un score de base de 9.0 qualifié de critique, fournies par GitHub, Inc.

Comprendre Git

Git est un système de contrôle de version distribué, libre et gratuit, conçu pour aider les développeurs de logiciels à gérer leurs bases de code rapidement et efficacement. Il améliore la collaboration entre les membres de l'équipe de développement en organisant et en suivant les modifications apportées aux fichiers et aux répertoires d'une manière standardisée et structurée. 

Git est largement utilisé dans le développement de logiciels. Des plateformes telles que GitHub, GitLab et Bitbucket sont construites sur la base de Git pour améliorer la collaboration entre les développeurs grâce à ses puissantes fonctionnalités : 

  • Enregistrement des modifications traçables apportées aux fichiers de code, connues sous le nom de " commits"
  • Revenir, si nécessaire, sur les versions antérieures des codes édités. 
  • Combiner efficacement les modifications provenant de différentes branches ou contributeurs. 
  • Garder une trace de l'historique des personnes qui ont apporté des modifications et de leurs dates.
Une représentation visuelle de la structure d'un dossier .git, affichant des répertoires tels que config, HEAD, hooks, objects et refs.

Crochets Git 

Lorsqu'un dépôt Git est créé ou cloné à l'aide des commandes git init ou git clone, un répertoire .gitest généré à la racine de l'arbre de travail. La structure du répertoire .git ressemble initialement à ceci : 

Les hooks Git sont des scripts exécutables, situés soit dans le répertoire .git/hooks, soit dans le répertoire .git/modules/module_type/module_name/hooks. Les hooks sont automatiquement déclenchés lorsque des événements spécifiques se produisent dans un dépôt Git.  

Lorsqu'un fichier du répertoire hooks n'a pas de suffixe .sample, les commandes de ce fichier seront exécutées avant ou après une action Git particulière incluse dans le nom du fichier, telle que pre-commit, post-commit, et post-checkout

Sous-modules Git

Un sous-module Git est un enregistrement dans un dépôt Git qui fait référence à un commit spécifique dans un dépôt externe. Lorsqu'un sous-module est ajouté à un dépôt, un nouveau fichier dans le répertoire .gitmodules est créé avec les métadonnées de correspondance entre l'URL du sous-module et son répertoire local. Lorsqu'un dépôt contient plusieurs sous-modules, le fichier .gitmodules contient une entrée pour chacun d'entre eux. [3] 

Diagramme montrant l'interaction entre les dépôts et les sous-modules, illustrant la relation entre le dépôt A, le sous-module B et le dossier C.
Exemple de contenu d'un fichier .gitmodules, présentant la configuration d'un sous-module nommé "Example"
L'image suivante montre à quoi ressemble un fichier .gitmodules : 

Liens symboliques (Symlinks)

Un lien symbolique, également appelé lien symbolique ou lien logiciel, est un fichier qui pointe vers un autre fichier ou répertoire (appelé "cible") en spécifiant son chemin d'accès. Si un lien symbolique est supprimé, sa cible n'est pas affectée. [4] 

Dans Git, un lien symbolique est créé sous la forme d'un fichier avec des métadonnées qui lui permettent de fonctionner comme une référence ou un raccourci vers un autre fichier. Les liens symboliques peuvent être utilisés pour créer plusieurs références à un fichier sans en reproduire le contenu.

Diagramme illustrant les liens symboliques et matériels vers un fichier (Fichier A), montrant comment ces liens accèdent au même contenu de fichier.
Git traite les liens symboliques comme des fichiers spécialisés qui stockent le chemin vers le fichier ou le répertoire qu'ils référencent. 
Visualisation des liens symboliques au sein d'un dépôt Git, démontrant les structures de répertoires et de fichiers et leurs chemins de liens symboliques.
Lorsqu'un dépôt ou une branche contenant un lien symbolique est cloné ou extrait, le lien symbolique stocké dans Git est converti en lien symbolique sur le système de fichiers local. 

Analyse des vulnérabilités de sécurité de GIT

Analyse des correctifs

Pour mieux comprendre les failles de sécurité, les spécialistes de la sécurité procèdent souvent à une analyse des correctifs. Il s'agit d'une technique qui permet d'identifier les fonctions vulnérables et les vecteurs d'attaque potentiels. Les membres d'OPSWAT ont examiné les modifications apportées à la version corrigée pour remédier à la vulnérabilité CVE-2024-32002, et ils ont constaté que deux fichiers avaient été mis à jour pour remédier à cette vulnérabilité.

L'un des fichiers mis à jour est le fichier submodule--helper.c, qui inclut le code qui gère le clonage des submodules Git. Le nouveau commit dans la version corrigée incluait les deux suivants :  

  1. Ajout de la fonction dir_contains_only_dotgit pour s'assurer que le répertoire des sous-modules ne contient aucun fichier ou répertoire .git.
Modifications du code dans un fichier nommé submodule-helper.c dans l'interface Git, montrant 83 ajouts et aucune suppression.
  1. Des modifications ont été apportées à la fonction clone_submodule() afin d'inclure une condition permettant de vérifier si le répertoire du sous-module existe et s'il est vide. Si le répertoire n'est pas vide, le processus de clonage est interrompu. 
Extrait de code détaillé d'un commit Git, mettant en évidence une fonction vérifiant le contenu d'un répertoire lors des opérations sur les sous-modules.

La deuxième mise à jour du nouveau commit se trouve dans le fichier t/t7406-submodule-update.sh, ajoutant un script de test pour vérifier que la vulnérabilité de sécurité a été résolue. 

Modification du code dans un fichier de test T7406-submodule-update.sh, détaillant les configurations de test pour les chemins d'accès aux sous-modules et les liens symboliques.

De l'analyse à l'exploitation

Analyse du flux de travail des liens symboliques et des sous-modules dans Git

En plus des informations recueillies lors de l'analyse des correctifs et de la description de la vulnérabilité CVE-2024-32002, les boursiers OPSWAT ont travaillé sur l'étude du flux de travail des liens symboliques et des sous-modules dans Git. Ils ont décomposé la séquence d'événements qui se produit lorsqu'un utilisateur clone un dépôt :

  1. Git commence par télécharger les fichiers et les répertoires du dépôt principal. 
  2. Il utilise les définitions spécifiées dans les fichiers de liens symboliques pour recréer les liens symboliques correspondants dans le système de fichiers local.  
  3. Si le lien symbolique pointe vers un fichier existant, il sera fonctionnel ; sinon, il restera inopérant jusqu'à ce que la cible soit restaurée.  
  4. Si le dépôt est cloné avec l'option --recursive, Git clone les sous-modules (dépôts externes) et les place dans les répertoires indiqués dans le fichier .gitmodules.  
  5. Si un lien symbolique fait partie du chemin du sous-module (par exemple, util/module/test, où util est un lien symbolique pointant vers un autre répertoire, tel que symlink_folder), Git stockera le contenu du sous-module dans le répertoire référencé par le lien symbolique (par exemple, symlink_folder/module/test), tout en autorisant l'accès par le chemin original du lien symbolique. 
Un organigramme visuel montrant les étapes du clonage d'un référentiel, du téléchargement des fichiers et des répertoires, de la recréation des liens symboliques, du clonage des sous-modules et du déplacement dans le bon chemin.

Comprendre la vulnérabilité de sécurité CVE-2024-32002 de Git 

Création de dépôts malveillants

Les membres d'OPSWAT ont examiné plus en détail la création de dépôts malveillants sur la base des mises à jour effectuées pour le fichiert/t7406-submodule-update.sh et ont décomposé ce processus en plusieurs étapes :

  1. Création d'un référentiel contenant un crochet de post-contrôle
Un extrait de code terminal montrant les commandes pour mettre en place un crochet de post-contrôle dans Git, y compris la création de répertoires et l'ajout de scripts.
  1. Création d'un autre référentiel comprenant un sous-module, situé dans le chemin A/modules/x. Le nouveau sous-module fait référence au référentiel créé précédemment.
Un extrait de code terminal démontrant le processus d'ajout d'un sous-module à un dépôt à l'aide de commandes Git
  1. Création d'un lien symbolique nommé a, pointant vers le dossier .git dans l'index Git. 
Un exemple de script de terminal mettant en évidence les commandes pour créer et livrer un fichier .git en tant qu'utilitaire dans un dépôt.
Organigramme détaillant un scénario d'attaque dans lequel un référentiel de crochets malveillants est ajouté en tant que sous-module à un référentiel principal, ce qui entraîne l'exécution de scripts.
Un diagramme montrant comment un attaquant peut exploiter la CVE en clonant un référentiel. 

Comprendre la faille de sécurité

Lorsqu'un utilisateur clone un dépôt malveillant, créé à l'étape précédente, à l'aide de l'option --recursive, le script malveillant du crochet post-checkout est déclenché, ce qui permet à l'attaquant de compromettre l'appareil de l'utilisateur. 

Cette exécution de code à distance se produit parce que le dépôt principal détecte un lien symbolique nommé a qui pointe vers le répertoire .git lorsqu'il est cloné. Avec le mode récursif activé, les sous-modules sont également tirés dans le dépôt cloné. Ce dépôt contient un dossier hooks, qui contient le script de hook post-contrôle, et son répertoire local est dans A/modules/x.  

Puisque a pointe vers le répertoire.git et que le système de fichiers n'est pas sensible à la casse, A est interprété comme équivalent à a. Git est induit en erreur en écrivant le script de crochet post-contrôle dans le répertoire .git/modules/query/fast/hooks/. Si un script de crochet de post-contrôle est trouvé dans le répertoire . git/modules/{module_type}/{nom_du_module}/hooks, il sera déclenché lorsque le référentiel principal est cloné avec l'option --recursive. En conséquence, les attaquants peuvent compromettre avec succès l'appareil de l'utilisateur en exécutant du code à distance.

Un diagramme illustrant l'interaction de la victime avec un référentiel malveillant, y compris le clonage, l'extraction de sous-modules et l'exécution involontaire de scripts.
Un diagramme montrant le déroulement de l'attaque

Simulation de l'exploitation de la vulnérabilité de Git

Sur la base des résultats précédents, OPSWAT Fellows a créé un dépôt principal et un crochet pour simuler la création d'un dépôt malveillant :

  1. Initialement, il est recommandé de configurer Git pour qu'il autorise toujours le fichier protocol.file, qu'il active les liens symboliques core.symlinks et qu'il fixe le nom de la branche par défaut à main (pour éviter le message d'avertissement). 
Un extrait de terminal présentant les commandes permettant de configurer globalement les paramètres de Git pour la gestion des liens symboliques et la configuration des branches par défaut.
  1. Un script malveillant de type " postcheckout hook" est ajouté au répertoire "hooks". Pour s'assurer que le script de post-contrôle peut être exécuté sur l'appareil de l'utilisateur, le script bash qui crée ce crochet inclut la commande chmod +x fast/hooks/post-checkout
Un script de terminal affichant une commande Python encodée malveillante intégrée dans un crochet Git de post-contrôle.
  1. Un lien symbolique est créé dans le dépôt principal, pointant vers le répertoire .git.
Un script de terminal démontrant le processus de validation des modifications des utilitaires d'inclusion et d'un fichier .git dans le référentiel.
Capture d'écran de la liste des répertoires d'un dépôt avec des dossiers tels que src, libs et .gitmodules affichés dans une interface Git.
Le dépôt principal vulnérable
Capture d'écran de l'interface d'un dépôt Git montrant un répertoire avec un crochet de post-contrôle.

Le dossier /hooks avec un crochet de post-contrôle

Capture d'écran montrant les commandes de terminal pour le clonage d'un dépôt Git et une session PowerShell avec une connexion réseau établie
Lorsque l'utilisateur clone ce dépôt malveillant, l'attaquant peut compromettre l'appareil de la victime. 

Remédiation

Pour neutraliser la menace, les utilisateurs peuvent désinstaller Git ou appliquer le dernier correctif de sécurité. Sinon, une solution comme MetaDefender Endpoint peut avertir rapidement l'utilisateur et afficher toutes les CVE connues dans l'environnement grâce à son interface intuitive. MetaDefender Endpoint peut détecter et atténuer les dernières CVE en tirant parti de ses capacités avec plus de 3 millions de points de données et plus de 30 000 CVE associées avec des informations sur la gravité. En mettant en œuvre l'une ou l'autre des contre-mesures, le CVE sera entièrement contenu, éliminant ainsi le risque d'une cyberattaque dévastatrice.

Êtes-vous prêt à mettre MetaDefender Endpoint en première ligne de votre stratégie de cybersécurité ?


Restez à jour avec OPSWAT!

Inscrivez-vous dès aujourd'hui pour recevoir les dernières mises à jour de l'entreprise, de l'entreprise, des histoires, des informations sur les événements, et plus encore.