On March 19, 2026, attackers force-pushed 76 of 77 version tags in aquasecurity/trivy-action
to credential-stealing malware — replacing the legitimate entrypoint with a multi-stage stealer
that ran silently before the real scanner. Workflows appeared to complete normally.
Every team that referenced trivy-action@v0.x without SHA pinning was exfiltrating
secrets to attacker infrastructure without knowing it. Twelve months earlier, the same vector
hit tj-actions/changed-files, compromising 23,000+ repositories in 24 hours
(CVE-2025-30066, CISA alert). In May 2026, Megalodon poisoned over 5,500 additional repositories
via automated workflow injection commits.
Le 19 mars 2026, des attaquants ont réécrit par force 76 des 77 tags de version de
aquasecurity/trivy-action vers un malware voleur de credentials — remplaçant
l’entrypoint légitime par un stealer multi-étapes qui s’exécutait
silencieusement avant le vrai scanner. Les workflows semblaient se terminer normalement.
Chaque équipe référençant trivy-action@v0.x sans pinning SHA
exfiltrait des secrets vers l’infrastructure attaquante sans le savoir. Douze mois plus tôt,
le même vecteur avait touché tj-actions/changed-files, compromettant
23 000+ dépôts en 24 heures (CVE-2025-30066, alerte CISA). En mai 2026, Megalodon
a empoisonné plus de 5 500 dépôts supplémentaires via des commits
d’injection de workflows automatisés.
The attack surface is not a secret vault, a CVE in your dependencies, or a misconfigured cloud role. It is the CI/CD pipeline itself — the infrastructure that builds, tests, signs, and ships every release you deploy. This guide covers the six hardening controls that block the majority of 2025–2026 GitHub Actions attack patterns: least-privilege permissions, secret scoping, SHA-based action pinning, SLSA Build Levels, reusable workflow risks, and what GitHub’s 2026 security roadmap will add to the mix.
La surface d’attaque n’est ni un coffre de secrets, ni une CVE dans vos dépendances, ni un rôle cloud mal configuré. C’est le pipeline CI/CD lui-même — l’infrastructure qui compile, teste, signe et livre chaque release que vous déployez. Ce guide couvre les six contrôles de durcissement qui bloquent la majorité des patterns d’attaques GitHub Actions 2025–2026 : permissions moindre privilège, portage des secrets, pinning d’actions par SHA, SLSA Build Levels, risques des workflows réutilisables, et ce que la roadmap sécurité 2026 de GitHub apportera.
1. Workflow Permissions: Start With read-all, Grant Explicitly
1. Permissions de Workflow : Commencer par read-all, Accorder Explicitement
The GITHUB_TOKEN is the most abused credential in GitHub Actions exploits.
Before February 2023, GitHub set the default to read-write for all scopes,
meaning any compromised action could push code, create releases, write to packages,
or modify issues without additional configuration. Although new repositories now default to
read, many organizations running workflows created before that cutoff still
operate with write-permissive defaults.
Le GITHUB_TOKEN est la credential la plus exploitée dans les attaques GitHub Actions.
Avant février 2023, GitHub définissait la valeur par défaut à read-write
pour toutes les portées, ce qui signifiait qu’une action compromise pouvait pousser du code,
créer des releases, écrire dans les packages ou modifier les issues sans configuration
supplémentaire. Bien que les nouveaux dépôts aient maintenant une valeur par défaut
read, de nombreuses organisations exécutant des workflows créés avant
cette coupure fonctionnent toujours avec des défauts permissifs en écriture.
The correct pattern is to set permissions: read-all at the workflow level,
then override only the permissions each job actually requires. This limits blast radius:
even if a compromised third-party action runs inside your workflow, it cannot write to
your repository, publish packages, or modify deployments unless your YAML explicitly grants it.
Le bon pattern est de définir permissions: read-all au niveau du workflow,
puis de surcharger uniquement les permissions dont chaque job a réellement besoin.
Cela limite le rayon de blast : même si une action tierce compromise s’exécute
dans votre workflow, elle ne peut pas écrire dans votre dépôt, publier des packages
ou modifier les déploiements à moins que votre YAML ne l’accorde explicitement.
# Workflow-level: deny all write by default
permissions:
contents: read
pull-requests: read
jobs:
build:
runs-on: ubuntu-latest
# Job-level override — only this job can write to packages
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4
deploy:
runs-on: ubuntu-latest
# Deployment job needs id-token to request OIDC credentials
permissions:
id-token: write
contents: read
steps:
- name: Configure AWS via OIDC
uses: aws-actions/configure-aws-credentials@v4
Define permissions at the job level, not the workflow level, wherever possible.
A deploy job requesting id-token: write should not grant that permission
to the lint or test jobs running in the same workflow file. Granularity at the job level
ensures that even a compromised build step cannot request cloud credentials.
Définissez les permissions au niveau du job plutôt qu’au niveau du workflow chaque fois
que c’est possible. Un job de déploiement demandant id-token: write ne
doit pas accorder cette permission aux jobs de lint ou de test s’exécutant dans le même
fichier workflow. La granularité au niveau du job garantit que même une étape de build
compromise ne peut pas demander de credentials cloud.
2. Environment Secrets vs Repository Secrets: Scope to Minimum Context
2. Secrets d’Environnement vs Secrets de Dépôt : Porter au Contexte Minimum
Repository secrets are available to every workflow in a repository, on every branch, triggered by any event. This is rarely the right scope. A production database password or a cloud deployment key that is accessible to a workflow triggered by a fork pull request is a significant misconfiguration. GitHub environments provide the correct answer: a secret scoped to a named environment is only available to jobs that reference that environment, and environments support protection rules such as required reviewers, deployment branches, and wait timers.
Les secrets de dépôt sont disponibles pour chaque workflow d’un dépôt, sur chaque branche, déclenchés par n’importe quel événement. C’est rarement la bonne portée. Un mot de passe de base de données de production ou une clé de déploiement cloud accessible à un workflow déclenché par une pull request d’un fork est une mauvaise configuration significative. Les environnements GitHub apportent la bonne réponse : un secret porté à un environnement nommé n’est disponible que pour les jobs qui référencent cet environnement, et les environnements supportent des règles de protection comme les reviewers requis, les branches de déploiement et les timers d’attente.
jobs:
deploy-production:
runs-on: ubuntu-latest
# Only jobs referencing this environment can access its secrets
environment: production
steps:
- name: Deploy
env:
# ${{ secrets.PROD_DB_URL }} is ONLY available because of `environment: production`
DATABASE_URL: ${{ secrets.PROD_DB_URL }}
run: ./scripts/deploy.sh
Configure production environments with a required reviewers rule and restrict deployment
to the main branch only. This means that even if an attacker gains write
access to a feature branch, they cannot trigger the deployment job that holds your
production secrets. The secret never leaves GitHub’s infrastructure unless the
protection rules are explicitly satisfied.
Configurez les environnements de production avec une règle de reviewers requis et
restreignez le déploiement à la branche main uniquement. Cela signifie
que même si un attaquant obtient un accès en écriture à une branche de
fonctionnalité, il ne peut pas déclencher le job de déploiement qui contient vos
secrets de production. Le secret ne quitte jamais l’infrastructure de GitHub à moins
que les règles de protection ne soient explicitement satisfaites.
3. Pin Every Action to a Full Commit SHA — Not a Tag
3. Pinner Chaque Action sur un SHA Complet — Pas un Tag
Git tags are mutable. An attacker who compromises the credentials of an action maintainer
can silently repoint any tag — including @v4, @latest,
or any historical tag like @v0.32.1 — to a malicious commit without
changing the tag name. The trivy-action attack of March 2026 demonstrated this at scale:
76 of 77 tags were rewritten in a single operation using force-push.
A commit SHA, by contrast, is content-addressed and cryptographically immutable.
No force-push can change what @abc1234... resolves to.
Les tags Git sont mutables. Un attaquant qui compromet les credentials d’un mainteneur
d’action peut silencieusement repointre n’importe quel tag — y compris
@v4, @latest ou n’importe quel tag historique comme
@v0.32.1 — vers un commit malveillant sans changer le nom du tag.
L’attaque trivy-action de mars 2026 l’a démontré à grande
échelle : 76 des 77 tags ont été réécrits en une seule
opération via force-push. Un SHA de commit, en revanche, est adressé par contenu
et cryptographiquement immuable. Aucun force-push ne peut changer ce à quoi
@abc1234... se résout.
# UNSAFE — tag is mutable, can be silently repointed
- uses: actions/checkout@v4
# SAFE — SHA is immutable
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# SAFE with readable comment (recommended pattern)
- uses: aquasecurity/trivy-action@6c175e9c4083a8c84ff71d243e605f8b5bd9bc8b # v0.35.0 (only clean tag)
Tools like StepSecurity Harden-Runner and actionlint can audit your workflows for unpinned actions in CI. Renovate and Dependabot both support automatic SHA-pinning updates with human-readable version comments, so you do not lose visibility into which version you are running.
Des outils comme StepSecurity Harden-Runner et actionlint peuvent auditer vos workflows pour les actions non-pinnées en CI. Renovate et Dependabot supportent tous deux les mises à jour automatiques du SHA-pinning avec des commentaires de version lisibles, donc vous ne perdez pas la visibilité sur la version que vous exécutez.
4. SLSA Build Levels: What GitHub Actions Gives You Out of the Box (and What It Doesn’t)
4. SLSA Build Levels : Ce que GitHub Actions vous Donne par Défaut (et ce qu’il ne donne pas)
SLSA (Supply-chain Levels for Software Artifacts) defines four build integrity levels. GitHub Actions hosted runners achieve SLSA Build Level 2 out of the box when you use GitHub’s Artifact Attestations feature. Level 2 requires that builds run on a hosted platform and that provenance is signed and tied to that platform’s identity. GitHub meets both requirements: hosted runners provide platform identity via OIDC tokens, and Sigstore handles the signature.
SLSA (Supply-chain Levels for Software Artifacts) définit quatre niveaux d’intégrité de build. Les runners hébergés GitHub Actions atteignent SLSA Build Level 2 par défaut lorsque vous utilisez la fonctionnalité Artifact Attestations de GitHub. Le niveau 2 requiert que les builds s’exécutent sur une plateforme hébergée et que la provenance soit signée et liée à l’identité de cette plateforme. GitHub remplit les deux conditions : les runners hébergés fournissent une identité de plateforme via des tokens OIDC, et Sigstore gère la signature.
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
attestations: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Build artifact
run: make build
- name: Generate SLSA provenance attestation (Build Level 2)
uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
with:
subject-path: dist/my-artifact
Build Level 3 requires stronger isolation: the build platform must prevent runs from influencing each other, and signing key material must be inaccessible to user-defined build steps. Standard GitHub Actions workflows do not meet L3 because build steps and provenance generation run in the same job — a compromised build step could theoretically exfiltrate the signing key. Achieving L3 requires using the slsa-github-generator reusable workflow, which isolates provenance generation in a separate job with separate OIDC context that user code cannot reach.
Build Level 3 exige une isolation plus forte : la plateforme de build doit empêcher les runs de s’influencer mutuellement, et le matériel de clé de signature doit être inaccessible aux étapes de build définies par l’utilisateur. Les workflows GitHub Actions standard n’atteignent pas le L3 parce que les étapes de build et la génération de provenance s’exécutent dans le même job — une étape de build compromise pourrait théoriquement exfiltrer la clé de signature. Atteindre L3 nécessite d’utiliser le workflow réutilisable slsa-github-generator, qui isole la génération de provenance dans un job séparé avec un contexte OIDC distinct que le code utilisateur ne peut pas atteindre.
For most teams shipping web applications, SLSA Build Level 2 (artifact attestations) combined with SHA-pinned actions and least-privilege permissions provides meaningful supply chain integrity. Level 3 is primarily relevant for teams distributing software to downstream consumers who need to verify provenance independently.
Pour la plupart des équipes livrant des applications web, SLSA Build Level 2 (attestations d’artefacts) combiné avec des actions pinnées par SHA et des permissions de moindre privilège fournit une intégrité significative de la chaîne d’approvisionnement. Le niveau 3 est principalement pertinent pour les équipes distribuant des logiciels à des consommateurs en aval qui ont besoin de vérifier la provenance de manière indépendante.
5. Reusable Workflow Supply Chain Risks
5. Risques Supply Chain des Workflows Réutilisables
Reusable workflows introduce a second category of supply chain risk that is distinct
from action pinning. When a workflow calls a reusable workflow with uses: org/repo/.github/workflows/build.yml@main,
it is executing an entire workflow file from another repository, potentially with access
to the calling repository’s secrets if secrets: inherit is used.
The attack surface is larger than a single action: the entire workflow file, including
all the actions it internally references, is within scope.
Les workflows réutilisables introduisent une deuxième catégorie de risque supply chain
distincte du pinning d’actions. Quand un workflow appelle un workflow réutilisable avec
uses: org/repo/.github/workflows/build.yml@main, il exécute un fichier workflow
entier depuis un autre dépôt, potentiellement avec accès aux secrets du dépôt
appelant si secrets: inherit est utilisé. La surface d’attaque est plus
grande qu’une seule action : le fichier workflow entier, y compris toutes les actions
qu’il référence en interne, est dans le périmètre.
# RISKY: floating ref + secrets: inherit
jobs:
build:
uses: my-org/shared-workflows/.github/workflows/build.yml@main
secrets: inherit # ALL repository secrets passed to external workflow
# SAFER: SHA-pinned ref + explicit secret passing
jobs:
build:
uses: my-org/shared-workflows/.github/workflows/build.yml@a1b2c3d4... # commit SHA
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # pass only what is needed
Three practices reduce reusable workflow risk. First, pin the called workflow to a
commit SHA, not a branch or tag. Second, never use secrets: inherit unless
you own and fully control the called workflow repository — prefer explicit secret
forwarding. Third, audit what actions the reusable workflow itself calls: a reusable
workflow that internally calls unpinned third-party actions is a transitive supply chain
risk that your SHA pin on the outer workflow does not address.
Trois pratiques réduisent les risques des workflows réutilisables. Premièrement,
pinnez le workflow appelé à un SHA de commit, pas une branche ou un tag.
Deuxièmement, n’utilisez jamais secrets: inherit à moins de
posséder et de contrôler totalement le dépôt du workflow appelé —
préférez le transfert de secrets explicite. Troisièmement, auditez quelles
actions le workflow réutilisable lui-même appelle : un workflow réutilisable
qui appelle en interne des actions tierces non-pinnées est un risque supply chain
transitif que votre pin SHA sur le workflow externe ne traite pas.
6. GitHub’s 2026 Security Roadmap: What’s Coming
6. La Roadmap Sécurité GitHub 2026 : Ce qui arrive
GitHub published its 2026 Actions security roadmap in response to the cascade of supply chain incidents. Three features will fundamentally change the hardening baseline once they reach general availability.
GitHub a publié sa roadmap sécurité Actions 2026 en réponse à la cascade d’incidents supply chain. Trois fonctionnalités changeront fondamentalement la ligne de base de durcissement une fois qu’elles atteindront la disponibilité générale.
Workflow dependency locking adds a dependencies section to
workflow YAML that locks every direct and transitive action to a specific commit SHA,
similar to go.mod + go.sum for Go modules or package-lock.json
for npm. GitHub verifies the lock before jobs execute. Teams can review changes to locked
dependencies in pull requests, getting the same change-review workflow they already have
for application dependencies. This eliminates the most common vector: tag mutation on
third-party actions.
Le verrouillage des dépendances de workflow ajoute une section
dependencies au YAML du workflow qui verrouille chaque action directe et
transitive à un SHA de commit spécifique, similaire à go.mod + go.sum
pour les modules Go ou package-lock.json pour npm. GitHub vérifie le
verrou avant l’exécution des jobs. Les équipes peuvent examiner les modifications
des dépendances verrouillées dans les pull requests, obtenant le même flux de
revue de changements qu’elles ont déjà pour les dépendances d’application.
Cela élimine le vecteur le plus courant : la mutation de tag sur les actions tierces.
Scoped secrets replaces the binary repository/environment model with fine-grained binding of credentials to explicit execution contexts. A secret can be scoped to specific branches, environments, workflow identities, or file paths. Critically, write access to a repository will no longer grant secret management permissions — that moves to a dedicated custom role. This is a breaking change that eliminates a privilege escalation path present in many current configurations: a collaborator with write access who creates a workflow can today read any repository secret.
Les secrets portés remplacent le modèle binaire dépôt/environnement par une liaison fine des credentials à des contextes d’exécution explicites. Un secret peut être porté à des branches spécifiques, des environnements, des identités de workflow ou des chemins de fichiers. Critiquement, l’accès en écriture à un dépôt ne accordera plus les permissions de gestion des secrets — cela passe à un rôle personnalisé dédié. C’est un changement qui élimine un chemin d’éscalade de privilèges présent dans de nombreuses configurations actuelles : un collaborateur avec accès en écriture qui crée un workflow peut aujourd’hui lire n’importe quel secret de dépôt.
Native Layer 7 egress firewall operates outside the runner VM, at the network layer, and remains immutable even if an attacker gains root inside the runner environment. Organizations define precise egress policies: allowed domains, IP ranges, permitted HTTP methods, and TLS requirements. A malicious action that attempts to exfiltrate secrets to attacker infrastructure will have its outbound connections blocked by a control the action itself cannot disable. This addresses the class of attacks where existing egress-monitoring tools (running as a step inside the runner) can be bypassed by attacker code with elevated runner privileges.
Le pare-feu de sortie natif Layer 7 opère en dehors de la VM du runner, au niveau réseau, et reste immuable même si un attaquant obtient les droits root à l’intérieur de l’environnement runner. Les organisations définissent des politiques de sortie précises : domaines autorisés, plages d’IP, méthodes HTTP autorisées et exigences TLS. Une action malveillante qui tente d’exfiltrer des secrets vers l’infrastructure de l’attaquant verra ses connexions sortantes bloquées par un contrôle que l’action elle-même ne peut pas désactiver. Cela traite la classe d’attaques où les outils de monitoring de sortie existants (s’exécutant comme une étape à l’intérieur du runner) peuvent être contournés par du code attaquant avec des privilèges runner élevés.
Most roadmap features enter public preview within 3–6 months and reach general availability at 6–9 months from announcement. In the meantime, the six controls described above — permissions, secret scoping, SHA pinning, attestations, reusable workflow hygiene, and keeping Dependabot enabled for Actions — cover the majority of the attack surface that the 2025–2026 incidents exploited.
La plupart des fonctionnalités de la roadmap entrent en prévisualisation publique dans 3–6 mois et atteignent la disponibilité générale à 6–9 mois après l’annonce. En attendant, les six contrôles décrits ci-dessus — permissions, portée des secrets, pinning SHA, attestations, hygiène des workflows réutilisables, et maintien de Dependabot activé pour les Actions — couvrent la majorité de la surface d’attaque exploitée par les incidents 2025–2026.
GitHub Actions Security Hardening Checklist 2026
Check-list de Durcissement GitHub Actions 2026
Apply these controls in order of risk reduction:
Appliquez ces contrôles dans l’ordre de réduction des risques :
permissions: read-all at workflow level, override per job
Définir permissions: read-all au niveau workflow, surcharger par job
uses: references to full 40-character commit SHAs
Pinner toutes les références uses: à des SHAs de commit complets de 40 caractères
.github/dependabot.yml
Activer les mises à jour de version Dependabot pour GitHub Actions dans .github/dependabot.yml
actions/attest-build-provenance to publish jobs (SLSA Build Level 2)
Ajouter actions/attest-build-provenance aux jobs de publication (SLSA Build Level 2)
pull_request_target triggers — never checkout untrusted code with write permissions in this context
Auditer tous les triggers pull_request_target — ne jamais checkout du code non-fiable avec des permissions en écriture dans ce contexte
secrets: inherit from external orgs
Examiner les appels de workflows réutilisables : pinner au SHA, éviter secrets: inherit depuis des orgs externes
Frequently Asked Questions
Questions fréquentes
Is SHA pinning required if I only use GitHub’s official actions (actions/*)?
Le pinning SHA est-il nécessaire si je n’utilise que les actions officielles de GitHub (actions/*) ?
For actions/* (checkout, setup-node, upload-artifact, etc.), the risk of
tag mutation is lower because GitHub controls the repository and has strong internal controls.
However, pinning is still recommended as a universal policy: the trivy-action
and tj-actions maintainers also did not expect to be compromised.
A blanket SHA-pinning policy eliminates the need to make case-by-case trust decisions
about individual action publishers.
Pour les actions/* (checkout, setup-node, upload-artifact, etc.), le risque de
mutation de tag est plus faible parce que GitHub contrôle le dépôt et dispose
de contrôles internes solides. Cependant, le pinning est toujours recommandé comme
politique universelle : les mainteneurs de trivy-action et tj-actions
ne s’attendaient pas non plus à être compromis. Une politique de pinning SHA
universelle élimine le besoin de prendre des décisions de confiance au cas par cas
pour les éditeurs d’actions individuelles.
What is the difference between pull_request and pull_request_target in terms of security?
Quelle est la différence entre pull_request et pull_request_target en termes de sécurité ?
pull_request workflows run in the context of the fork (or the PR branch),
with no access to base repository secrets. This is safe for untrusted contributions.
pull_request_target runs in the context of the base repository
and has access to its secrets — designed for workflows that need to post comments
or labels back to the PR. The risk is severe when these two are combined: a workflow
using pull_request_target that also checks out the PR’s code gives
that untrusted code execution access to your base repository secrets. Never combine
pull_request_target with a checkout of the PR’s ref
if the job holds any write permissions or secrets.
Les workflows pull_request s’exécutent dans le contexte du fork
(ou de la branche PR), sans accès aux secrets du dépôt de base. C’est
sûr pour les contributions non-fiables. pull_request_target s’exécute
dans le contexte du dépôt de base et a accès à ses secrets —
conçu pour les workflows qui ont besoin de poster des commentaires ou des labels
en retour vers la PR. Le risque est sévère quand ces deux sont combinés :
un workflow utilisant pull_request_target qui checkout aussi le code de
la PR donne à ce code non-fiable un accès d’exécution à vos secrets
du dépôt de base. Ne combinez jamais pull_request_target avec un
checkout de la référence de la PR si le job possède des permissions
en écriture ou des secrets.
When will GitHub’s scoped secrets and dependency locking be available?
Quand les secrets portés et le verrouillage de dépendances de GitHub seront-ils disponibles ?
GitHub’s 2026 roadmap indicates public preview within 3–6 months and general availability at 6–9 months from the roadmap announcement. The roadmap was published in early 2026, so general availability of most features is expected in Q3–Q4 2026. OIDC custom property claims — the first piece of the scoped secrets roadmap — already reached general availability on April 2, 2026.
La roadmap 2026 de GitHub indique une prévisualisation publique dans 3–6 mois et une disponibilité générale à 6–9 mois après l’annonce de la roadmap. La roadmap a été publiée début 2026, donc la disponibilité générale de la plupart des fonctionnalités est attendue en Q3–Q4 2026. Les claims de propriétés personnalisées OIDC — la première pièce de la roadmap des secrets portés — ont déjà atteint la disponibilité générale le 2 avril 2026.
Do these hardening steps protect against the Megalodon-style workflow injection attack?
Ces étapes de durcissement protègent-elles contre l’attaque d’injection de workflow de type Megalodon ?
Megalodon injected malicious .github/workflows/*.yml files into repositories
via automated commits. If a workflow created this way has access to secrets, those secrets
are at risk. The primary defenses are: (1) branch protection rules on main
requiring PR reviews before merging, so automated commits cannot land in the base branch
without human approval; (2) environments with required reviewers, preventing production
secrets from being accessible to workflows that run on unprotected branches; and (3)
repository rulesets that restrict who can push workflow files.
Megalodon a injecté des fichiers .github/workflows/*.yml malveillants dans
des dépôts via des commits automatisés. Si un workflow créé de cette
façon a accès aux secrets, ces secrets sont en danger. Les défenses primaires
sont : (1) des règles de protection de branche sur main nécessitant
des revues de PR avant fusion, de sorte que les commits automatisés ne peuvent pas
atterrir dans la branche de base sans approbation humaine ; (2) des environnements avec
des reviewers requis, empêchant les secrets de production d’être accessibles
aux workflows s’exécutant sur des branches non protégées ;
(3) des rulesets de dépôt qui limitent qui peut pousser des fichiers workflow.
Should I use GITHUB_TOKEN or a Personal Access Token (PAT) for cross-repo operations?
Dois-je utiliser GITHUB_TOKEN ou un Personal Access Token (PAT) pour les opérations inter-dépôts ?
Prefer GITHUB_TOKEN wherever possible. It is automatically rotated per job,
scoped to a single repository, and expires when the job ends. PATs are long-lived, broad
in scope, and tied to individual accounts — if leaked, they remain valid until
manually revoked. For cross-repo operations, GitHub Apps tokens are preferable to PATs:
they support fine-grained repository permissions, have configurable expiry, and are not
tied to a specific user account.
Préférez GITHUB_TOKEN chaque fois que possible. Il est automatiquement
rotationné par job, porté à un seul dépôt, et expire quand le job se
termine. Les PAT sont long-lived, à large portée, et liés à des comptes
individuels — s’ils fuient, ils restent valides jusqu’à révocation
manuelle. Pour les opérations inter-dépôts, les tokens GitHub Apps sont préférables
aux PAT : ils supportent des permissions de dépôt finement granulées,
ont une expiration configurable, et ne sont pas liés à un compte utilisateur spécifique.
How does OptiBot help with GitHub Actions security?
Comment OptiBot aide-t-il avec la sécurité GitHub Actions ?
OptiBot scans your package-lock.json, yarn.lock,
requirements.txt, Gemfile.lock, go.sum,
composer.lock, and other lockfiles daily against the OSV.dev database.
When a CVE is published that affects one of your dependencies — including the npm
packages and Python libraries that your GitHub Actions runners install during CI —
OptiBot alerts you with severity, patch availability, and affected projects.
This covers the application dependency layer that GitHub’s Actions security features
do not address: the packages your workflows npm install or pip install
during each run.
OptiBot scanne vos package-lock.json, yarn.lock,
requirements.txt, Gemfile.lock, go.sum,
composer.lock et autres lockfiles quotidiennement contre la base de données
OSV.dev. Quand une CVE est publiée qui affecte l’une de vos dépendances —
y compris les packages npm et bibliothèques Python que vos runners GitHub Actions
installent pendant le CI — OptiBot vous alerte avec la sévérité,
la disponibilité du patch et les projets affectés. Cela couvre la couche de
dépendances d’application que les fonctionnalités de sécurité
GitHub Actions ne traitent pas : les packages que vos workflows installent via
npm install ou pip install à chaque exécution.
Monitor the Dependencies Your CI/CD Installs
Surveillez les Dépendances que Votre CI/CD Installe
GitHub Actions hardening secures your pipeline. CVE OptiBot secures what the pipeline installs. Scan your lockfiles daily against the full OSV.dev database — get alerted the moment a CVE lands in your npm, Python, PHP, Go, Rust, Ruby, Java, or .NET dependencies, across every project your team manages.
Le durcissement GitHub Actions sécurise votre pipeline. CVE OptiBot sécurise ce que le pipeline installe. Scannez vos lockfiles quotidiennement contre la base de données OSV.dev complète — soyez alerté dès qu’une CVE touche vos dépendances npm, Python, PHP, Go, Rust, Ruby, Java ou .NET, dans tous les projets gérés par votre équipe.
Start free dependency monitoring Démarrer le monitoring gratuitRelated articles:
Articles liés :
- GitHub Actions OIDC Token Security in 2026: Token Theft & pull_request_target Attacks → Sécurité Tokens OIDC GitHub Actions 2026 : Vol de Tokens & Attaques pull_request_target →
- GitHub Actions Supply Chain Security in 2026: trivy-action, tj-actions & CI/CD Hardening → Sécurité Supply Chain GitHub Actions 2026 : trivy-action, tj-actions & Durcissement CI/CD →
- GitHub Dependabot Security Alerts in 2026: EPSS Triage Guide → Alertes Sécurité GitHub Dependabot en 2026 : Guide de Triage EPSS →
- SBOM for Containers & Helm Charts in 2026: Syft, Grype & EU CRA Guide → SBOM pour Containers & Helm Charts en 2026 : Guide Syft, Grype & EU CRA →
- CVE Monitoring for developers → Monitoring CVE pour développeurs →