Aller au contenu
Sécurité medium

Détecter les secrets exposés dans votre code

12 min de lecture

Un secret commité dans Git y reste, même après suppression du fichier. Une image Docker publiée avec un token embarqué est exploitable en quelques minutes. La détection automatisée est le seul moyen fiable d’intercepter ces fuites avant qu’elles ne deviennent des incidents. Ce guide compare les principaux outils de détection — Gitleaks, TruffleHog, Trivy et detect-secrets — et propose une stratégie combinée couvrant le poste développeur, la CI/CD, les images conteneur et le filesystem.

Plus un secret exposé reste longtemps sans être détecté, plus le risque d’exploitation augmente. Les études montrent qu’un secret commité dans un dépôt public est scanné par des bots en moins de 5 minutes.

Moment de détectionCoût de remédiationRisque résiduel
Avant le commit (pre-commit)Très faibleNul
À la pull request (CI)FaibleLimité (branche)
Après merge (scan périodique)MoyenÉlevé (historique)
Après publication (image, release)ÉlevéCritique

L’objectif est de déplacer la détection le plus à gauche possible dans le cycle de développement : pre-commit > CI > scan périodique.

Quatre outils couvrent la majorité des besoins. Chacun a un positionnement distinct.

CritèreGitleaksTruffleHogTrivydetect-secrets
TypeMotifs regex + entropieMotifs + vérification activeScanner multi-ciblesMotifs + baseline
Git (historique)OuiOuiNonOui
FilesystemOuiOuiOuiOui
Images DockerNonNonOuiNon
Vérification activeNonOui (appels API)NonNon
Faux positifsModérésFaibles (grâce à la vérification)ModérésGérables (baseline)
VitesseRapideMoyenneRapideRapide
Pre-commit natifOuiNonNonOui
LicenceMITAGPL-3.0Apache 2.0Apache 2.0

Pour le détail d’installation et de configuration avancée de chaque outil :

Le hook pre-commit bloque le commit si un secret est détecté dans les fichiers stagés. C’est la première ligne de défense.

  1. Installer Gitleaks

    Fenêtre de terminal
    # Linux (binaire)
    curl -sSfL https://github.com/gitleaks/gitleaks/releases/latest/download/gitleaks_8.24.0_linux_x64.tar.gz | tar xz
    sudo mv gitleaks /usr/local/bin/
    # macOS
    brew install gitleaks

    Vérifiez l’installation :

    Fenêtre de terminal
    gitleaks version
  2. Configurer le hook pre-commit

    Avec le framework pre-commit, ajoutez dans .pre-commit-config.yaml :

    repos:
    - repo: https://github.com/gitleaks/gitleaks
    rev: v8.24.0
    hooks:
    - id: gitleaks

    Puis installez le hook :

    Fenêtre de terminal
    pre-commit install
  3. Tester le hook

    Créez un fichier de test contenant un faux secret :

    Fenêtre de terminal
    echo 'AWS_SECRET_ACCESS_KEY="AKIAIOSFODNN7EXAMPLE"' > test-secret.txt
    git add test-secret.txt
    git commit -m "test"

    Le commit doit être bloqué avec un message indiquant le secret détecté.

    Fenêtre de terminal
    # Nettoyez après le test
    git reset HEAD test-secret.txt
    rm test-secret.txt

L’approche de detect-secrets repose sur une baseline : un fichier .secrets.baseline qui recense les secrets connus (pour les ignorer ou les suivre).

Fenêtre de terminal
# Créer la baseline initiale
detect-secrets scan > .secrets.baseline
# Installer le hook pre-commit
cat >> .pre-commit-config.yaml << 'EOF'
- repo: https://github.com/Yelp/detect-secrets
rev: v1.5.0
hooks:
- id: detect-secrets
args: ['--baseline', '.secrets.baseline']
EOF
pre-commit install

Le scan en CI intercepte les secrets qui ont échappé au pre-commit. Il s’exécute à chaque pull request ou push.

name: Secret Scan
on:
pull_request:
push:
branches: [main]
permissions: {}
jobs:
gitleaks:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
persist-credentials: false
- uses: gitleaks/gitleaks-action@ff98106e4c7b2bc287b24eaf42907196e88a9c30 # v2.3.9
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

TruffleHog peut vérifier si un secret détecté est encore valide en testant les API correspondantes. C’est un complément idéal à Gitleaks en CI.

# Ajoutez ce job à votre pipeline GitHub Actions
trufflehog:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
persist-credentials: false
- name: TruffleHog scan
run: |
docker run --rm -v "$PWD:/repo" \
trufflesecurity/trufflehog:latest \
git file:///repo --only-verified --fail

Certains secrets n’arrivent jamais dans Git : fichiers .env exclus par .gitignore, configurations locales, exports.

Fenêtre de terminal
# Avec Gitleaks
gitleaks detect --source /chemin/du/projet --no-git --verbose
# Avec TruffleHog
trufflehog filesystem /chemin/du/projet --only-verified
# Avec Trivy
trivy fs --scanners secret /chemin/du/projet

