Un jeton d’accs personnel appartenant au directeur de la Python Software Foundation a t expos pendant plus d’un an Il disposait de privilges administratifs sur PyPI et les rfrentiels officiels Python

Le paquet PyPI "keep" aurait inclus par erreur un voleur de mots de passe, Le mainteneur aurait involontairement introduit une dpendance malveillante par une faute de frappe



Un jeton daccs personnel (PAT) appartenant au directeur de linfrastructure de la Python Software Foundation (PSF) a t expos pendant plus dun an. Ce jeton avait des privilges administratifs pour les rfrentiels officiels du langage de programmation Python et de lindex des packages Python (PyPI). Malheureusement, il a t accidentellement inclus dans un fichier binaire compil publi sur Docker Hub.

L’quipe de recherche en scurit de JFrog a rcemment dcouvert et signal une fuite de jeton d’accs avec un accs administrateur aux dpts GitHub de Python, PyPI et Python Software Foundation, qui a t divulgue dans un conteneur Docker public hberg sur Docker Hub.

En tant que service communautaire, l’quipe de recherche en scurit de JFrog analyse en permanence les dpts publics tels que Docker Hub, NPM et PyPI afin d’identifier les paquets malveillants et les fuites de secrets. L’quipe signale toute dcouverte aux responsables concerns avant que les attaquants ne puissent en tirer parti.

Bien que nous rencontrions de nombreux secrets qui sont divulgus de la mme manire, ce cas est exceptionnel car il est difficile de surestimer les consquences potentielles s’ils taient tombs entre de mauvaises mains – il serait possible d’injecter du code malveillant dans les paquets PyPI (imaginez que vous remplaciez tous les paquets Python par des paquets malveillants), et mme dans le langage Python lui-mme , ont crit dans un rapport les chercheurs de l’entreprise de scurit JFrog, qui ont trouv et signal le jeton.

L’quipe de recherche en scurit de JFrog a identifi la fuite et l’a immdiatement signale l’quipe de scurit de PyPI, qui a rvoqu le jeton en 17 minutes peine !

L’incident montre que l’limination des jetons d’accs du code source uniquement, que certains outils de dveloppement effectuent automatiquement, ne suffit pas prvenir les failles de scurit potentielles. Des informations d’identification sensibles peuvent galement tre incluses dans des variables d’environnement, des fichiers de configuration et mme des artefacts binaires la suite de processus de construction automatiss et d’erreurs commises par les dveloppeurs.


Le jeton d’authentification a t trouv dans un conteneur Docker, dans un fichier Python compil – __pycache__/build.cpython-311.pyc

Qu’est-ce qui aurait pu se passer ?

Les consquences de la dcouverte de cette fuite de jeton pourraient tre extrmement graves. Le dtenteur d’un tel jeton aurait eu un accs administrateur tous les dpts de Python, de PyPI et de la Python Software Foundation, ce qui aurait permis de mener une attaque de la chane d’approvisionnement trs grande chelle.

Diffrentes formes d’attaques de la chane d’approvisionnement taient possibles dans ce scnario. L’une d’entre elles consisterait dissimuler un code malveillant dans CPython, qui est un dpt de certaines des bibliothques de base du langage de programmation Python, compiles partir d’un code C. En raison de la popularit de Python, l’insertion d’un code malveillant qui finirait par se retrouver dans les lments distribuables de Python pourrait signifier la propagation de votre porte drobe des dizaines de millions de machines dans le monde entier !


Vecteur d’attaque de la chane d’approvisionnement du langage Python

Un autre scnario possible serait l’insertion d’un code malveillant dans le code Warehouse de PyPI, qui est utilis pour grer le gestionnaire de paquets PyPI. Imaginons qu’un attaquant insre un code qui lui donne une porte drobe vers le stockage de PyPI, lui permettant de manipuler des paquets PyPI trs populaires, en y cachant du code malveillant ou en les remplaant compltement. Bien qu’il ne s’agisse pas de la manire la plus sophistique de mener une attaque qui resterait longtemps indtecte, il s’agit certainement d’un scnario effrayant.


Vecteur d’attaque de la chane d’approvisionnement PyPI

La fuite du jeton Python est le rsultat de la paresse

Ee Durbin, administrateur de PyPI et directeur de l’infrastructure de la Python Software Foundation (PSF), a rdig un rapport d’incident expliquant comment la fuite s’est produite. La fuite concernait le jeton d’accs du compte personnel de Durbin, qui disposait de privilges administratifs en raison de son rle dans l’organisation.

Dbut 2023, Durbin travaillait sur cabotage-app, un outil bas sur Docker dvelopp par la PSF qui est utilis pour dployer PyPI et les services associs sur un cluster Kubernetes. Alors qu’il travaillait sur la partie construction de la base de code, il s’est heurt aux limites de dbit de l’API que GitHub applique pour l’accs anonyme.

Dans ce qu’il appelle un acte de paresse , Durbin a dcid de modifier le code source localement pour inclure un jeton d’accs pour son propre compte afin de contourner les limites de taux par dfaut et de terminer le travail plus rapidement. Il s’agissait d’une solution rapide, une alternative la configuration d’une application GitHub locale pour effectuer la construction au lieu d’utiliser l’API GitHub.

