Une fois toutes les 5 minutes

Télécharger les artefacts non sécurisés via GitHub Actions

Vidéos connexes

Nous contacter

WhatsApp / Téléphone

La façon dont la plateforme GitHub Actions stocke les artefacts de construction pourrait permettre aux attaquants d'injecter du code malveillant dans des projets logiciels avec des flux de travail CI/CD (intégration continue et livraison continue) qui n'effectuent pas de filtrage adéquat lors du téléchargement d'artefacts. Des chercheurs en cybersécurité ont identifié plusieurs scripts de téléchargement d'artefacts populaires utilisés par des milliers de dépôts qui sont vulnérables à ce problème.

"Nous avons constaté que lorsque des artefacts sont transférés entre différents flux de travail, il existe un risque majeur d'empoisonnement d'artefact - une technique dans laquelle un attaquant remplace le contenu d'un artefact légitime par un artefact malveillant modifié pour lancer une attaque de la chaîne d'approvisionnement", selon le fournisseur Les chercheurs de l'entreprise de sécurité de la chaîne Legit Security ont déclaré dans leur analyse du problème.

Pour attaquer le pipeline CI/CD d'un projet vulnérable qui télécharge et consomme des artefacts générés par d'autres flux de travail, un attaquant n'aurait qu'à forker le référentiel contenant ces flux de travail et à les modifier dans la copie locale de manière à ce qu'ils génèrent des artefacts frauduleux, puis à renvoyer des demandes d'extraction au référentiel d'origine qui n'a pas besoin d'accepter ces demandes.

Faille logique dans l'API de stockage d'artefacts

GitHub Actions est une plateforme CI/CD permettant d'automatiser la construction et le test de code logiciel. Le service est gratuit pour les dépôts publics et inclut un moteur d'exécution et un espace de stockage gratuits pour les dépôts privés. Il est largement adopté par les projets qui utilisent GitHub pour héberger et gérer leurs dépôts de code source.

1 seconde sur 27 secondesVolume 0%

Les flux d'actions GitHub sont des processus automatisés définis dans des fichiers .yml utilisant la syntaxe YAML qui s'exécutent lorsque certains déclencheurs ou événements se produisent, comme lorsqu'un nouveau code est livré à un dépôt. Les artefacts de construction sont des binaires compilés, des journaux et d'autres fichiers qui résultent de l'exécution d'un flux de travail et de ses travaux individuels. Ces artefacts sont sauvegardés dans des bacs, et chaque flux de travail se voit attribuer un bac spécifique à partir duquel il peut charger et télécharger des fichiers ultérieurement.

L'"action" (script) de référence fournie par GitHub pour le téléchargement d'artefacts ne prend pas en charge le téléchargement d'artefacts inter-flux de travail, mais la réutilisation d'artefacts générés par différents flux de travail en tant que données d'entrée pour les étapes de construction suivantes est un cas d'utilisation courant pour les projets de logiciels. C'est pourquoi les développeurs créent leurs propres scripts personnalisés qui s'appuient sur l'API GitHub Actions pour utiliser un filtrage plus complexe afin de télécharger des artefacts, tels que ceux créés par des fichiers de flux de travail spécifiques, des utilisateurs spécifiques, des branches spécifiques, etc.

Le problème découvert par Legit Security est que l'API ne fait pas la différence entre les artefacts téléchargés par les dépôts forkés et les dépôts de base, de sorte que si un script de téléchargement filtre les artefacts générés par un fichier de flux de travail spécifique à partir d'un dépôt spécifique, l'API servira la dernière version des artefacts générés par ce fichier, mais il pourrait s'agir d'une version malveillante générée automatiquement par une opération de demande d'extraction à partir d'une version forkée du dépôt.

