MARKETIA

Gitleaks 8.30.1 testé pour de vrai : protocole, mesures et limites (2026-10-18)

Test exécuté le 18 octobre 2026 (page rédigée le 18 octobre 2026).

Test d'usage réel mais limité : une machine, un jeu de test synthétique, aucune note ni classement. Les résultats ne se généralisent pas à d'autres données. Notre méthode.

Demander l'installation de Gitleaks sur devisRéponse sous 5 jours ouvrés, sans engagement. Aucun paiement à cette étape.

En résumé

Le 2026-10-18, nous avons téléchargé Gitleaks 8.30.1, vérifié son empreinte, puis exécuté l'outil sur un dépôt git jetable que nous avons construit avec des secrets inventés. Ce test porte sur une seule machine, une seule version et un jeu de 7 commits : il décrit ce que nous avons observé, il ne mesure pas un taux de détection et ne se généralise pas à vos dépôts. Il complète l'avis MagicMate sur Gitleaks, qui reste une lecture des sources publiques.

Ce que nous avons observé, dans l'ordre :

  • Sur le premier jeu de 5 commits, gitleaks git a signalé 2 secrets et gitleaks dir 1 secret. Deux secrets plantés n'ont pas été signalés : la clé AWS d'exemple (cause établie, voir plus bas) et un faux fichier .env (cause non établie).
  • Sur 2 commits ajoutés ensuite, contenant des secrets synthétiques de forme plus réaliste générés au hasard, 3 détections supplémentaires ont été obtenues avec gitleaks git.
  • Le code de sortie, la baseline et le fichier .gitleaksignore ont fonctionné comme décrit dans la section des résultats.

Protocole et commandes

Machine : PowerShell, Windows 11. Aucun accès réseau de notre part pendant les scans. Chaque commande reçoit ses chemins en argument. Dans les commandes, $g désigne gitleaks.exe, $r le dépôt de test et $o le dossier de sortie.

  1. Vérification du zip officiel (version 8.30.1, publiée le 2026-03-21) : (Get-FileHash <zip> -Algorithm SHA256).Hash. Résultat : d29144deff3a68aa93ced33dddf84b7fdc26070add4aa0f4513094c8332afc4e, identique à celui du fichier de sommes de contrôle officiel.
  2. Extraction dans un dossier neuf : Expand-Archive <zip> -DestinationPath <bin>. Le dossier contient gitleaks.exe (22,6 Mo), LICENSE et README.md. gitleaks.exe version affiche 8.30.1.
  3. Commandes de scan (l'option --redact évite d'afficher un secret) :
    • Historique git : gitleaks.exe git $r --no-banner --no-color --redact -f json -r $o\git.json
    • Arbre de travail : gitleaks.exe dir $r --no-banner --no-color --redact -f json -r $o\dir.json
    • Sortie détaillée : ajouter -v. Format SARIF : -f sarif.
    • Baseline : -b <baseline.json>, où la baseline est le JSON d'un premier scan.
    • Fichier d'exclusion : -i <dossier contenant .gitleaksignore>.
    • Code de sortie choisi : --exit-code 7. Une seule règle : --enable-rule aws-access-token.
  4. Temps mesuré avec un Stopwatch autour de l'appel.

Jeu de test : un dépôt git jetable, avec des secrets inventés.

CommitContenu planté
c1La clé AWS d'exemple documentée AKIAIOSFODNN7EXAMPLE, dans aws.cfg
c2Un faux jeton de forme ghp_ dans ci.env.sample, et une empreinte SHA-256 bénigne dans notes.txt
c3Une fausse clé privée RSA tronquée dans key.pem, et un faux fichier .env
c4Un mot de passe factice trivial dans README.md (faux positif attendu)
c5Suppression de key.pem
c6 (ajouté plus tard)prod.env : un mot de passe de base de données de 32 caractères alphanumériques aléatoires
c7 (ajouté plus tard)aws2.cfg : une clé de forme AKIA suivie de 16 caractères valides tirés au hasard (ne finissant pas par EXAMPLE), et un secret de 40 caractères aléatoires

Les secrets de c6 et c7 ont été générés au hasard et jamais affichés. Les autres valeurs factices ne sont pas reproduites ici. Le faux fichier .env n'a été ni lu ni affiché par nous.

Résultats mesurés

Premier jeu (commits c1 à c5) :

Mesuregit (historique)dir (arbre de travail)
Durée, 5 exécutions650 à 920 ms580 à 660 ms (scan interne : 15 ms)
Volume scanné« 4 commits scanned », environ 429 octetsenviron 308 octets
Détections21
Code de sortie11

Détections de gitleaks git :

  • règle private-key, fichier key.pem, commit c3 (be7622e), ligne 1, entropie 3,78 ;
  • règle github-pat, fichier ci.env.sample, commit c2 (f2a7d49), ligne 1, entropie 5,07.

Détection de gitleaks dir : github-pat dans ci.env.sample uniquement, avec un chemin absolu dans le rapport et sans commit.

