Python : ce bug oublié qui menace 350 000 projets

Python : ce bug oublié qui menace 350 000 projets

Python : ce bug oublié qui menace 350 000 projets

Imaginez dĂ©couvrir qu’un problème de sĂ©curitĂ©, identifiĂ© il y a plus de quinze ans, n’a jamais Ă©tĂ© rĂ©ellement corrigĂ©. Pire encore, imaginez que ce bug se soit discrètement propagĂ© dans des centaines de milliers de projets open-source, y compris ceux qui alimentent les intelligences artificielles les plus modernes. Ce n’est pas le scĂ©nario d’un thriller de cybersĂ©curitĂ©, mais la rĂ©alitĂ© de la vulnĂ©rabilitĂ© CVE-2007-4559 qui secoue aujourd’hui l’Ă©cosystème Python.

Cette faille, aussi ancienne que le premier iPhone, a Ă©tĂ© redĂ©couverte par les chercheurs de la sociĂ©tĂ© de cybersĂ©curitĂ© Trellix, rĂ©vĂ©lant une nĂ©gligence aux consĂ©quences potentiellement massives. Nous allons dĂ©cortiquer cette affaire pour comprendre la nature du bug, l’ampleur de sa propagation et ce qu’elle nous apprend sur la sĂ©curitĂ© de l’Ă©cosystème open-source.

CVE-2007-4559 : le fantĂ´me du code Python

Pour bien saisir l’enjeu, il faut d’abord comprendre la nature de cette vulnĂ©rabilitĂ©. Elle n’est pas complexe Ă  exploiter, ce qui la rend d’autant plus prĂ©occupante.

Qu’est-ce que ce bug exactement ?

La faille, rĂ©fĂ©rencĂ©e sous le nom de CVE-2007-4559, est ce que l’on appelle une vulnĂ©rabilitĂ© de « path traversal » (ou traversĂ©e de rĂ©pertoire). Elle se cache dans une bibliothèque standard de Python nommĂ©e `tarfile`, utilisĂ©e pour manipuler les archives de fichiers (similaires aux fichiers .zip ou .rar). Plus prĂ©cisĂ©ment, les fonctions `extract()` et `extractall()` sont en cause.

➡️ Pour faire simple, lorsqu’un dĂ©veloppeur utilise ce code pour dĂ©compresser une archive, un pirate peut crĂ©er une archive malveillante. Au lieu de se dĂ©compresser dans le dossier prĂ©vu, les fichiers qu’elle contient peuvent « remonter » l’arborescence des dossiers pour aller s’Ă©crire n’importe oĂą sur le système de fichiers, Ă©crasant potentiellement des fichiers sensibles ou installant du code malveillant.

Une faille connue, mais jamais corrigée

Le plus surprenant dans cette histoire est que ce bug n’est pas nouveau. Il a Ă©tĂ© signalĂ© pour la première fois en aoĂ»t 2007. Cependant, Ă  l’Ă©poque, la seule « correction » apportĂ©e a Ă©tĂ© une mise Ă  jour de la documentation officielle de Python.

Le message Ă©tait clair, mais insuffisant : il avertissait simplement les dĂ©veloppeurs qu’il « peut ĂŞtre dangereux d’extraire les archives de sources inconnues ».

Aucun correctif de code n’a Ă©tĂ© dĂ©ployĂ©, laissant la porte ouverte. Quinze ans plus tard, le chercheur Kasimir Schulz de Trellix est retombĂ© sur cette faille presque par hasard. En tirant sur ce fil, son Ă©quipe a dĂ©couvert que le problème Ă©tait loin d’ĂŞtre anecdotique.

L’ampleur du problème : une contagion silencieuse

Si un bug isolĂ© est un problème, un bug rĂ©pandu Ă  travers un Ă©cosystème est une crise. L’analyse de Trellix a rĂ©vĂ©lĂ© une propagation bien plus large que quiconque aurait pu l’imaginer.

De quelques lignes de code à 350 000 dépôts

Avec l’aide de GitHub, les chercheurs ont identifiĂ© près de 590 000 projets open-source utilisant la fameuse bibliothèque `tarfile`. En analysant un Ă©chantillon reprĂ©sentatif de ces projets, ils ont dĂ©couvert qu’un taux alarmant de 61% d’entre eux utilisaient les fonctions vulnĂ©rables sans aucune prĂ©caution.

En extrapolant ce chiffre, on arrive Ă  une conclusion vertigineuse : plus de 350 000 dĂ©pĂ´ts de code sur GitHub seraient directement affectĂ©s. Ces projets couvrent un large Ă©ventail d’industries, mais les secteurs les plus touchĂ©s sont le dĂ©veloppement web, les outils pour dĂ©veloppeurs et, surtout, le machine learning.

Les outils de Machine Learning comme vecteurs de propagation

