Trouvez des identifiants et des secrets grâce à plus de 170 règles couvrant le code source, les URL Web et les CI/CD, vérifiez-les auprès des API des fournisseurs et générez des rapports SARIF, JSONL, HTML, PDF ou Excel.
Scanner de secrets DAST + SAST avec vérification en direct, analyse des source maps et reporting natif pour la CI, plus un moteur SAST de vulnérabilités et de mauvaises configurations.
Détectez les identifiants divulgués dans les arborescences de code source, les applications web en cours d'exécution et les journaux de CI. Vérifiez-les en direct auprès des API des fournisseurs. Analysez les mêmes arborescences de code source à la recherche de vulnérabilités et de mauvaises configurations. Produisez du SARIF pour les tableaux de bord de code-scanning, du JSONL pour les pipelines SOAR, ou de l'Excel/PDF/HTML pour les rapports clients.
Le paysage encombré (gitleaks, trufflehog, detect-secrets) excelle en SAST sur les arborescences git mais s'arrête là — et ils ne recherchent que des secrets. scan4secrets comble les lacunes qu'ils ne couvrent pas, en ajoutant du DAST web en direct, la vérification en direct auprès des fournisseurs, et un moteur de vulnérabilités de code / mauvaises configurations par-dessus la détection de secrets :
| Capacité | gitleaks | trufflehog | detect-secrets | scan4secrets |
|---|---|---|---|---|
| Détection de secrets SAST | Y | Y | Y | Y |
| Crawl web DAST en direct | - | - | - | Y |
| Analyse des source maps JS | - | - | - | Y |
| Extraction des endpoints JS | - | - | - | Y |
| Scan de secrets dans les en-têtes HTTP | - | - | - | Y |
| Vérification de jetons en direct | - | Y | - | Y |
| Sortie SARIF | Y | - | - | Y |
| Rapports Excel / PDF / HTML | - | - | - | Y |
| Filtre d'entropie + liste d'autorisation | Y | Y | Y | Y |
| Schéma de règles YAML | - (TOML) | - | - | Y |
| DAST authentifié (cookie/header/proxy) | n/a | n/a | n/a | Y |
| Détection de vulnérabilités / mauvaises configurations SAST | - | - | - | Y |
C'est un complément à gitleaks, pas un remplacement. Utilisez les deux : gitleaks en pre-commit + CI pour le SAST sur l'historique git, scan4secrets pour le DAST en direct contre le staging/la production.
# from source
git clone https://github.com/m14r41/scan4secrets
cd scan4secrets
pip install -e .
# OR via pipx
pipx install git+https://github.com/m14r41/scan4secrets
# OR Docker
docker run --rm -v $(pwd):/scan ghcr.io/m14r41/scan4secrets:latest --path /scan
Après l'installation, la commande scan4secrets est disponible dans votre PATH.
# SAST: scan a local directory
scan4secrets --path /code
# DAST: crawl a live target
scan4secrets --url https://staging.example.com --threads 32
# DAST runs ALL bundled wordlists by default (1279 paths: /.env, /wp-config.php, /backup.zip, ...)
scan4secrets --url https://target.com
# Use YOUR OWN wordlist file (replaces the bundled set)
scan4secrets --url https://target.com --wordlist /path/to/my-paths.txt
# Combine multiple custom wordlist files
scan4secrets --url https://target.com --wordlist seclists/Common.txt internal-paths.txt
# Restrict to specific bundled wordlists by stem
scan4secrets --url https://wp.example.com --wordlist-only wordpress common env
# Turn wordlist seeding off entirely (only follow live links)
scan4secrets --url https://target.com --no-wordlist
# Full audit with verification + HTML report
scan4secrets --path . --url https://app.example.com \
--verify --report html sarif json \
--output reports/audit-$(date +%F)
# Authenticated DAST with proxy (works with Burp / ZAP)
scan4secrets --url https://app.example.com \
--cookie "session=abc123" \
--header "X-Tenant: acme" \
--proxy http://127.0.0.1:8080
# CI gate (exit 1 if anything >= high)
scan4secrets --path . --report sarif --fail-on high \
--output reports/scan
# SAST: secrets + code vulnerabilities / misconfigurations
scan4secrets --path ./src --misconfig
# SAST: vulnerabilities / misconfigurations only (skip secret detection)
scan4secrets --path ./src --misconfig-only
--misconfig)Au-delà des secrets, scan4secrets embarque un moteur SAST pour les vulnérabilités de code et les mauvaises configurations. Ajoutez --misconfig pour rechercher à la fois les secrets et les vulnérabilités, ou --misconfig-only pour rechercher uniquement les vulnérabilités :
scan4secrets --path ./src --misconfig # secrets + vulnerabilities
scan4secrets --path ./src --misconfig-only # vulnerabilities only
scan4secrets --path . --misconfig --report html --output report
Il détecte — avec un filtrage par teinte/contexte pour maintenir un faible taux de faux positifs — l'injection SQL, l'injection NoSQL, l'injection de commandes OS, l'injection de code (eval), le SSTI, le XXE, la désérialisation non sécurisée, le LFI / path traversal, l'injection LDAP & XPath, le SSRF, la redirection ouverte, la mauvaise configuration CORS, le CSRF désactivé, la pollution de prototype, le XSS (réfléchi/stocké/DOM sur 11 moteurs de templating : EJS, Handlebars, Pug, Jinja, Thymeleaf, Razor, Blade, ERB, Vue, Angular, React), la cryptographie faible (DES/RC4/ECB/IV statique/RSA faible), l'aléatoire non sécurisé, les failles JWT (alg:none, confusion d'algorithme, secret de signature codé en dur, vérification désactivée), les contournements TLS, les comparaisons de secrets non constantes en temps, la signature SAML non requise, les identifiants codés en dur, la journalisation de données sensibles, et les mauvaises configurations IaC/config (Terraform, Kubernetes, Dockerfile, GitHub Actions, ASP.NET web.config, WCF/SOAP).
Langages couverts : python, node, javascript, typescript, react, php, ruby, go, java, kotlin, csharp/.NET, sql, plus XML/WSDL, JSP, Terraform/HCL, Kubernetes YAML, et Dockerfile.
Chaque constat de vulnérabilité comporte un enregistrement riche : Nom de la vulnérabilité, Sévérité, Description, Preuve (fichier:ligne), Code vulnérable, Code sécurisé, Remédiation, Impact technique, Impact métier, et mapping CWE + OWASP Top-10.
Au-delà du moteur ligne par ligne, une passe sur le fichier entier capture les secrets que les scanners ligne par ligne manquent : balises XML imbriquées (<SMS_API_KEY><value>…</value></SMS_API_KEY>), paires <key>/<value> séparées, objets clé/valeur JSON, YAML/properties multi-lignes, et secrets encodés en Base64. Il comble également un angle mort du filtre d'entropie — les affectations à nom d'identifiant (par ex. AM_CLIENT_SECRET=…) sont signalées sur le signal du nom sans seuil d'entropie, de sorte que les vrais secrets à faible entropie ne sont plus silencieusement ignorés.
416 règles au total — 193 règles de secrets + 223 règles de vulnérabilités / mauvaises configurations.
Les règles de secrets couvrent :