Alors que Durbin savait que l’ajout de jetons d’accs personnels (PAT) au code source est une mauvaise pratique de scurit, la modification ne concernait que sa copie locale de la base de code et n’avait jamais t destine tre transfre distance. En fait, le script de construction et de dploiement automatis tait cens annuler les modifications locales, ce qui aurait d supprimer le jeton.

Ce que Durbin n’avait pas ralis, c’est que le jeton tait galement inclus dans les fichiers .pyc (Python compiled bytecode) gnrs dans le cadre du processus de construction, et que ces fichiers, stocks dans le dossier __pycache__, n’taient pas configurs pour tre exclus de l’image Docker finale tlcharge sur Docker Hub.

Aprs avoir t informe par JFrog la fin du mois de juin, l’quipe de scurit de PyPI a rvoqu le jeton et a examin tous les journaux d’audit de GitHub et l’activit du compte la recherche d’ventuels signes d’utilisation malveillante du jeton. Aucune preuve d’utilisation malveillante n’a t trouve. La version de cabotage-app contenant le jeton a t publie sur Docker Hub le 3 mars 2023 et a t supprime le 21 juin 2024, soit quinze mois plus tard.

Cabotage est maintenant entirement auto-hberg, ce qui signifie que les constructions de l’application cabotage n’utilisent plus de registre public et que les constructions de dploiement sont inities partir de vrifications propres de la source uniquement , a crit Durbin. Cela permet d’viter que des modifications locales ne se retrouvent dans une image construite en dehors des environnements de dveloppement, et de supprimer la ncessit de publier dans des registres publics .

Durbin a dclar qu’il vitera l’avenir de crer des jetons d’accs personnels pour son compte, sauf en cas d’absolue ncessit, car part ce cas, il ne se souvient pas d’autres cas o un jeton de longue dure de vie a t utile.

C’est un excellent rappel pour fixer des dates d’expiration agressives pour les jetons d’API (si vous en avez besoin), traiter les fichiers .pyc comme s’il s’agissait de code source, et effectuer des constructions sur des systmes automatiss partir d’une source propre uniquement , a-t-il conseill.

JFrog a flicit l’quipe de scurit de PyPI pour avoir rpondu son rapport et rvoqu le jeton dans un dlai impressionnant de 17 minutes. Bien qu’une scurit parfaite ne soit jamais possible, il est essentiel de disposer d’un point de contact clair pour les problmes de scurit et d’un temps de rponse rapide afin de limiter l’impact des incidents de scurit pour toute organisation.

Conseils aux dveloppeurs

Outre l’analyse des artefacts binaires et des fichiers de configuration la recherche de secrets potentiels, les dveloppeurs devraient utiliser les nouveaux jetons d’accs personnel grain fin de GitHub qui ont t introduits il y a deux ans au lieu des jetons classiques. Les nouveaux jetons permettent aux utilisateurs de choisir les niveaux de privilges et les dpts spcifiques auxquels ils donnent accs.

La cration d’un « anneau unique » est toujours une mauvaise ide , crivent les chercheurs de JFrog dans leur rapport. Nous recommandons vivement d’utiliser cette fonctionnalit, car nous rencontrons frquemment des situations o un jeton donnant un accs ultime l’ensemble de l’infrastructure est divulgu dans le cadre d’un projet secondaire ou d’une application temporaire de type ‘hello-world’.

En outre, depuis 2021, les jetons GitHub ont un nouveau format qui inclut un prfixe ghp_ et une somme de contrle, ce qui facilite leur dtection par des outils automatiss. Les anciens jetons GitHub, qui n’ont pas t dprcis et existent toujours, ne se distinguent pas des hachages SHA1, qui sont galement courants dans le code source et ne prsentent pas de risque pour la scurit, et peuvent donc tre ignors par les scanners. Il est fortement conseill aux dveloppeurs de passer au nouveau format de jeton.

Conclusion

La fuite de jeton GitHub Python nous rappelle que la scurit est un aspect essentiel du dveloppement logiciel. En suivant les bonnes pratiques et en restant vigilants, nous pouvons protger nos projets et nos utilisateurs contre de telles vulnrabilits. Bien sr, le risque zro n’est que chimre, mais appliquer de bonnes pratiques contribue renforcer la scurit.

Sources : JFrog, Ee Durbin

Et vous ?

Pensez-vous que les dveloppeurs accordent suffisamment dattention la scurit des secrets et des jetons daccs dans leurs projets ?

Quelles mesures supplmentaires pourraient tre prises pour viter de telles fuites de jetons lavenir ?

Pensez-vous que les fichiers binaires devraient tre systmatiquement vrifis pour la prsence de secrets et de jetons ? Pourquoi ou pourquoi pas ?

Comment percevez-vous la responsabilit du directeur de linfrastructure de la PSF dans cette fuite de jeton ?

Avez-vous dj rencontr des problmes de scurit lis des secrets ou des jetons dans vos propres projets ? Comment les avez-vous rsolus ?



Source link

Laisser un commentaire

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