Python : cette vulnérabilité vieille de 15 ans est présente dans plus de 350 000 projets !

Découverte en 2007, une vulnérabilité dans le langage Python reste toujours sans correctif à ce jour. Aujourd'hui, on parle d'elle de nouveau, car elle affecte plus de 350 000 dépôts qui sont vulnérable à une exécution de code arbitraire.

La faille de sécurité associée à la référence CVE-2007-4559 a été découverte en 2007, et bien que ce soit surprenant, elle n'a jamais reçu de correctif ! La seule chose effectuée, c'est une mention dans la documentation pour avertir les développeurs d'un risque éventuel, car tout dépend des fonctions utilisées dans votre code Python. Ce message est un avertissement qui indique "qu'il peut être dangereux d'extraire des archives de sources non fiables".

Cette vulnérabilité se situe dans le package "tarfile" de Python, dont le but est de permettre la lecture et l'écriture d'archives au format TAR. Plus précisément, cette faille de type "directory transversal" est présente dans les fonctions tarfile.extract() et tarfile.extractall(). En l'exploitant, un attaquant peut écraser un fichier système présent sur votre machine. Sur le site officiel de Python, un exemple datant de 2007 est donné : "Si vous mettez dans une archive TAR un fichier nommé "../../../../../etc/passwd" et que l'administrateur décompresser l'archive, alors le fichier /etc/passwd est écrasé.". C'est un exemple, mais il y en a d'autres, notamment une variante qui s'appuie sur un lien symbolique.

Une vulnérabilité ignorée et redécouverte !

Plus tôt cette année, un chercheur de l'entreprise Trellix (issue de la fusion de McAfee Enterprise et de FireEye) a redécouvert la vulnérabilité CVE-2007-4559 alors qu'il enquêtait sur un autre problème de sécurité. Les chercheurs de Trellix ont approfondi leurs recherches vis-à-vis de cette vulnérabilité et il s'avère qu'elle est présente dans des milliers de projets logiciels, certains open source, d'autres non.

Ils ont analysé un échantillon de 257 dépôts Python : au final, 61% des dépôts analysés sont vulnérables à cette vulnérabilité. En utilisant ce taux de positivité, les chercheurs de Trellix estiment qu'il y a au moins 350 000 dépôts vulnérables, sur 588 840 dépôts GitHub qui intègrent du code Python avec la fonction "import tarfile" ! Une grande partie de ces dépôts correspondent à des outils de machine learning comme GitHub Copilot.

Trellix estime également que cette vulnérabilité affecte des entreprises dans de nombreux domaines : aussi bien la sécurité, le Web, la Data Science, etc...

CVE-2007-4559 - Python - Trellix

Cette vulnérabilité est exploitable aussi bien sur Linux que sur Windows, comme le montre Kasimir Schulz, chercheur chez Trellix. Dans ce rapport technique, on peut voir deux vidéos de démonstration sur les deux systèmes d'exploitation.

Trellix a également sur 11 000 projets pour qu'ils ne soient plus vulnérables à cette faille de sécurité, en adaptant le code. Dans les semaines à venir, il y a des chances pour que de nombreux projets soient mis à jour afin de patcher : c'est en tout cas ce que l'on peut espérer. Reste à savoir s'il y aura une réaction de la Python Software Foundation, maintenant que cette vulnérabilité refait la une de l'actualité.

Source

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 4109 posts and counting.See all posts by florian

2 thoughts on “Python : cette vulnérabilité vieille de 15 ans est présente dans plus de 350 000 projets !

  • Ce n’est pas une faille, c’est une fonctionalité. L’administrateur ayant tous les droits, s’il décompresse et écrase un fichier du système, c’est normal de le pouvoir.

    Répondre
  • Complete bullshit. Quand on lance un programme qui ne contrôle pas ses inputs avec les privilèges administrateurs, oui ça peut causer des soucis… La faute à strlen, tar.extract et compagnie, ou la faute à celui qui utilise mal cette fonction ? Heureusement que toute les fonctions de bases ne passent pas leur temps à tout contrôller, et délèguent ces taches au programme qui les utilise, sinon lancer le moindre petit programme prendrait 30 ans…

    Vous savez que la fonction open ne contrôle pas ses inputs, et qu’elle peut ouvrir en écriture /etc/passwd quand on la lance avec un programme à qui on donne les privilèges d’administrateur ? Ben oui, c’est le but.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.