Le GITHUB_TOKEN est généré automatiquement pour chaque workflow. Il permet
d'interagir avec l'API GitHub : cloner le repo, créer des issues, publier
des packages. Mal configuré, il devient un vecteur d'attaque majeur.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Appliquer le moindre privilège au
GITHUB_TOKEN - Déclarer les permissions explicitement dans chaque workflow
- Choisir entre permissions workflow-level et job-level
- Connaître chaque permission disponible et le risque associé
- Vérifier la conformité avec le check Token-Permissions de Scorecard
Principe de moindre privilège
Section intitulée « Principe de moindre privilège »Le principe de moindre privilège consiste à n'accorder que les permissions strictement nécessaires. Si un workflow est compromis, les dégâts restent limités à ce qu'il pouvait faire.
Permissions par défaut
Section intitulée « Permissions par défaut »Les permissions par défaut du GITHUB_TOKEN dépendent de l'âge du dépôt et
de sa configuration. C'est un piège classique : un dépôt ancien accorde encore,
par défaut, des droits d'écriture étendus.
| Type de dépôt | Permissions par défaut |
|---|---|
| Créé après février 2023 | contents: read uniquement |
| Créé avant février 2023 | Lecture ET écriture sur tout |
Déclarer les permissions explicitement
Section intitulée « Déclarer les permissions explicitement »Même avec des paramètres de dépôt restrictifs, déclarez toujours les permissions dans vos workflows : la configuration du dépôt peut changer, le workflow, lui, reste explicite et auditable.
name: Build and Test
permissions: contents: read # Lecture du code uniquement
on: push: branches: [main]
jobs: build: runs-on: ubuntu-24.04 steps: - name: Récupérer le code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Installer et tester run: npm ci && npm testPermissions workflow-level vs job-level
Section intitulée « Permissions workflow-level vs job-level »GitHub Actions permet de déclarer les permissions à deux niveaux. Le choix entre les deux détermine l'étendue des dégâts si un seul job est compromis.
Workflow-level
Section intitulée « Workflow-level »Les permissions déclarées au niveau workflow s'appliquent à tous les jobs, y compris ceux qui n'en ont pas besoin.
# ⚠️ Tous les jobs ont packages:writepermissions: contents: read packages: write
jobs: test: runs-on: ubuntu-24.04 steps: - run: npm test # N'a pas besoin de packages:write
publish: runs-on: ubuntu-24.04 steps: - run: npm publishJob-level (recommandé)
Section intitulée « Job-level (recommandé) »Gardez le niveau workflow au minimum et déclarez les permissions write au
niveau de chaque job qui en a réellement besoin.
permissions: contents: read # Minimal pour le workflow
jobs: test: runs-on: ubuntu-24.04 permissions: contents: read steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - run: npm test
publish: needs: test runs-on: ubuntu-24.04 permissions: contents: read packages: write # Uniquement pour ce job steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - run: npm publishAvantage : si le job test est compromis, l'attaquant ne peut pas publier
de package.
Permissions disponibles
Section intitulée « Permissions disponibles »Voici les permissions que vous accorderez le plus souvent, classées par
risque. La règle reste la même : n'activez write que sur le job qui en a
strictement besoin.
| Permission | Usage | Risque si abusée |
|---|---|---|
contents: read | Cloner le repo | Faible |
contents: write | Pousser, créer des releases | Injection de code |
packages: write | Publier sur GitHub Packages | Distribution de malware |
actions: write | Modifier les workflows | Persistance |
id-token: write | OIDC pour cloud providers | Accès infrastructure |
pull-requests: write | Commenter les PRs | Spam, phishing |
issues: write | Créer/modifier les issues | Spam |
security-events: write | Upload SARIF | Masquer des alertes |
Scorecard Token-Permissions
Section intitulée « Scorecard Token-Permissions »OpenSSF Scorecard vérifie que vos
workflows respectent le moindre privilège. Le check Token-Permissions exige
que les permissions write soient au niveau job.
# Vérifier vos workflowsscorecard --local . --checks Token-Permissions --show-detailsScore 0/10 : permissions write au niveau workflow.
# ❌ Scorecard : 0/10permissions: contents: read packages: write # Au niveau workflowScore 10/10 : permissions write au niveau job uniquement.
# ✅ Scorecard : 10/10permissions: contents: read
jobs: publish: permissions: packages: write # Au niveau jobCas pratique : CI/CD complet
Section intitulée « Cas pratique : CI/CD complet »Ce pipeline complet, test, build, publication, applique le moindre privilège job par job. C'est un modèle directement réutilisable : chaque job ne reçoit que ce dont il a besoin.
name: CI/CD Pipeline
permissions: contents: read
on: push: branches: [main] pull_request:
jobs: test: runs-on: ubuntu-24.04 permissions: contents: read steps: - name: Récupérer le code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Installer et tester run: npm ci && npm test
build: needs: test runs-on: ubuntu-24.04 permissions: contents: read steps: - name: Récupérer le code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Construire le projet run: npm run build - name: Publier l'artefact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: dist path: dist/
publish: if: github.ref == 'refs/heads/main' needs: build runs-on: ubuntu-24.04 permissions: contents: read packages: write id-token: write # Pour OIDC steps: - name: Récupérer le code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Récupérer l'artefact uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: dist path: dist/ - name: Publier le package run: npm publishContrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »- Le
GITHUB_TOKENest créé pour chaque exécution ; un dépôt ancien lui accorde par défaut des droits d'écriture étendus, à corriger. - Déclarez
permissions:explicitement dans chaque workflow, même si les paramètres du dépôt sont déjà restrictifs. - Gardez le workflow-level au minimum (
contents: read) et n'accordezwritequ'au job qui en a réellement besoin. permissions: write-allest à proscrire : un workflow compromis pourrait modifier son propre code et persister.- Le check Token-Permissions de Scorecard exige les permissions
writeau niveau job, c'est le signal de conformité.
Prochaines étapes
Section intitulée « Prochaines étapes »Pour la liste exhaustive des permissions, consultez la documentation officielle sur le GITHUB_TOKEN.