Secrets plantés non signalés (faux négatifs) :

  • la clé AWS d'exemple de c1 : non détectée, même avec --enable-rule aws-access-token seule (0 détection) ;
  • le faux .env de c3 : non détecté, ni en git ni en dir.

Faux positifs : 0. Le mot de passe factice trivial de c4 et l'empreinte SHA-256 bénigne de c2 n'ont pas été signalés.

Secret supprimé (c5) : le mode git signale la clé dans son commit d'ajout (c3). Le mode dir ne voit plus key.pem, puisque le fichier est supprimé : seul le mode git couvre ce cas.

Lisibilité : avec -v, chaque détection affiche la règle, l'entropie, le fichier, la ligne, le commit, l'auteur, la date et l'empreinte (fingerprint). Avec --redact, les champs Secret et Finding valent « REDACTED ». Les messages de journal passent sur la sortie d'erreur : sous PowerShell 5.1, une redirection les affiche comme des erreurs, ce qui vient de notre façon d'appeler l'outil et non de Gitleaks.

Baseline, exclusion, formats, code de sortie :

  • Baseline créée depuis un premier scan (2 entrées) : le second scan avec cette baseline donne 0 détection et le code de sortie 0.
  • .gitleaksignore par empreinte (format commit:fichier:règle:ligne) : avec 1 empreinte, il reste 1 détection (code 1) ; avec 2 empreintes, 0 détection (code 0).
  • Le JSON contient les champs RuleID, Description, StartLine, EndLine, StartColumn, EndColumn, Match, Secret, File, SymlinkFile, Commit, Entropy, Author, Email, Date, Message, Tags et Fingerprint.
  • Le SARIF pèse environ 50 Ko et contient 2 résultats, cohérents avec le JSON.
  • Le code de sortie vaut 1 par défaut en cas de fuite et 0 sinon ; --exit-code 7 donne 7 ; --exit-code 0 ne bloque pas.

Trois points expliqués, un point non établi

  1. Commits scannés : le journal indique « 4 commits scanned » pour 5 commits existants (git rev-list --count --all = 5). Le niveau debug de Gitleaks 8.30.1 ajoute : « Note: this number might be smaller than expected due to commits with no additions ». Le commit c5 (suppression pure de key.pem, aucune ligne ajoutée, une ligne supprimée) correspond à cette description. Le journal ne nomme pas le commit : l'identification de c5 vient de cette note et du contenu du commit, pas d'un identifiant affiché. Après l'ajout de c6 et c7 (7 commits au total), le journal indique 6 commits scannés, ce qui est cohérent.
  2. Clé AWS d'exemple : la configuration par défaut embarquée dans gitleaks.exe (lue dans le binaire) contient, pour la règle aws-access-token, une liste d'autorisation avec l'expression régulière .+EXAMPLE$. AKIAIOSFODNN7EXAMPLE se termine par EXAMPLE : l'outil l'écarte volontairement.
  3. Secrets de forme réaliste : lors du contre-test sur c6 et c7, gitleaks git a produit 5 détections au total (les 2 précédentes et 3 nouvelles) : generic-api-key sur prod.env (entropie 4,54, commit c6), generic-api-key sur aws2.cfg (entropie 4,73, c7) et aws-access-token sur aws2.cfg (entropie 3,72, c7), avec 6 commits scannés sur 7. gitleaks dir a donné 4 détections : generic-api-key sur prod.env, github-pat, puis generic-api-key et aws-access-token sur aws2.cfg.

Point non établi : pour le faux .env d'origine (c3), la cause n'est pas établie. Nous ne l'avons pas lu, comme prévu par le protocole, et aucune règle n'a été déclenchée dessus. Nous ne savons pas si la raison tient au format du faux secret ou à la règle.

Limites du test

  • Une seule machine (Windows 11), une seule version (8.30.1), configuration par défaut.
  • Un jeu de 7 commits, synthétique et de quelques centaines d'octets : les temps d'exécution ne disent rien sur un dépôt réel ou volumineux, et ne sont pas représentatifs.
  • Les détections portent sur quelques cas : elles ne sont pas généralisables et ne constituent pas un taux de détection.
  • Les secrets sont inventés et générés par nous : nous ne savons pas si de vrais secrets du même format seraient détectés.
  • La cause de l'absence de détection du faux .env n'est pas établie.

Ce que nous n'avons pas testé

  • Des dépôts réels ou volumineux, la performance et la mémoire à grande échelle.
  • Une intégration CI réelle, un hook pre-commit, l'action GitHub.
  • Une configuration personnalisée (.gitleaks.toml, règles et listes d'autorisation propres), la commande stdin, les archives (--max-archive-depth), le décodage (--max-decode-depth).
  • D'autres systèmes d'exploitation et d'autres versions, y compris toute version postérieure à 8.30.1.
  • Une comparaison avec d'autres outils (TruffleHog, detect-secrets, Betterleaks, etc.).
  • La vérification de validité des secrets détectés : Gitleaks ne la fait pas dans ce test.

Sources

Aller plus loin

Recevoir la newsletter Marketia