EN
en direct

GitHub Actions verrouille les dépendances des workflows et borne les secrets pour casser les attaques supply chain

Face aux détournements de tags qui ont frappé tj-actions et 23 000 dépôts, GitHub déploie une feuille de route de sécurité pour Actions : lockfiles de dépendances, secrets scopés et pare-feu d’égression. Deux mesures sont déjà disponibles : l’épinglage par SHA et l’OIDC.

Un train d’engrenages sombres identiques où un seul engrenage ambre est légèrement sorti de son engrènement.

Mars 2025. L’attaque tj-actions repositionne un tag de version vers un commit malveillant : 23 000 dépôts exécutent du code de récolte d’identifiants, et 14 brèches secondaires sont confirmées. 26 mars 2026. GitHub publie sa feuille de route de sécurité pour Actions. Entre les deux, la conclusion est sans appel : le problème n’est pas une erreur de configuration, c’est une faille d’architecture.

Le vecteur de tj-actions est d’une simplicité déconcertante. Quand un workflow écrit uses: actions/checkout@v4, GitHub résout le tag au moment de l’exécution — et v4 peut pointer demain vers un commit différent d’aujourd’hui. L’épinglage par SHA (le hash de 40 caractères) colmate le niveau supérieur, mais pas les dépendances transitives : une composite action appelle elle-même d’autres actions, dont les références restent muables. C’est exactement ce trou que la feuille de route de GitHub entend refermer.

Un vecteur qui se propage à la vitesse d’un tag

Le cas tj-actions n’est pas isolé. Sur la dernière année, des incidents touchant Nx et trivy-action ont suivi le même scénario : une dépendance compromise se propage en amont, les workflows s’exécutent sans observabilité ni contrôle, et des identifiants sur-privilégiés partent via un accès réseau non restreint. La constante n’est pas la sophistication de l’attaque — repositionner un tag est trivial — mais la vitesse de propagation : un seul commit malveillant atteint, en quelques heures, des milliers de dépôts qui ne sauront jamais ce qui s’est exécuté chez eux.

C’est ce constat qui explique la structure de la feuille de route en trois couches : écosystème (dépendances déterministes), surface d’attaque (politiques et secrets scopés), infrastructure (observabilité et pare-feu d’égression). L’objectif n’est pas de rendre l’attaque impossible, mais de faire en sorte qu’elle soit visible et bornée — qu’un compromis de dépendance cesse d’être un compromis de toute la chaîne.

Le lockfile de workflow, le changement central

La pièce maîtresse est un bloc dependencies: dans le YAML du workflow. Comme un go.sum ou un package-lock.json, il enregistre l’arbre complet des dépendances — directes et transitives — avec leur SHA de commit. Le comportement est celui d’un verrou : si un hash ne correspond pas, le job échoue avant d’exécuter le moindre code.

yaml
dependencies:
  actions/checkout:
    version: v4.2.2
    sha: 11bd71901bbe5b1630ceea73d27597364c9af683
  actions/setup-node:
    version: v4.1.0
    sha: 39370e3970a6d050c480ffad4ff0ed4d3fdee5af

L’intérêt dépasse la simple sécurité : les mises à jour de dépendances deviennent des diffs de pull request, soumis à la revue de code, au lieu de se propager silencieusement au prochain run. La résolution se fait via la CLI GitHub, qui régénère le lockfile. La fonctionnalité entre en preview au deuxième ou troisième trimestre 2026, pour une disponibilité générale fin d’année.

Les secrets scopés et la fin de l’héritage implicite

Le second chantier attaque le problème des identifiants. Aujourd’hui, les secrets Actions sont scopés au niveau du dépôt ou de l’organisation, et ils se propagent largement par défaut — en particulier à travers les reusable workflows. Le modèle à venir, les secrets scopés, lie chaque identifiant à un contexte d’exécution explicite : un dépôt, une branche, un environnement, une identité de workflow, ou un reusable workflow de confiance.

Une rupture structurelle accompagne ce changement : l’accès en écriture à un dépôt ne conférera plus la gestion des secrets. Cette permission bascule vers un rôle dédié. C’est le passage au moindre privilège par défaut : un secret n’est délivré que si le workflow et le contexte d’exécution sont tous deux explicitement approuvés.

Les politiques d’exécution et le pare-feu d’égression

Deux briques complètent le dispositif. Les politiques d’exécution portent le cadre de rulesets de GitHub sur les déclencheurs de workflow : qui peut lancer un workflow, et quels événements sont autorisés — par exemple restreindre workflow_dispatch aux mainteneurs, ou interdire pull_request_target pour les contributions externes. Un mode évaluation permet de voir ce qui aurait été bloqué avant d’activer l’application.

Le pare-feu d’égression natif, le plus ambitieux et le plus lointain (preview fin 2026, disponibilité générale 2027), opère en couche 7, hors de la VM du runner. Il reste donc efficace même si un attaquant obtient le root à l’intérieur du runner. Deux modes : monitor, qui audite tout le trafic sortant corrélé au workflow, au job et à l’étape, puis enforce, qui bloque tout ce qui n’est pas sur la liste d’autorisation.

La télémétrie qui manquait : Actions Data Stream

À côté du pare-feu, GitHub prépare Actions Data Stream, un flux de télémétrie qui expose les signaux d’exécution des runners — process, système de fichiers, comportement réseau — en quasi temps réel. Aujourd’hui, un workflow compromis tourne dans une boîte noire ; demain, la plateforme promet de rendre visible ce qui s’y passe, et de corréler l’activité au workflow, au job et à l’étape qui l’ont déclenchée.

C’est le pendant indispensable du reste du dispositif : un pare-feu sans visibilité ne fait que bloquer à l’aveugle, et un lockfile sans télémétrie ne détecte pas ce qui a déjà été compromis avant le verrouillage. Pour les équipes qui gèrent des runners auto-hébergés, la télémétrie est aussi le seul moyen de savoir ce qu’un runner, par nature jetable, a réellement exécuté.

Ce qu’il faut faire dès maintenant

Deux mesures sont déjà disponibles, et ce sont elles qui comptent aujourd’hui.

Épinglez vos actions par SHA. Cela ne règle pas les dépendances transitives, mais ferme le vecteur « tag repositionné ». Un audit tient en une commande :

bash
grep -rn 'uses:' .github/workflows/ | grep -v '@[a-f0-9]\{40\}'

Toute ligne remontée est une exposition potentielle : remplacez actions/checkout@v4 par le hash de commit complet, en gardant le tag en commentaire pour la lisibilité.

Basculez sur l’OIDC avec les custom property claims. Disponible en GA depuis avril 2026, l’OIDC émet des jetons courts et scopés, au lieu de stocker des identifiants longue durée comme AWS_ACCESS_KEY_ID dans les secrets du dépôt. Les custom property claims permettent de définir des politiques IAM cloud fondées sur les métadonnées de l’organisation — un dépôt ajouté à l’équipe backend hérite automatiquement du bon rôle, sans toucher au YAML.

Le calendrier compte : la plupart des briques entrent en preview ce trimestre et en disponibilité générale d’ici la fin d’année. Attendre la GA pour s’y intéresser, c’est découvrir d’un coup un changement de modèle de confiance en production. Commencer maintenant — en épinglant par SHA et en cartographiant les déclencheurs — transforme une migration subie en migration préparée. La chaîne d’approvisionnement n’est aussi solide que son tag le plus lâche, et la plupart des pipelines reposent encore sur des tags lâches.

Verdict

Si vous maintenez des workflows GitHub Actions, épinglez vos actions par SHA et basculez vos identifiants cloud vers l’OIDC dès cette semaine — ce sont les deux leviers immédiats et gratuits. Si vous gérez une organisation, préparez la bascule vers les secrets scopés et les politiques d’exécution en commençant par cartographier qui peut déclencher quoi : le mode évaluation des règles vous y aidera sans rien casser. Le lockfile de dépendances, lui, arrivera avec la preview et représentera la vraie rupture — mais d’ici là, l’épinglage par SHA est le filet qui vous sépare du prochain tj-actions.

Références

Le brief cyber, chaque mardi

Les failles qui comptent, les correctifs à appliquer, en dix minutes de lecture.

Pas de spam. Désinscription en un clic.
à lire ensuite

Sur le même sujet

Docker corrige une exécution de commandes via le checkout Git de BuildKit et cinq autres failles de build

Le 16 juillet 2026, Docker Engine 29.6.2 a corrigé cinq vulnérabilités de BuildKit, dont la CVE-2026-15793 qui permet d’exécuter des commandes sur l’hôte lors du checkout d’une source Git malveillante, puis la CVE-2026-17106 a été corrigée dans la 29.7.0. Les pipelines qui construisent à partir de sources non maîtrisées doivent mettre à jour Engine, Buildx et BuildKit sans attendre.

GitHub aligne la rétention des checks et des runs Actions sur 90 jours dès le 1er octobre

À partir du 1er octobre 2026, GitHub applique à la rétention des checks, des workflow runs et des statuses le même réglage que celui des artefacts et des logs, soit 90 jours par défaut au lieu de plus de 400. Les équipes qui s’appuient sur cet historique doivent vérifier leur réglage et exporter ce qu’elles veulent conserver.

← Retour au fil

Tapez au moins deux caractères.

naviguer ouvrir esc fermer