
Analyse détaillée de CVE-2022-21668, une vulnérabilité critique d'exécution de code à distance (RCE) dans l'analyse du fichier requirements.txt de Pipenv, incluant le code du bogue, les mécanismes d'exploitation et la validation du correctif.
Dans ce document, la vulnérabilité de Pipenv (CVE-2022-21668) est discutée en détail. Les sections suivantes couvrent le code défectueux dans le fichier pipenv/utils.py qui ouvre la porte à diverses attaques RCE, ainsi que le correctif récent qui valide la connexion SSL/TLS et vérifie le nom d'hôte par rapport à une liste d'hôtes de confiance.
Pipenv Pipenv est un outil qui crée et gère automatiquement un environnement virtuel (virtualenv) pour vos projets, et ajoute/supprime des paquets de votre Pipfile lorsque vous installez/désinstallez des paquets.
Pour plus d'informations, cliquez ici
Nous avons besoin d'un fichier requirements.txt chaque fois que nous traitons avec des systèmes complexes. Ce fichier texte est également utile lorsque nous voulons porter l'application vers un autre environnement. Ce fichier contient tous les paquets/dépendances nécessaires pour exécuter une application avec succès, ainsi que leurs numéros de version.
Exemple de fichier requirements.txt :
Source de l'image : https://www.idkrtm.com/what-is-the-python-requirements-txt/
Si nous n'avons pas de fichier requirements.txt, il peut ne pas être possible de porter notre application avec succès vers un autre système, car il pourrait y avoir un problème de compatibilité entre les versions des paquets.
À partir de Pipenv version 2018.10.9 et avant la version 2022.1.8, une faille dans l'analyse des fichiers de dépendances (requirements) par pipenv permet à un attaquant d'insérer une chaîne spécialement conçue à l'intérieur d'un commentaire n'importe où dans un fichier requirements.txt, ce qui oblige les victimes utilisant pipenv pour installer le fichier de dépendances à télécharger des dépendances depuis un serveur d'index de paquets contrôlé par l'attaquant. Une attaque RCE est hautement réalisable contre ces systèmes très vulnérables.
cvedetails évalue cette vulnérabilité comme critique / sévère.
Score CVSS provenant de cvedetails :
(Source : https://www.cvedetails.com/cve/CVE-2022-21668/ )
Cette fonction est appelée de manière itérative sur chaque ligne d'un fichier requirements, et utilise le module argparse pour trouver et traiter les options --index-url, --extra-index-url et --trusted-host. Cependant, elle n'ignore pas ces options lorsqu'elles apparaissent dans les commentaires. Le problème du code est qu'il analysera les chaînes commençant par "--index-url, --extra-index-url, et --trusted-host" n'importe où dans le fichier. Cette fonctionnalité le rend plus vulnérable.
Pour plus d'informations, cliquez ici
Les attaques d'exécution de code à distance (RCE) permettent à un attaquant d'exécuter du code malveillant à distance sur un ordinateur. L'impact d'une vulnérabilité RCE peut aller de l'exécution d'un logiciel malveillant jusqu'à la prise de contrôle totale de la machine compromise.
Si un attaquant parvient à cacher une option --index-url malveillante dans un fichier de dépendances qu'une victime installe avec pipenv, l'attaquant peut intégrer du code malveillant arbitraire dans des paquets servis depuis son serveur d'index malveillant, code qui sera exécuté sur la machine de la victime lors de l'installation (exécution de code à distance / RCE). L'exploitation utilisant cette technique serait relativement simple à réaliser pour un attaquant ayant des connaissances de base en Python, car l'attaquant peut simplement construire une distribution source pour n'importe lequel des paquets spécifiés dans le fichier requirements, et intégrer du code malveillant arbitraire dans le fichier setup.py. Lorsque pip installe à partir d'une distribution source, tout code dans setup.py est exécuté par le processus d'installation.
Pour plus de détails, cliquez ici
Les versions 2022.1.8 et supérieures ont ce problème corrigé. Une nouvelle fonction "get_host_and_port(url)" a été ajoutée dans le fichier pipenv/utils.py. Cette fonction récupère l'hôte et le port de l'URL soumise dans le fichier requirements.txt. L'adresse hôte récupérée est analysée à l'aide d'urllib3 qui valide en interne la connexion SSL/TLS. L'adresse hôte est également vérifiée par rapport à une liste d'adresses d'hôtes de confiance.
Plus d'infos ici
Les attaques de base peuvent utiliser la RCE initiale déclenchée lorsqu'une victime installe le paquet malveillant de l'attaquant pour voler des identifiants sur la machine de la victime, exploiter les ressources de la machine pour miner des cryptomonnaies, ou installer des kits d'exploitation ou d'autres logiciels malveillants. Des attaquants plus sophistiqués peuvent utiliser des techniques plus avancées pour persister dans l'accès à la machine de la victime, cacher ou supprimer les preuves de leur attaque en supprimant les références au serveur d'index malveillant dans le Pipfile et le Pipfile.lock générés par pipenv, ou d'autres indicateurs de compromission potentiels. Des attaquants hautement sophistiqués pourraient tenter de pivoter vers d'autres cibles à partir de la machine initialement compromise, et pourraient tirer parti de tout identifiant exposé dans l'environnement de la machine compromise ou de l'autorisation implicite accordée à la machine pour obtenir un accès privilégié à d'autres systèmes ou ressources, tels que des dépôts de code source ou des registres de paquets. (Source : https://github.com/pypa/pipenv/security/advisories/GHSA-qc9x-gjcv-465w)
Une erreur d'analyse qui ne prend pas en compte l'analyse correcte des commentaires a créé une vulnérabilité critique.
Avec une telle vulnérabilité en main, même la mise en place d'un serveur d'index malveillant pour servir des versions de paquets compromises est relativement simple, même pour un attaquant non sophistiqué.