In this article
Risques de sécurité liés aux conventions de nommage des packages Python : typosquatting et autres menaces
Une simple commande pip install peut compromettre entièrement la sécurité de votre environnement et entraîner l’installation de portes dérobées, de chevaux de Troie et de packages malveillants. Mais comment est-ce possible ? La sécurité de la chaîne d’approvisionnement logicielle open source se concentre souvent sur les gestionnaires de packages et les dépôts de packages.
Qu’est-ce que la chaîne d’approvisionnement logicielle open source ? Elle englobe tous les composants, bibliothèques et outils qui contribuent à un produit logiciel. Pour les développeurs Python, il s’agit souvent de packages provenant du Python Package Index (PyPI). Ces packages sont très pratiques et offrent de nombreuses fonctionnalités, mais ils peuvent aussi présenter des vulnérabilités de sécurité. Par exemple, des acteurs malveillants peuvent exploiter ces vulnérabilités pour injecter du code nuisible dans des applications, entraînant des fuites de données, des accès non autorisés et d’autres incidents de sécurité.
Le typosquatting comme vecteur d’attaque
L’un des principaux vecteurs d’attaque de l’écosystème Python est le typosquatting. Fréquent dans le registre npm de JavaScript, mais aussi présent dans le registre PyPI, ce procédé consiste à créer des packages malveillants dont le nom ressemble beaucoup à celui de packages légitimes. Les attaquants cherchent à tromper les développeurs pour qu’ils installent ces packages par inadvertance, en profitant d’une petite faute de frappe ou d’un nom de package mal retenu. Une fois installés, ces packages peuvent exécuter une charge utile visant à exploiter le système, par exemple en récupérant des informations sensibles dans les variables d’environnement de la machine.
Confusion autour du nom du package Python PyYAML
Les attaquants exploitent souvent la ressemblance entre les noms de packages pour distribuer du code malveillant. Prenons le package populaire PyYAML. Pour l’installer, les développeurs utilisent la commande pip install pyyaml, mais dans leur code, ils l’importent avec import yaml. Cette différence peut prêter à confusion : un développeur risque alors d’exécuter par erreur pip install yaml et d’installer un autre package, potentiellement malveillant.
Ce phénomène apparaît également dans la documentation officielle de PyYAML :

FAQ : que faire si je soupçonne qu’un package installé est malveillant ?
Si vous pensez qu’un package est malveillant, procédez comme suit :
Arrêtez d’utiliser le package : cessez immédiatement de l’utiliser dans votre projet.
Signalez le package : signalez le package suspect aux responsables du dépôt (PyPI, par exemple) afin qu’ils puissent enquêter. Veillez également à ce que vos équipes locales AppSec et TrustSec suivent les procédures de gestion des incidents de sécurité (réinitialisation et rotation des secrets, etc.).
Auditez votre système : recherchez toute modification non autorisée ou activité suspecte sur votre système.
Examinez le code : vérifiez que le package malveillant n’a pas compromis votre base de code ni votre dépôt de code distant, y compris le registre distant et tout autre artefact qui stocke des registres.
Procédures en cas de fuite de données : le système est probablement compromis et doit être traité comme tel.
Autres confusions de noms de packages avec pip
Un autre cas de confusion entre packages vient de la spécification PURL et de la façon dont le gestionnaire de packages pip traite les tirets bas et les traits d’union. Par exemple, les commandes pip install langchain-community et pip install langchain_community installent le même package, malgré des chaînes différentes. Les attaquants peuvent exploiter ce comportement en créant des packages aux noms légèrement différents, ce qui augmente le risque d’installer accidentellement un logiciel malveillant.

