Translated message

A translation of this page exists in English.

Vulnérabilités de troncature et de dépassement de nombres entiers dans Git (CVE-2016-2315, CVE-2016-2324)

Red Hat Product Security a été mis au fait des vulnérabilités de Git pour lesquelles une vulnérabilité de troncature de nombres entiers (CVE-2016-2315) et une vulnérabilité de débordement de nombres entiers (CVE-2016-2324) peuvent déclencher un débordement dans la mémoire tampon basée segments, et par conséquence, à une exécution de code à distance.

Aperçu général

Git utilise un format spécial pour échanger les informations de référentiels entre le serveur et les clients. C'est ce que l'on appelle le format packfile (fichier PACK).

Un individu malveillant peut créer un fichier PACK qui, une fois envoyé à un serveur ou un client vulnérable, peut entraîner une troncation ou un dépassement de nombres entiers, avec, pour conséquence, une corruption de la mémoire.

Historique

Git est un système de contrôle de révision distribué pourvu d'une architecture décentralisée. À l'encontre des systèmes de contrôle de versions centralisés de modèle client-serveur, Git veille à ce que chaque copie de référentiel Git corresponde à une copie parfaite avec son historique de révision complet. Non seulement cela permet à l'utilisateur de travailler et de contribuer à des projets sans avoir besoin de permissions pour pousser les changements dans leur référentiel officiel, mais cela permet également à l'utilisateur de travailler sans connexion réseau.

Versions concernées

Les versions sorties et prises en charge de Git de Red Hat Enterprise Linux et Red Hat Software Collections sont concernées, comme indiqué dans la liste des produits affectés de la section Solution ci-dessous. De plus, toutes les versions en amont de Git précédant les versions 2.4.11, 2.5.5, 2.6.6, et 2.7.4 sont également affectées par ces vulnérabilités.

Description et impact de l'attaque

Les raisons principales de ces vulnérabilités reposent sur le problème de dépassement et de troncation d'entiers relatifs dans la fonction path_name() du fichier source revision.c, qui est utilisée par Git pour traiter les informations de chemin d'accès. La faiblesse de cette fonction est qu'elle ne parvient pas à assainir des données potentiellement malicieuses, qui auraient pu être reçues par l'intermédiaire d'un fichier PACK de Git spécialement conçu et envoyé par un attaquant, avant de l’analyser, et pouvant mener à une corruption de la mémoire, voire à une exécution arbitraire du code.

Le format packfile est utilisé par Git en interne pour pouvoir échanger des informations de référentiel de manière efficace. Git utilise un certain nombre d'outils d'assistance pour générer les fichier PACK, les envoyer ou les recevoir à travers les points de terminaison Git, et un attaquant peut créer un fichier PACK spécialement conçu qui contiendrait un nom de chemin long (231 octets, environ 2 gigaoctets) ou une arborescence d'éléments de chemin susceptibles de déclencher les vulnérabilités dans la fonction path_name()une fois analysé.

Un tel fichier PACK a été créé et publié publiquement. Il peut être utilisé pour attaquer à la fois les clients et les serveurs.

Pour attaquer un serveur vulnérable, un attaquant devra se faire passer pour un client Git et envoyer le fichier PACK spécialement conçu au serveur vulnérable, par exemple, dans une opération push. Le serveur vulnérable reçoit alors le fichier PACK malicieux du client Git malicieux et, au moment d'analyser les informations de chemin contenu, déclencher les vulnérabilités dans la fonction`path_name(). En général, ce genre d'opération nécessite une authentification. L'attaquant devra avoir pu passer cette authentification pour que l'attaque puisse réussir.

Pour attaquer un client, un attaquant peut créer un référentiel Git malveillant dans un serveur Git et déjouer un utilisateur qui ne se méfie pas, en clonant le référentiel. Le client télécharge ensuite le fichier PACK malicieux du serveur, et déclenche ainsi les vulnérabilités au moment de l'analyse.

Malgré que la taille brute, non compressée du fichier PACK corresponde à 2 gigaoctets en raison des exigences des données importantes du chemin, cela ne veut pas dire que l'attaquant ait à envoyer plusieurs gigaoctets de données à travers le réseau. En raison de la compression utilisée par le format de fichier PACK en interne, et la possibilité d'une compression supplémentaire selon de mécanisme de transport (par ex. SSH), il est sans doute possible d'exploiter les vulnérabilités sur 200 mégaoctets uniquement sur le total des données transférées sur le réseau.

Solution

Tous les utilisateurs Git sont encouragés à mettre leurs systèmes à niveau par ces packages de mise à jour contenant les correctifs rétro-portés pour corriger ces problèmes. Avant d'appliquer cette mise à jour, veillez à ce que toutes les errata précédemment sorties concernant votre système aient bien été appliquées.

Produit Paquet Alerte
Red Hat Enterprise Linux 6 git RHSA-2016-0496
Red Hat Enterprise Linux 7 git RHSA-2016-0496
Red Hat Software Collections git19-git RHSA-2016-0497

Foire aux questions le plus fréquemment posées

J'exécute un serveur Git . Quel est le risque que j’encoure ?

Vous êtes à risque si l'attaquant peut vous envoyer des données malveillantes dans un référentiel Git. Si cela requiert une authentification, l'individu devra tout d'abord satisfaire les besoins d'authentification.

J'exécute un client Git . Quel est le risque que j’encoure ?

Un attaquant peut vous déjouer un clonant en provenance d'un référentiel Git compromis ou non fiable afin d'exploiter cette vulnérabilité.