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.
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 gita signalé 2 secrets etgitleaks dir1 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
.gitleaksignoreont 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.
- 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. - Extraction dans un dossier neuf :
Expand-Archive <zip> -DestinationPath <bin>. Le dossier contientgitleaks.exe(22,6 Mo),LICENSEetREADME.md.gitleaks.exe versionaffiche 8.30.1. - 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.
- Historique git :
- Temps mesuré avec un
Stopwatchautour de l'appel.
Jeu de test : un dépôt git jetable, avec des secrets inventés.
| Commit | Contenu planté |
|---|---|
| c1 | La clé AWS d'exemple documentée AKIAIOSFODNN7EXAMPLE, dans aws.cfg |
| c2 | Un faux jeton de forme ghp_ dans ci.env.sample, et une empreinte SHA-256 bénigne dans notes.txt |
| c3 | Une fausse clé privée RSA tronquée dans key.pem, et un faux fichier .env |
| c4 | Un mot de passe factice trivial dans README.md (faux positif attendu) |
| c5 | Suppression 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) :
| Mesure | git (historique) | dir (arbre de travail) |
|---|---|---|
| Durée, 5 exécutions | 650 à 920 ms | 580 à 660 ms (scan interne : 15 ms) |
| Volume scanné | « 4 commits scanned », environ 429 octets | environ 308 octets |
| Détections | 2 | 1 |
| Code de sortie | 1 | 1 |
Détections de gitleaks git :
- règle
private-key, fichierkey.pem, commit c3 (be7622e), ligne 1, entropie 3,78 ; - règle
github-pat, fichierci.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-tokenseule (0 détection) ; - le faux
.envde c3 : non détecté, ni engitni endir.
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.
.gitleaksignorepar empreinte (formatcommit: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 7donne 7 ;--exit-code 0ne bloque pas.
Trois points expliqués, un point non établi
- 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 dekey.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. - Clé AWS d'exemple : la configuration par défaut embarquée dans
gitleaks.exe(lue dans le binaire) contient, pour la règleaws-access-token, une liste d'autorisation avec l'expression régulière.+EXAMPLE$.AKIAIOSFODNN7EXAMPLEse termine parEXAMPLE: l'outil l'écarte volontairement. - Secrets de forme réaliste : lors du contre-test sur c6 et c7,
gitleaks gita produit 5 détections au total (les 2 précédentes et 3 nouvelles) :generic-api-keysurprod.env(entropie 4,54, commit c6),generic-api-keysuraws2.cfg(entropie 4,73, c7) etaws-access-tokensuraws2.cfg(entropie 3,72, c7), avec 6 commits scannés sur 7.gitleaks dira donné 4 détections :generic-api-keysurprod.env,github-pat, puisgeneric-api-keyetaws-access-tokensuraws2.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
.envn'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 commandestdin, 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
- Notre test du 2026-10-18, décrit ci-dessus (version 8.30.1, empreinte SHA-256 vérifiée).
- https://github.com/gitleaks/gitleaks (page de la version 8.30.1)
- Avis MagicMate sur Gitleaks pour la lecture des sources publiques.
Aller plus loin
- Avis MagicMate sur l'outil
- Fiche produit Gitleaks dans le catalogue MARKETIA
- Comparatif : Détecter les secrets dans le code : Gitleaks, Betterleaks, Trivy et Presidio, ce que disent les sources
- Demander une installation sur devis (installation de Gitleaks chez vous, réponse sous 5 jours ouvrés, sans engagement)
- Tous les tests réels
- Dépôt du projet : https://github.com/gitleaks/gitleaks