Aller au contenu
Sécurité medium

elementary-data (PyPI + GHCR)

3 min de lecture
Point de compromission dans la chaîne Rupture · étape CI/CD
Source
amont
Dépendances
deps
Build & CI
CI/CD
Packaging
artefact
Release
provenance
Registres
distribution
Déploiement
admission
Runtime
exécution
Rayon d'explosion — compromission à l'étape CI/CD, propagation possible aux consommateurs. Domaines : Orchestration, Poste de travail, Source, Intégration, Release, Déploiement, Fournisseurs, IA
Gravité critique
Release forgée poussée via une injection de script dans un workflow GitHub Actions ; artefacts piégés publiés sur PyPI et GHCR.
0.23.3
version piégée
PyPI + GHCR
double canal
~245 Ko
charge base64 (.pth)
24 avr.
image trojan dès le

En bref

Date
04/05/2026
Gravité
Critique
Étape de la chaîne
CI/CD
Domaines SOCLE
Orchestration+ Poste de travail, Source, Intégration, Release, Déploiement, Fournisseurs, IA

Que s'est-il passé ?

Contexte

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.

Mécanisme

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.

Impact

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.

Parades

É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

24 avril 2026
Publication malveillante

elementary-data 0.23.3 est téléversé sur PyPI à 22h20 UTC et l'image trojanisée poussée sur le GHCR.

25 avril 2026
Signalement

crisperik ouvre l'issue #2205 ; H-Max confirme et escalade sur le Slack communautaire.

4 mai 2026
Documentation et remédiation

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

Ce qu'il faut retenir

É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 :

Pour aller plus loin

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn