Aller au contenu

Validateur GitHub Actions · CI/CD

Détectez les erreurs de workflow et les failles de sécurité avant de pousser.

Collez un workflow GitHub Actions et obtenez ses erreurs YAML ainsi que les mauvaises configurations de sécurité que les linters ordinaires ignorent — instantanément, dans votre navigateur. Sans installation, sans inscription.

S’exécute dans votre navigateur Sans inscription Axé sécurité Mis à jour le 19 juil. 2026

Espace d’essai du validateur de workflow GitHub Actions

.github/workflows/ci.yml

Runs entirely in your browser — nothing is uploaded.

Tip: press Esc to release keyboard focus from the editor.

Results

Load an example or paste a workflow, then validate to see YAML errors and security checks here.

La faille

La syntaxe, c’est la partie facile.

actionlint maîtrise la syntaxe des workflows — le typage des expressions, les dépendances entre jobs, et même shellcheck sur vos blocs run. Continuez à l’utiliser. Mais un workflow peut être un YAML parfaitement valide et tout de même livrer vos secrets à un attaquant.

Les erreurs dangereuses sont des erreurs de sécurité : exécuter du code de fork non fiable sous pull_request_target, interpoler du texte contrôlé par un attaquant dans un shell, récupérer une action tierce par un tag que son auteur peut déplacer en silence, ou accorder un jeton write-all à un job qui n’a besoin que de lire. Ce sont les motifs à l’origine d’incidents réels de chaîne d’approvisionnement — voir le guide de renforcement de la sécurité de GitHub et le descriptif de la pwn request.

Ce validateur vérifie les deux — le YAML et les mauvaises configurations de sécurité — afin que vous puissiez valider un workflow GitHub Actions avant de le pousser, sans rien à installer et sans rien envoyer.

Voir la liste complète dans les contrôles de sécurité, ou essayez l’espace d’essai en direct ci-dessus.

Le pipeline

Comment ça marche.

Cinq étapes déterministes s’exécutent de bout en bout à chaque validation — entièrement dans votre onglet de navigateur, à chaque fois.

  1. Analyser le YAML.

    Votre workflow est analysé avec un lecteur YAML — les erreurs de syntaxe, les mauvaises indentations et les problèmes structurels sont signalés avec la ligne qui a échoué.

  2. Cartographier le workflow.

    Les déclencheurs, les jobs, les permissions et chaque étape sont lus dans un modèle afin que l’analyseur sache ce qui s’exécute, quand et avec quel jeton.

  3. Exécuter les contrôles.

    Chaque règle de sécurité parcourt le modèle — à la recherche de paires déclencheur + checkout risquées, d’expressions non fiables dans les blocs run, d’épinglages d’actions mutables et de permissions trop larges.

  4. Classer par gravité.

    Les résultats sont notés en gravité élevée, moyenne ou faible afin que les risques de pwn-request et d’injection remontent en tête, devant les détails de style.

  5. Montrer la correction.

    Chaque résultat relie l’emplacement exact à une remédiation concrète — le déclencheur sûr, le motif de variable env, le SHA épinglé, la permission restreinte.

Contrôles de sécurité

Les 4 contrôles qui comptent.

Au-delà de la validité du YAML, l’analyseur recherche les mauvaises configurations qui mènent à des secrets divulgués et à des pipelines compromis. Chacune ci-dessous montre le motif risqué et la correction.

pull_request_target + checkout (pwn request)

Gravité élevée

Un workflow pull_request_target s’exécute avec les secrets du dépôt de base et un jeton en lecture/écriture, mais peut être déclenché depuis n’importe quel fork. Extraire et exécuter le head de la PR fait exécuter du code non fiable avec vos secrets.

Risqué

.github/workflows/ci.yml
# DANGEROUS — runs fork code with base-repo secrets
on: pull_request_target
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - run: npm ci && npm run build   # attacker's code, your token

Corrigé

.github/workflows/ci.yml
# SAFE — untrusted code runs with no secrets
on: pull_request          # not pull_request_target
permissions:
  contents: read
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4   # checks out the PR safely
      - run: npm ci && npm run build

Script injection via ${{ github.* }}

Gravité élevée

Interpoler une valeur contrôlable par un attaquant — un titre de PR, un nom de branche ou le corps d’un ticket — directement dans un bloc run permet à cette valeur de sortir de la chaîne et de s’exécuter comme des commandes shell.

Risqué

step
# DANGEROUS — title is substituted into the shell verbatim
- run: echo "Title: ${{ github.event.pull_request.title }}"
  # a title of  a"; rm -rf ~ #  runs as a command

Corrigé

step
# SAFE — pass through env, quote, treat as data
- env:
    TITLE: ${{ github.event.pull_request.title }}
  run: echo "Title: $TITLE"

Unpinned third-party actions

Gravité moyenne

Une référence de tag ou de branche (@v4, @main) est mutable — le mainteneur de l’action, ou quiconque compromet son compte, peut la déplacer vers du nouveau code qui s’exécute alors dans votre pipeline avec votre jeton.

Risqué

step
# RISKY — mutable references can change under you
- uses: some-org/deploy-action@v2
- uses: another-org/setup@main

Corrigé

step
# SAFE — pin to an immutable full commit SHA
- uses: some-org/deploy-action@a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0  # v2.3.1
- uses: another-org/setup@0f1e2d3c4b5a69788796a5b4c3d2e1f00112233  # main @ 2024-05

Over-broad GITHUB_TOKEN permissions

Gravité moyenne

permissions: write-all (ou un bloc permissions omis avec une valeur par défaut permissive) confie à chaque étape un jeton capable de pousser du code, de publier des paquets et de modifier des tickets — bien plus que ce dont la plupart des jobs ont besoin.

Risqué

.github/workflows/ci.yml
# RISKY — every job gets a fully privileged token
permissions: write-all
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: ./run-tests.sh

Corrigé

.github/workflows/ci.yml
# SAFE — least privilege, scoped to what's needed
permissions:
  contents: read
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - run: ./run-tests.sh

Les permissions peuvent être restreintes par job ou pour l’ensemble du workflow — voir la référence des permissions de GitHub. La détection du pipe-vers-shell et des secrets-dans-pull-request fonctionne aussi dès aujourd’hui, et d’autres arrivent bientôt.

Analyse statique

Une note sur la portée : il s’agit d’un analyseur statique — il lit votre workflow sans l’exécuter, il détecte donc les motifs de mauvaise configuration à fort signal ci-dessus ainsi que les erreurs YAML, mais il n’exécute pas les jobs et ne résout pas le contenu en direct des actions référencées. Considérez un résultat propre comme une forte confiance avant le push, et associez-le tout de même à actionlint, aux protections de branche et à des valeurs par défaut de moindre privilège au niveau de l’organisation.

FAQ

Vos questions, nos réponses.

Appuyez sur une question pour afficher la réponse.

Deux choses à la fois. D’abord, il analyse le YAML de votre workflow et signale les erreurs de syntaxe, les mauvaises indentations et les erreurs structurelles — celles qui font échouer une exécution avant même qu’une seule étape ne s’exécute. Ensuite, et c’est le plus important, il exécute un ensemble de contrôles de mauvaise configuration de sécurité que les linters ordinaires ignorent : le motif « pwn request » pull_request_target + checkout, l’injection de script via des expressions ${{ github.* }} non fiables, les actions tierces épinglées à un tag mutable plutôt qu’à un SHA de commit, et les permissions trop larges telles que write-all. Vous obtenez les erreurs et les motifs dangereux en une seule passe.

Non. Le validateur s’exécute à 100 % côté client. Le YAML de votre workflow est analysé à l’intérieur de votre onglet de navigateur — rien n’est envoyé à un serveur, et il n’y a ni compte ni inscription. Vous pouvez coller en toute sécurité des workflows internes ou propriétaires, y compris ceux contenant des noms de secrets et des étiquettes de runner privées.

actionlint excelle dans la syntaxe, le typage des expressions et l’intégration de shellcheck — et vous devriez continuer à l’utiliser. Mais les erreurs qui compromettent réellement les dépôts sont des erreurs de sécurité : exécuter du code non fiable avec un jeton privilégié, interpoler du texte contrôlé par un attaquant directement dans un shell, ou récupérer une action tierce par un tag que son auteur peut déplacer en silence. Cet outil se concentre sur ces mauvaises configurations de sécurité, valide aussi le YAML, et ne nécessite aucune installation.