Les images Docker peuvent contenir des secrets embarqués dans les layers. Trivy est le seul des quatre outils capable de scanner directement une image.

Fenêtre de terminal
trivy image --scanners secret mon-image:latest

Trivy inspecte chaque layer de l’image et remonte les secrets trouvés avec leur emplacement exact.

Fenêtre de terminal
# Exemple de sortie
mon-image:latest (secrets)
============================
Total: 1 (HIGH: 1)
┌──────────┬──────────────────┬──────────┬───────────────────────────┐
Category Description│ Severity Match
├──────────┼──────────────────┼──────────┼───────────────────────────┤
AWS AWS Access Key ID│ HIGH AKIA****************
└──────────┴──────────────────┴──────────┴───────────────────────────┘

Pour éviter d’embarquer des secrets dans les images, consultez le guide Fuites de secrets : logs, Docker, variables.

La vérification active consiste à tester si un secret détecté est encore valide. Seul TruffleHog propose cette fonctionnalité nativement.

FournisseurMéthode de vérification
AWSAppel sts:GetCallerIdentity
GitHubAppel API avec le token
SlackAppel auth.test
Google CloudAppel OAuth tokeninfo
StripeAppel API charges

La vérification active réduit les faux positifs : un secret invalide n’est plus une urgence, c’est un point d’hygiène.

Fenêtre de terminal
# Scanner uniquement les secrets vérifiés comme actifs
trufflehog git file:///chemin/du/repo --only-verified
# Scanner et inclure aussi les non-vérifiés
trufflehog git file:///chemin/du/repo --results=verified,unknown

Pour approfondir la vérification active : Guide TruffleHog.

Un taux de faux positifs trop élevé conduit les développeurs à ignorer les alertes. Trois approches pour le maîtriser.

Avec Gitleaks, créez un fichier .gitleaks.toml à la racine du dépôt :

[allowlist]
description = "Faux positifs connus"
paths = [
'''tests/fixtures/.*''',
'''docs/examples/.*''',
]
regexes = [
'''EXAMPLE_.*''',
'''AKIAIOSFODNN7EXAMPLE''',
]
Fenêtre de terminal
# Auditer la baseline : marquer chaque secret comme vrai ou faux positif
detect-secrets audit .secrets.baseline

L’audit interactif parcourt chaque entrée et demande une confirmation. Les faux positifs marqués ne déclenchent plus d’alerte.

ActionQuand
Exclure via allowlistPattern récurrent et vérifié (clés de test, mocks)
Baseline + auditProjet avec beaucoup d’historique
Corriger le codeSecret réel, même si inactif

Aucun outil ne couvre toutes les surfaces. La stratégie suivante combine trois outils pour une couverture complète.

SurfaceOutilMoment
Poste développeurGitleaks (pre-commit)Avant chaque commit
Pull requestGitleaks + TruffleHog (CI)À chaque PR
Historique completTruffleHog (--only-verified)Scan hebdomadaire
Images DockerTrivy (--scanners secret)À chaque build
FilesystemTrivy ou Gitleaks (--no-git)Audit ponctuel
Stratégie combinée de détection des secrets : pre-commit avec Gitleaks, CI/CD avec Gitleaks + TruffleHog + Trivy, scan périodique avec TruffleHog
  1. Installer Gitleaks en pre-commit sur tous les dépôts

    C’est la mesure la plus simple et la plus efficace. Un secret bloqué avant le commit ne nécessite aucune rotation.

  2. Ajouter Gitleaks en CI sur chaque pull request

    Un développeur peut ne pas avoir le hook activé. La CI est le filet de sécurité.

  3. Ajouter TruffleHog en CI pour la vérification active

    Complète Gitleaks en identifiant les secrets encore valides.

  4. Scanner les images Docker avec Trivy avant publication

    Ajoutez trivy image --scanners secret dans le pipeline de build, avant le docker push.

  5. Planifier un scan hebdomadaire de l’historique complet

    Fenêtre de terminal
    trufflehog git file:///chemin/du/repo --only-verified --json > rapport-secrets.json

    Exploitez le rapport pour prioriser les rotations.

  • La détection pre-commit est la mesure la plus efficace : elle empêche le secret d’entrer dans l’historique Git.
  • Gitleaks excelle en pre-commit et en CI grâce à sa vitesse et ses règles personnalisables.
  • TruffleHog se distingue par sa vérification active : il teste si le secret est encore valide.
  • Trivy est le seul outil capable de scanner les secrets dans les images Docker.
  • detect-secrets convient aux projets avec un historique chargé grâce à son système de baseline.
  • Aucun outil ne couvre toutes les surfaces seul : combinez pre-commit, CI et scan d’images.
  • Un faux positif ignoré est moins dangereux qu’un vrai positif masqué : préférez la sensibilité à la spécificité.
  • Un secret détecté, même inactif, doit être retiré du code source et faire l’objet d’une rotation.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn