Agrandir/ Les attaques contre la chaîne d'approvisionnement, comme la dernière découverte de PyPI, insèrent du code malveillant dans des progiciels apparemment fonctionnels utilisés par les développeurs. Ils sont de plus en plus courants.
Getty Images
PyPI, un référentiel essentiel pour les développeurs open source, a temporairement interrompu la création de nouveaux projets et l'enregistrement de nouveaux utilisateurs à la suite d'une vague de téléchargements de packages exécutant du code malveillant sur tout appareil les installant. Dix heures plus tard, elle a levé la suspension.
Abréviation de Python Package Index, PyPI est la source incontournable pour les applications et les bibliothèques de code écrites dans le langage de programmation Python. Les sociétés Fortune 500 et les développeurs indépendants s'appuient sur le référentiel pour obtenir les dernières versions de code nécessaires à l'exécution de leurs projets. Mercredi, peu après 19 heures (heure du Pacifique), le site a commencé à afficher une bannière informant les visiteurs que le site suspendait temporairement la création de nouveaux projets et l'enregistrement de nouveaux utilisateurs. Le message n'expliquait pas pourquoi ni ne fournissait une estimation du moment où la suspension serait levée.
Agrandir/ Capture d'écran montrant une notification de suspension temporaire.
Checkmarx
Environ 10 heures plus tard, PyPI a restauré la création de nouveaux projets et l'enregistrement de nouveaux utilisateurs. Une fois de plus, le site n'a fourni aucune raison pour justifier cet arrêt de 10 heures.
Selon la société de sécurité Checkmarx, dans les heures qui ont précédé la fermeture, PyPI a été attaqué par des utilisateurs qui ont probablement utilisé des moyens automatisés pour télécharger des packages malveillants qui, une fois exécutés, infectaient les appareils des utilisateurs. Les attaquants ont utilisé une technique connue sous le nom de typosquatting, qui exploite les fautes de frappe commises par les utilisateurs lors de la saisie des noms de packages populaires dans les interfaces de ligne de commande. En donnant aux packages malveillants des noms similaires à des packages inoffensifs populaires, les attaquants s'attendent à ce que leurs packages malveillants soient installés lorsque quelqu'un entre par erreur un mauvais nom.
« Les acteurs de la menace ciblent leurs victimes avec une technique d'attaque Typosquatting en utilisant leur CLI pour installer des packages Python », chercheurs de Checkmarx Yehuda Gelb, Jossef Harush Kadouri et Tzachi Zornstain. a écrit jeudi. « Il s’agit d’une attaque en plusieurs étapes et d’une charge utile malveillante visant à voler des portefeuilles cryptographiques, des données sensibles des navigateurs (cookies, données d’extensions, etc.) et diverses informations d’identification. De plus, la charge utile malveillante utilisait un mécanisme de persistance pour survivre aux redémarrages.
Agrandir/ Capture d'écran montrant certains des packages malveillants trouvés par Checkmarx.
Checkmarx
Le message indiquait que les packages malveillants étaient « très probablement créés à l'aide d'automatisation », mais ne donnait pas de détails. Les tentatives visant à joindre les responsables de PyPI pour obtenir leurs commentaires n'ont pas immédiatement abouti. Les noms des paquets imité ceux des packages et bibliothèques populaires tels que Demandes, Oreilleret Colorama.
La suspension temporaire n'est que le dernier événement mettant en évidence les menaces croissantes auxquelles est confronté l'écosystème du développement logiciel. Le mois dernier, des chercheurs ont révélé une attaque contre le référentiel de code open source GitHub qui inondait le site de millions de packages contenant du code obscurci qui volait des mots de passe et des crypto-monnaies sur les appareils des développeurs. Les paquets malveillants étaient des clones de paquets légitimes, ce qui les rendait difficiles à distinguer à un œil occasionnel.
La partie responsable a automatisé un processus qui a créé des packages légitimes, ce qui signifie que le code source a été copié afin que les développeurs puissent l'utiliser dans un projet indépendant basé sur celui d'origine. Le résultat fut des millions de fourchettes avec des noms identiques à ceux d'origine. À l’intérieur du code identique se trouvait une charge utile malveillante enveloppée dans plusieurs couches d’obscurcissement. Bien que GitHub ait pu supprimer rapidement la plupart des packages malveillants, la société n'a pas été en mesure de tous les filtrer, laissant le site dans une boucle persistante de whack-a-mole.
Des attaques similaires sont une réalité pour pratiquement tous les référentiels open source, y compris npm pack picks et RubyGems.
Plus tôt cette semaine, Checkmarx a signalé un attaque distincte sur la chaîne d’approvisionnement qui ciblait également les développeurs Python. Les acteurs de cette attaque ont cloné l'outil Colorama, y ont caché du code malveillant et l'ont rendu disponible en téléchargement sur un faux site miroir avec un domaine typosquatté qui imitait celui légitime de files.pythonhosted.org. Les attaquants ont détourné les comptes de développeurs populaires, probablement en volant les cookies d'authentification qu'ils utilisaient. Ensuite, ils ont utilisé les comptes piratés pour contribuer à des commits malveillants comprenant des instructions pour télécharger le clone malveillant de Colorama. Checkmarx a déclaré avoir trouvé des preuves que certains développeurs avaient été infectés avec succès.
Dans le message de jeudi, les chercheurs de Checkmarx ont rapporté :
Le code malveillant se trouve dans le fichier setup.py de chaque package, permettant une exécution automatique lors de l'installation.
De plus, la charge utile malveillante utilisait une technique dans laquelle le fichier setup.py contenait du code obscurci qui était chiffré à l'aide du module de chiffrement Fernet. Lorsque le package a été installé, le code obscurci a été automatiquement exécuté, déclenchant la charge utile malveillante.
Checkmarx
Lors de son exécution, le code malveillant contenu dans le fichier setup.py a tenté de récupérer une charge utile supplémentaire à partir d'un serveur distant. L'URL de la charge utile a été construite dynamiquement en ajoutant le nom du package comme paramètre de requête.
Agrandir/ Capture d'écran du code créant une URL dynamique.
Checkmarx
La charge utile récupérée a également été chiffrée à l'aide du module Fernet. Une fois décryptée, la charge utile a révélé un vaste voleur d'informations conçu pour récolter des informations sensibles sur la machine de la victime.
La charge utile malveillante utilisait également un mécanisme de persistance pour garantir qu'elle restait active sur le système compromis même après l'exécution initiale.
Agrandir/ Capture d'écran montrant le code qui permet la persistance.
Checkmarx
En plus d'utiliser le typosquatting et une technique similaire connue sous le nom de brandjacking pour inciter les développeurs à installer des packages malveillants, les acteurs malveillants ont également recours à la confusion des dépendances. La technique fonctionne en téléchargeant des packages malveillants vers des référentiels de code publics et en leur attribuant un nom identique à celui d'un package stocké dans le référentiel interne du développeur cible dont dépendent une ou plusieurs applications du développeur pour fonctionner. Les applications de gestion de logiciels des développeurs privilégient souvent les bibliothèques de codes externes par rapport aux bibliothèques internes, de sorte qu'ils téléchargent et utilisent le package malveillant plutôt que celui de confiance. En 2021, un chercheur a utilisé une technique similaire pour exécuter avec succès un code contrefait sur des réseaux appartenant à Apple, Microsoft, Tesla et des dizaines d’autres sociétés.
Il n’existe aucun moyen infaillible de se prémunir contre de telles attaques. Au lieu de cela, il incombe aux développeurs de vérifier et de revérifier méticuleusement les packages avant de les installer, en accordant une attention particulière à chaque lettre d'un nom.
Nous utilisons des cookies sur notre site Web pour vous offrir l'expérience la plus pertinente en mémorisant vos préférences et vos visites répétées. En cliquant sur "Accepter tout", vous consentez à l'utilisation de TOUS les cookies. Toutefois, vous pouvez visiter "Paramètres des cookies" pour fournir un consentement contrôlé.
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie
Durée
Description
cookielawinfo-checkbox-analytics
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional
11 months
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy
11 months
The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.