En bref
Que s'est-il passé ?
L'action GitHub simonecorsi/mawesome est compromise par empoisonnement de tags : plusieurs tags de version sont déplacés vers un commit malveillant absent de l'historique normal de l'action.
L'attaquant obtient un accès au dépôt, force-pushe des commits malveillants et repointe les tags latest, v1, v2 et v2.2.0 vers le commit e339407b8e34. Tout workflow référençant ces tags exécute alors le code de l'attaquant dans son runner GitHub Actions. Les tags v2.0.0 et v2.1.0, comme les workflows épinglés par SHA, restent indemnes. Le contenu exact du payload n'a pas été détaillé publiquement.
Toute exécution de l'action par un tag empoisonné tire le code malveillant dans le pipeline. La compromission reproduit, le même jour, le schéma observé sur codfish/semantic-release-action.
Épingler les actions par SHA de commit complet et jamais par tag, réduire les permissions et secrets exposés aux workflows, filtrer l'egress des runners, et détecter les mouvements de tags anormaux sur les dépendances tierces.
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
Épingler les actions par SHA de commit complet ; jetons CI scopés et courts ; détecter les mouvements de tags anormaux.
Les exigences SOCLE qui auraient limité cet incident
Cet incident se rattache à 25 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 :