En bref
Que s'est-il passé ?
Le 24 avril 2026, une version malveillante d'elementary-data 0.23.3 (observabilité dbt) est publiée sur PyPI et le GHCR, l'image multi-architecture étant taguée 0.23.3 et latest.
L'attaquant exploite une injection de script dans un workflow GitHub Actions du projet, puis se sert du GITHUB_TOKEN pour forger un commit de release et déclencher le pipeline de publication légitime, sans toucher master ni ouvrir de PR. Le paquet ajoute un fichier elementary.pth que Python exécute au démarrage de l'interpréteur.
Tout docker pull ou FROM non épinglé tire l'image trojanisée depuis le 24 avril. La release, créée par github-actions[bot] avec un nom charabia, reste un temps listée comme Latest.
Échapper les entrées des workflows (anti-injection), restreindre les permissions du GITHUB_TOKEN, exiger une approbation avant publication, et côté consommateur épingler par version et digest plutôt que par tag mutable.
Chronologie de l'attaque
elementary-data 0.23.3 est téléversé sur PyPI à 22h20 UTC et l'image trojanisée poussée sur le GHCR.
crisperik ouvre l'issue #2205 ; H-Max confirme et escalade sur le Slack communautaire.
L'équipe a retiré 0.23.3 de PyPI et l'image du GHCR, puis publié une version saine 0.23.4.
Comment l'attaquant a procédé
Cet incident met en jeu les vecteurs d'attaque suivants du catalogue SOCLE ; chacun renvoie à sa fiche, où l'on trouve les exigences qui le neutralisent :
La leçon à en tirer
Échapper les entrées dans les workflows ; vérifier la provenance à la publication ; permissions minimales du jeton.
Les exigences SOCLE qui auraient limité cet incident
Cet incident se rattache à 20 exigences du référentiel, par domaine. Les satisfaire n'aurait pas forcément tout empêché, mais aurait réduit la probabilité de l'attaque, limité son impact ou accéléré sa détection :