Le malware Shai-Hulud attaque 19 paquets scientifiques sur PyPI

Le malware Shai-Hulud attaque 19 paquets scientifiques sur PyPI

Des pirates ont compromis 19 paquets sur l’index PyPI, l’entrepôt officiel des bibliothèques Python. Ces composants malveillants ont été téléchargés des centaines de milliers de fois. Cette campagne, attribuée à Shai-Hulud, constitue une nouvelle attaque de la chaîne d’approvisionnement. Elle diffuse un programme conçu pour dérober les secrets des développeurs.

Parmi les outils infectés, on retrouve plusieurs logiciels de bio-informatique qui sont très populaires, comme Dynamo, Spateo, CoolBox, U-FISH et Napari-UFISH.

L’entreprise de sécurité applicative Socket a découvert cette campagne. Elle s’est manifestée par 37 publications malveillantes pour 19 paquets distincts, qui semblent tous provenir d’un même mainteneur.

Les artefacts malveillants contenaient un fichier ‘*-setup.pth‘ et une charge utile JavaScript obfusquée nommée ‘_index.js‘.

Le simple lancement de Python suffisait à déclencher le fichier PTH. Ce dernier tentait alors de télécharger l’environnement d’exécution Bun depuis GitHub pour exécuter le script incorporé.

Un composant compromis peut transformer une installation de dépendance passive en un déclencheur d’exécution différée. La prochaine commande Python, pip, un job d’intégration continue ou un noyau de notebook qui démarre Python peut traiter ce fichier .pth malveillant.

Les chercheurs pensent que cette attaque fait partie de la campagne plus large « Shai-Hulud« , car le programme malveillant présente plusieurs similarités techniques avec les opérations précédentes.

En conséquence, Socket la suit avec les attaques antérieures. La liste des artefacts malveillants attribués aux activités de Shai-Hulud affiche désormais 453 éléments.

Une analyse de la charge utile JavaScript a montré qu’elle ciblait un large éventail de secrets de développeurs, qui comprenaient :

  • Les jetons GitHub et les secrets GitHub Actions.
  • Les jetons de publication npm, PyPI, RubyGems et JFrog.
  • Les identifiants AWS, GCP, Azure, Kubernetes et Vault.
  • Les clés SSH.
  • Les identifiants Docker.
  • Les fichiers .env, .npmrc et .pypirc.
  • Les historiques de shell.
  • Les fichiers de configuration Claude/MCP.
  • D’autres secrets de poste de travail et de pipelines d’intégration continue.

Comme pour les autres attaques Shai-Hulud, l’objectif semble être la compromission des flux de travail de développement logiciel pour propager davantage le programme.

La méthode principale d’exfiltration des données est similaire aux opérations passées. Elle utilise des dépôts GitHub créés automatiquement pour héberger les secrets écrits via GitHub Actions.

Une seconde méthode d’exfiltration existe, qui est basée sur du HTTPS direct. Elle pointe vers un point de terminaison d’API Anthropic légitime mais invalide. Socket estime que cette méthode servait probablement de camouflage.

Le programme malveillant intègre aussi des mécanismes d’évasion. Il vérifie la présence de paramètres régionaux ou d’environnements russes, et il recherche des outils de sécurité comme StepSecurity Harden-Runner.

Il établit une persistance via des services systemd sur Linux et des LaunchAgents sur macOS. Il utilise aussi des fichiers de workflow GitHub et de configuration Claude/MCP.

Le rapport de Socket liste tous les paquets et versions affectés. Il recommande aux organisations qui les ont installés de renouveler tous leurs secrets et de restaurer leurs environnements à partir de sauvegardes saines.

Les équipes de défense doivent rechercher les paquets Python qui contiennent des crochets de démarrage .pth exécutables, les téléchargements inattendus de l’environnement d’exécution Bun depuis GitHub, et les chaînes de processus où Python lance Bun pour exécuter _index.js.