Un workflow déclenché par pull_request_target s’exécute dans le contexte du dépôt de base — avec accès à ses secrets et un GITHUB_TOKEN en lecture/écriture — mais il peut être déclenché par une pull request provenant de n’importe quel fork. Si ce workflow extrait également le head de la PR (actions/checkout avec la ref de la PR) puis compile, teste ou exécute des scripts à partir de celui-ci, le code du fork d’un attaquant s’exécute avec vos secrets. C’est la classique « pwn request ». Le validateur signale pull_request_target chaque fois qu’il est associé à un checkout de code de PR non fiable.

Lorsque vous intégrez une expression comme ${{ github.event.issue.title }} ou ${{ github.head_ref }} directement dans un bloc shell run:, GitHub substitue la valeur brute, contrôlable par l’attaquant, dans votre script avant que le shell ne l’analyse. Un titre tel que a"; rm -rf / # devient exécutable. La solution consiste à transmettre les valeurs non fiables via une variable env: et à les référencer sous la forme "$TITLE" afin que le shell les traite comme des données, jamais comme du code. Le validateur signale les expressions de contexte github non fiables utilisées à l’intérieur des étapes run.

Une référence comme actions/checkout@v4 ou some-org/action@main pointe vers un tag ou une branche que le mainteneur de l’action — ou un attaquant qui compromet son compte — peut déplacer vers du nouveau code à tout moment, et ce code s’exécute dans votre pipeline avec votre jeton. Épingler à un SHA de commit complet de 40 caractères (uses: actions/checkout@<sha>) rend la version immuable. Le validateur signale les actions tierces épinglées à un tag ou une branche mutable.

Non. Ce validateur est un outil communautaire indépendant et n’est ni affilié à GitHub, Inc., ni approuvé ou sponsorisé par celle-ci. « GitHub » et « GitHub Actions » ne sont utilisés ici qu’à titre descriptif, pour identifier le format de workflow que l’outil vérifie.

Collez le YAML du workflow dans un validateur basé sur le navigateur pour détecter les erreurs avant de valider — aucune installation ni aucun push nécessaires. Cet outil exécute l’ensemble complet des contrôles (structure YAML plus mauvaises configurations de sécurité) entièrement dans votre navigateur, vous obtenez donc un retour instantané sur les erreurs de syntaxe, l’absence de runs-on, les mauvais noms de déclencheurs et les motifs dangereux comme les actions non épinglées ou l’injection de script avant que le workflow n’atteigne GitHub.

Les problèmes fréquents incluent un runs-on manquant sur un job, une étape qui spécifie à la fois uses et run, une référence needs pointant vers un job qui n’existe pas, un nom d’événement déclencheur invalide, et une mauvaise indentation YAML. Le validateur détecte chacun d’eux comme des erreurs structurelles avec le numéro de ligne où le problème se produit, afin que vous puissiez les corriger avant que l’exécution n’échoue sur GitHub.

La plupart des vérificateurs statiques — actionlint, zizmor, action-validator — nécessitent une CLI ou une chaîne d’outils Rust/Go. Ce validateur est gratuit, ne nécessite ni installation ni inscription, et s’exécute entièrement dans votre navigateur. Il vérifie à la fois la validité du YAML et les mauvaises configurations de sécurité (actions non épinglées, injection de modèle, déclencheurs dangereux, permissions de jeton trop larges) que couvrent les outils en ligne de commande, sans aucune configuration locale.

More free, private DevOps tools.

Le validateur GitHub Actions est l’un des outils de OpsCanopy — une canopée grandissante de validateurs, de convertisseurs et de testeurs basés sur le navigateur qui ne touchent jamais à un serveur.

Vous débutez avec Docker ?  Lire le guide Docker →

29 outils gratuits, tous utilisables hors ligne — opscanopy.com fonctionne sans inscription et sans rien téléverser.

Outils connexes : le convertisseur d’ignore CVE et AlertLint, le testeur de règles Loki. Parcourez le répertoire complet des outils.

Non affilié à GitHub, Inc., ni approuvé ou sponsorisé par celle-ci. GitHub et GitHub Actions sont des marques de GitHub, Inc., utilisées ici uniquement à titre descriptif pour identifier le format de workflow que cet outil vérifie.