"En clair : dans un flux de travail vulnérable, tout utilisateur de GitHub peut créer une branche qui construit un artefact", expliquent les chercheurs. "Cet artefact est ensuite injecté dans le processus de construction du référentiel original et son résultat est modifié. Il s'agit d'une autre forme d'attaque de la chaîne d'approvisionnement logicielle, dans laquelle le résultat de la construction est modifié par l'attaquant.

Les chercheurs ont découvert quatre actions personnalisées développées par la communauté pour télécharger tous les artefacts vulnérables. L'une d'entre elles est répertoriée comme une dépendance dans plus de 12 000 dépôts.

Exemple de rouille

L'un des dépôts qui utilise de tels scripts personnalisés dans l'un de ses flux de travail est le dépôt officiel du langage de programmation Rust. Le flux de travail vulnérable nommé ci.yml est responsable de la construction et du test du code du référentiel et utilise une action personnalisée pour télécharger un artefact nommé libgccjit.so (un fichier de bibliothèque Linux), qui est fourni par un référentiel tiers. Génération de flux de travail.

Tout ce qu'un attaquant a à faire est de créer un dépôt tiers, de modifier le flux de travail de ce dépôt pour produire une version malveillante de la bibliothèque, et d'envoyer une demande d'extraction au dépôt d'origine pour produire l'artefact. Si un flux de travail Rust introduit par la suite une version empoisonnée de la bibliothèque, un attaquant sera en mesure d'exécuter un code malveillant dans le dépôt Rust en utilisant les autorisations du flux de travail.

"Une fois exploité, un pirate peut modifier les branches du référentiel, les demandes d'extraction, les problèmes, les versions et toutes les entités disponibles pour les autorisations de jetons de flux de travail", ont déclaré les chercheurs.

Les utilisateurs doivent mettre en place un filtrage plus strict des téléchargements d'artefacts

GitHub a répondu au rapport de Legit en ajoutant des capacités de filtrage à l'API que les développeurs peuvent utiliser pour mieux identifier les artefacts créés par une instance spécifique d'un flux de travail (ID d'exécution du flux de travail). Cependant, ce changement ne peut pas être imposé dans les implémentations existantes sans briser les flux de travail, de sorte que les utilisateurs devront mettre à jour leurs flux de travail avec un filtrage plus strict afin d'être protégés.

Une autre solution consiste à filtrer les artefacts téléchargés par le hash du commit qui les a générés, ou à exclure complètement les artefacts créés par des pull requests en utilisant l'option exclude_pull_requests. Legit Security a également contacté l'auteur du script vulnérable de téléchargement d'artefacts personnalisés qu'ils ont découvert.

"Lorsqu'il s'agit de la sécurité de la chaîne d'approvisionnement, l'accent a toujours été mis sur la prévention de l'apport de codes malveillants, de sorte que chaque fois que vous effectuez une modification dans un dépôt, que vous créez une demande d'extraction ou que vous faites une demande de modification, GitHub dispose d'un grand nombre de contrôles de validation intégrés", a déclaré Liav Caspi, directeur de la technologie de Legit Security, à CSO. "Quelqu'un doit approuver votre code, quelqu'un doit le fusionner, donc quelqu'un est impliqué. Ce que nous avons essayé de trouver, ce sont des techniques qui exploitent des problèmes de logique où n'importe qui peut l'influencer sans examen, et je pense que c'est l'une d'entre elles. Si quelqu'un était au courant, il pourrait injecter l'artefact sans aucune approbation".

Généralement, explique Caspi, le flux de travail d'un pipeline CI s'exécute automatiquement sur une demande d'extraction pour tester le code avant de l'examiner manuellement, et si la demande d'extraction contient des artefacts qui doivent être construits, le flux de travail les construira. Selon lui, un attaquant sophistiqué pourrait créer une demande d'extraction pour construire un artefact, puis supprimer la demande en fermant le commit, et tout le bruit de l'activité présente dans les dépôts de code source d'aujourd'hui passerait très probablement inaperçu.

Nous contacter