Par ailleurs, pip ne tient pas compte de la casse dans les noms de packages. Ainsi, pip install PackageName et pip install packagename aboutissent au même résultat. À l’inverse, le registre npmjs a d’abord distingué les majuscules et les minuscules, avant d’adopter une approche insensible à la casse. Les attaquants peuvent exploiter l’absence de distinction entre majuscules et minuscules dans pip pour dissimuler davantage leurs packages malveillants.
FAQ : qu’est-ce que le typosquatting dans le contexte des packages Python ?
Le typosquatting est une pratique malveillante qui consiste à créer des packages dont le nom ressemble à celui de packages populaires ou légitimes. Le but est de tromper les développeurs pour qu’ils installent ces packages malveillants, en exploitant les fautes de frappe courantes ou les conventions de nommage. Par exemple, si un développeur souhaite installer le package populaire requests, mais saisit par erreur requsets, il risque d’installer un package malveillant sans le savoir.
Résumé et ressources complémentaires
Il est essentiel de comprendre les risques associés aux packages malveillants en Python pour préserver la sécurité de votre chaîne d’approvisionnement logicielle. Pour éviter les pièges du typosquatting et d’autres confusions de noms, vérifiez attentivement les noms et les sources lorsque vous installez des packages. Pour en savoir plus sur les risques liés à la chaîne d’approvisionnement, consultez des ressources sur la confusion des dépendances et les incidents de prise de contrôle de comptes de responsables de packages sur PyPI.
Comment les développeurs peuvent-ils éviter d’installer des packages Python malveillants ?
Les développeurs peuvent prendre plusieurs précautions :
Vérifiez les noms des packages : vérifiez toujours l’orthographe des noms de packages avant de les installer.
Examinez les métadonnées des packages : recherchez toute incohérence ou tout signal d’alerte dans les métadonnées et la documentation.
Utilisez des sources fiables : installez uniquement des packages depuis des dépôts de confiance comme PyPI.
Utilisez des outils de sécurité : utilisez Snyk Open Source pour détecter les vulnérabilités et les packages malveillants.
Voici d’autres conseils pour adopter des pratiques open source sécurisées et mettre en place des mesures robustes de sécurité de la chaîne d’approvisionnement afin de protéger efficacement vos projets :
Renforcez votre posture de sécurité avec Snyk
Pour les développeurs et les professionnels DevOps, protéger les projets contre les attaques de la chaîne d’approvisionnement est essentiel. Les risques liés aux packages malveillants, notamment ceux introduits par le typosquatting, soulignent la nécessité de mesures de sécurité robustes. En vous inscrivant à Snyk, vous pouvez renforcer votre posture de sécurité et protéger vos projets contre ces menaces.
Gérez vos dépendances de manière proactive
Utilisez la suite complète d’outils de Snyk pour gérer vos dépendances de manière proactive. Snyk analyse les vulnérabilités en temps réel et envoie des alertes pour vous signaler les risques associés à vos packages. Cette approche proactive vous aide à atténuer les menaces potentielles avant qu’elles n’affectent vos projets.
Profitez des intégrations de Snyk
Snyk s’intègre parfaitement à votre workflow de développement existant. Vous pouvez ainsi intégrer des contrôles de sécurité à vos pipelines CI/CD, à votre IDE Python et à vos outils de gestion du code source Git, tels que GitHub, GitLab et BitBucket. La sécurité devient ainsi un processus continu plutôt qu’une réflexion de dernière minute.
Restez informé et formez-vous
Avez-vous déjà suivi un cours rapide sur la sécurité Python avec Snyk Learn ? Snyk propose de nombreuses ressources pédagogiques pour vous informer sur les dernières menaces de sécurité et les bonnes pratiques. En vous tenant au courant grâce à ces ressources, vous comprendrez mieux l’évolution de la sécurité des applications et de l’open source, et pourrez prendre des mesures éclairées pour protéger vos projets.
Participez à Fetch the Flag 2026 !
Mettez vos compétences en sécurité à l’épreuve lors de notre événement Capture the Flag, les 12 et 13 février, de midi à midi (heure de l’Est).