C’est lĂ  que le problème prend une dimension très moderne. Des outils d’assistance au code basĂ©s sur l’IA, comme GitHub Copilot, sont entraĂ®nĂ©s sur des millions de lignes de code issues de dĂ©pĂ´ts open-source. Si une grande partie de ce code est vulnĂ©rable, l’IA apprend et peut proposer ces mĂŞmes extraits de code non sĂ©curisĂ©s Ă  des dĂ©veloppeurs qui lui font confiance.

A lire aussi  Vers une maison intelligente : Les robots au service du quotidien

Le bug ne se propage donc plus seulement par copier-coller humain, mais aussi via des suggestions automatisées. Un développeur, pensant gagner du temps, peut ainsi intégrer la faille dans un nouveau projet sans même en avoir conscience, perpétuant le cycle.

Concrètement, quels sont les risques ?

Savoir qu’une faille existe est une chose, mais comprendre comment elle peut ĂŞtre exploitĂ©e est essentiel pour mesurer le danger rĂ©el.

Comment un attaquant peut-il exploiter la faille ?

Le scénario est relativement simple. Un attaquant crée une archive `.tar` spécialement conçue. Il la transmet ensuite à sa victime, par exemple en la téléchargeant sur une plateforme où elle sera traitée par une application vulnérable.

Lorsque l’application utilise la fonction `tarfile.extractall()` pour dĂ©compresser le fichier, le piège se referme : le code malveillant est Ă©crit sur le système, permettant Ă  l’attaquant d’exĂ©cuter des commandes Ă  distance.

Les chercheurs de Trellix ont dĂ©montrĂ© que l’exploitation Ă©tait possible sur diffĂ©rents systèmes, parvenant notamment Ă  exĂ©cuter du code sur l’environnement de dĂ©veloppement Spyder IDE sous Windows, et sur l’outil de gestion d’infrastructure Polemarch sous Linux.

Des correctifs en cours, mais un travail de titan

Heureusement, Trellix ne s’est pas contentĂ© de sonner l’alarme. L’entreprise a entrepris de corriger elle-mĂŞme le problème. Des correctifs ont dĂ©jĂ  Ă©tĂ© créés pour plus de 11 000 projets et sont en cours de soumission via des « pull requests » sur GitHub.

L’objectif est d’en proposer pour plus de 70 000 projets.

Cependant, le défi est immense. Chaque correctif doit être examiné et validé par le ou les mainteneurs de chaque projet, dont beaucoup sont des bénévoles. Ce processus prendra des mois, voire des années, et certains projets abandonnés ne seront probablement jamais mis à jour.

Au-delĂ  du bug : la sĂ©curitĂ© de l’open-source en question

Cette affaire n’est pas qu’une simple anecdote technique. Elle soulève des questions essentielles sur la manière dont nous construisons et sĂ©curisons les logiciels aujourd’hui.

Un écho à la faille Log4Shell

Cette situation rappelle amèrement la crise de la vulnĂ©rabilitĂ© Log4Shell qui a secouĂ© le monde de la tech fin 2021. Dans les deux cas, une faille critique dans une bibliothèque open-source fondamentale, utilisĂ©e par des millions d’applications, est passĂ©e sous les radars pendant des annĂ©es. Elle met en lumière la fragilitĂ© de notre chaĂ®ne d’approvisionnement logicielle.

Vers une meilleure culture de la sécurité ?

Alors que faire ? Des initiatives voient le jour pour tenter de rĂ©soudre ce problème systĂ©mique. Des concepts comme le SBOM (Software Bill of Materials), qui agit comme une liste d’ingrĂ©dients pour un logiciel, permettent de savoir exactement quels composants open-source sont utilisĂ©s.

D’autres, comme les niveaux SLSA (Supply-Chain Levels for Software Artifacts), visent Ă  Ă©tablir des standards de sĂ©curitĂ© pour la production de logiciels.

Ces efforts, portĂ©s par des organisations comme l’Open Source Security Foundation, sont essentiels. Ils visent Ă  allouer des ressources pour auditer et sĂ©curiser les projets les plus critiques, souvent maintenus par une poignĂ©e de dĂ©veloppeurs non rĂ©munĂ©rĂ©s.

La redĂ©couverte de la faille CVE-2007-4559 est un puissant rappel Ă  l’ordre. Elle nous montre que la sĂ©curitĂ© n’est pas un acquis et que mĂŞme les fondations de notre Ă©cosystème numĂ©rique peuvent comporter des fissures. Ce n’est pas seulement un problème pour les dĂ©veloppeurs Python, mais pour toute l’industrie qui dĂ©pend massivement de la collaboration et de la confiance inhĂ©rentes Ă  l’open-source.

C’est peut-ĂŞtre le coup de semonce dont nous avions besoin pour enfin traiter la sĂ©curitĂ© de la chaĂ®ne d’approvisionnement logicielle avec le sĂ©rieux qu’elle mĂ©rite.

Et vous, comment sécurisez-vous les dépendances open-source dans vos projets ?

Laisser un commentaire