🛡️ Outil de détection WAF & CDN haute performance. Identifiez les couches de protection (Cloudflare, Akamai, AWS, Fastly, et plus encore), exécutez des tests d'efficacité et d'application avec des charges utiles d'évasion, et générez des rapports de posture. Développé en Rust 🦀.
Outil CLI pour détecter, tester et profiler les pare-feu d'applications web (WAF) et les réseaux de diffusion de contenu (CDN).
Important : Ne testez que les systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test.
Pour les agents de codage IA : Voir AGENTS.md pour le mappage des compétences et les pointeurs de workflow. Utilisez agent-skills/waf-assess/WORKFLOW.md pour les évaluations complètes ; utilisez agent-skills/validate-build/WORKFLOW.md avant la fusion.
| Mode | Ce qu'il teste | Option |
|---|
| Détection | Identifie quel WAF/CDN protège une cible | waf-detect <url> |
| Test de fumée | Envoie des charges utiles d'attaque connues, mesure les taux de blocage | --smoke-test <url> |
| Test d'application | Envoie des sondes d'attaque catégorisées, mesure blocage/défi/autorisation | --va <url> |
| Analyse comportementale | Sondes appariées testant la sophistication du WAF sur 5 canaux | --va2 <url> --va2-run |
| Rapport de posture | Note unifiée (A-F) combinant tous les résultats de test | --posture <url> |
| Rapport HTML | Génère les résultats JSON enregistrés dans un rapport statique partageable | report <file.json> |
cargo build --release
./target/release/waf-detect scan example.com
# Full hardening scan + HTML report
./target/release/waf-detect hardening https://example.com --output /tmp/example-hardening.json
./target/release/waf-detect report /tmp/example-hardening.json --output /tmp/example-hardening.html
| Mode | Commande |
|---|---|
| Détection | waf-detect scan <url> ou waf-detect <url> |
| Durcissement | waf-detect hardening <url> --output file.json |
| Test de fumée | waf-detect --smoke-test <url> |
| Application | waf-detect va <url> |
| Comportemental | waf-detect va2 <url> --run |
| Posture | waf-detect --posture <url> |
| Efficacité | waf-detect --effectiveness <url> |
| Sonde d'origine | waf-detect origin-probe <url> --json |
| Rapport HTML | waf-detect report <file.json> -o <file.html> |
Identifie le WAF/CDN via les en-tĂŞtes, le corps, le DNS, le TLS et le timing. 12 fournisseurs : CloudFlare, AWS, Akamai, Fastly, Vercel, Azure, F5, Imperva, ModSecurity, Sucuri, Radware, FortiWeb.
waf-detect scan example.com --json
waf-detect scan @urls.txt --ndjson
Envoie des charges utiles d'attaque connues et mesure ce que le WAF bloque, défie ou autorise. Les tests de fumée actifs ne s'exécutent que contre des cibles enregistrées comme possédées.
./target/release/waf-detect --smoke-test example.com
# Aggressive mode (more payloads)
./target/release/waf-detect --smoke-test example.com --aggressive
# Export results
./target/release/waf-detect --smoke-test example.com -o results.json
Catégories d'attaque testées : injection SQL (basique + avancée), XSS (basique + avancé), injection de commande, traversée de chemin, SSTI, SSRF, Log4Shell, téléversement de fichier, détection de scanner, injection GraphQL, contrebande de requêtes HTTP, pollution de prototype, injection WebSocket, énumération.
Classifications des résultats :
BLOCKED — Le WAF a bloqué la requête (généralement 403)CHALLENGE — Protection anti-bot déclenchée (défi JS, CAPTCHA)ALLOWED — La requête est passée jusqu'à l'origineERROR — Échec non bloquant (404, 500, timeout)Envoie des sondes d'attaque catégorisées et mesure les taux de blocage/défi/autorisation avec un score de confiance. Nécessite une portée de cible enregistrée.
# Register owned targets once
./target/release/waf-detect --scope init example.com
# Run enforcement test
./target/release/waf-detect --va https://example.com
# With JSON output
./target/release/waf-detect --va https://example.com --va-json
# Save report
./target/release/waf-detect --va https://example.com --va-output report.json
Options :
--va-tier 1|2|3 — Niveau de sécurité (1 = le plus sûr)--va-budget N — Nombre maximal de requêtes par exécution (par défaut : 120)--va-timeout SECONDS — Délai d'attente par requête (par défaut : 15)--va-delay MS — Délai entre les requêtes (par défaut : 750)--va-variants N — Variantes par modèle de charge utile (par défaut : 4)--va-replay — Exporter le plan de rejeu en JSON--va-replay-csv — Exporter le plan de rejeu en CSVTeste la sophistication du WAF en envoyant des sondes appariées — une bénigne, une malveillante — sur 5 canaux HTTP. Mesure si le WAF les traite différemment.
# Dry run (shows plan without executing)
./target/release/waf-detect --va2 https://example.com
# Run behavioral analysis
./target/release/waf-detect --va2 https://example.com --va2-run
# Full 5-phase analysis
./target/release/waf-detect --va2 https://example.com --va2-run \
--va2-phases baseline,protocol-variance,state-escalation,behavioral-pressure,challenge-interaction
# Save results
./target/release/waf-detect --va2 https://example.com --va2-run --va2-output results.json
Ce qu'il mesure :
| Signal | Ce qu'il teste |
|---|---|
| Défense d'encodage | Le WAF normalise-t-il les chemins encodés avant la correspondance ? |
| Suivi de session | Le WAF suit-il l'état de session et escalade-t-il en cas d'abus répété ? |
| Défi anti-bot | Le WAF émet-il des CAPTCHA ou des défis JS ? |
| Limitation de débit | Le WAF limite-t-il les requêtes rapides ? |
| Reconnaissance d'attaque | Le WAF distingue-t-il les sondes d'attaque des requêtes bénignes ? |
Canaux testés : Path, Query, Header, Body, Method. Les canaux avec 0 % de détection d'attaque sont signalés comme non protégés.
Options :
--va2-phases LIST — Phases à exécuter (séparées par des virgules)--va2-seed N — Graine déterministe pour des résultats reproductibles (par défaut : 1337)--va2-budget N — Budget de requêtes (par défaut : 60)--va2-json — Afficher le plan/rapport en JSONGénère une note de sécurité unifiée (A-F) et un score de risque (0-100) combinant la confiance de détection, les résultats d'application et l'analyse comportementale.
# Detection only
./target/release/waf-detect --posture example.com
# Include behavioral analysis
./target/release/waf-detect --posture example.com --posture-va2
# Include enforcement testing (VA1) -- distinguishes "WAF present but not
# enforcing" (monitor/log-only mode) from "no WAF at all"
./target/release/waf-detect --posture example.com --posture-va1
# JSON output
./target/release/waf-detect --posture example.com --posture-va2 --posture-json
Échelle de notation :
Génère un artefact de scan JSON enregistré dans un rapport HTML statique facile à examiner localement et à partager avec d'autres ingénieurs.
# Render a saved hardening report
./target/release/waf-detect hardening https://example.com --output /tmp/example-hardening.json
./target/release/waf-detect report /tmp/example-hardening.json
# Render a saved posture report
./target/release/waf-detect --posture https://example.com --posture-va2 --posture-json > /tmp/example-posture.json
./target/release/waf-detect report /tmp/example-posture.json --output /tmp/example-posture.html
Le HTML généré est statique et autonome, il peut donc être joint à des tickets, partagé dans un chat ou ouvert localement sans réexécuter le scan.
Le test de fumée, l'analyse de charge utile, l'application, l'analyse comportementale et les tests d'efficacité nécessitent des cibles enregistrées comme possédées.
# Check target scope
./target/release/waf-detect --scope
# Initialize target scope
./target/release/waf-detect --scope init example.com api.example.com
# Add authorized target
./target/release/waf-detect --scope add-target admin.example.com
# Remove target
./target/release/waf-detect --scope remove-target api.example.com
# Clear target scope
./target/release/waf-detect --scope clear
Scores de risque (rapport de posture) :
Constats courants :
# List supported providers
./target/release/waf-detect --list
# Effectiveness testing (advanced evasion techniques)
./target/release/waf-detect --effectiveness example.com
# Benchmark against corpus
./target/release/waf-detect --benchmark corpus.json
# Performance snapshot
./target/release/waf-detect example.com --perf-report perf.json
# Debug output
./target/release/waf-detect example.com --debug --verbose
Options de sortie : --json / --ndjson / --compact / --yaml · waf-detect providers · waf-detect doctor
cargo test --lib
cargo clippy -- -D warnings
cargo fmt
Voir DEVELOPMENT.md pour tous les détails.
Sous licence selon l'une des deux
au choix.
Sauf indication contraire explicite, toute contribution soumise intentionnellement pour inclusion dans l'œuvre par vous, au sens de la licence Apache-2.0, sera doublement licenciée comme ci-dessus, sans conditions ni termes supplémentaires.