Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
ApiHunter — Scanner de sécurité d'API asynchrone en Rust pour CORS, CSP, GraphQL, JWT, OpenAPI et les contrôles de posture d'API active. | Kitploit
Outils/GitHubGitHub/teycir/apihunter
ReconnaissanceScanners de VulnérabilitésAnalyse Dynamique (Sandboxing)Exploitation d'Applications WebCollecte d'InformationsSécurité WebTests d'IntrusionDevSecOpsSécurité des API
GitHubteycir/apihunter

ApiHunter

Scanner de sécurité d'API asynchrone en Rust pour CORS, CSP, GraphQL, JWT, OpenAPI et les contrôles de posture d'API active.

192il y a 1 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Voir le dépôtSite web
Partager

Soutenir le développement

Si ce projet vous aide dans votre travail, soutenez la maintenance continue et les nouvelles fonctionnalités.

Portefeuille de don ETH
0x11282eE5726B3370c8B480e321b3B2aA13686582

QR code de don Ethereum

Scannez le QR code ou copiez l'adresse du portefeuille ci-dessus.

🎯 ApiHunter

Typing SVG

Rust Security API Async CI License


📺 Démo vidéo

Vidéo de démonstration ApiHunter
Cliquez pour regarder la démo complète sur YouTube

🖥️ Captures d'écran de l'application de bureau

ApiHunter Desktop — Panneau de présentation avec pastille de version, vérification d'intégrité et champ cible du scan complet

ApiHunter Desktop — Contrôles du scan complet : préréglages Passive rapide / Active profonde, sections repliables Sécurité, Limites d'exécution et Interrupteurs de scanner

ApiHunter Desktop — Tableau de bord analytique des résultats : carte de chaleur de sévérité, carte de la pire cible, efficacité du scan, résumé, ventilation des résultats et principaux contrôles

ApiHunter Desktop — Panneau inférieur des résultats : classement des cibles, couverture du scanner, ventilation de la sévérité des contrôles, résumé par cible et boutons d'exportation en un clic


📑 Table des matières

  • Démo vidéo
  • Captures d'écran de l'application de bureau
  • Pourquoi ApiHunter ?
  • Modules du scanner
  • Fonctionnalités
  • Comparaison avec d'autres outils
  • Démarrage rapide
  • Architecture
  • Outillage de modèles
  • Scripts de scan
  • Stratégie de test
  • Documentation
  • Feuille de route
  • Installation
  • Référence CLI
  • Codes de sortie
  • Garde-fous de sécurité et juridiques
  • Projets associés
  • À propos
  • FAQ
  • Licence

Scanner de sécurité API asynchrone et modulaire pour les tests de référence API et la détection de régressions.
Il combine la découverte à des contrôles ciblés (CORS/CSP/GraphQL/OpenAPI/JWT/Sécurité API) grâce à une concurrence adaptative et des sorties prêtes pour la CI (NDJSON/SARIF).

Cas d'usage : offensif pour la découverte en red team / pentest d'API et la validation d'exploits, et défensif pour les portes de régression CI/CD, le durcissement continu des API et la détection précoce des mauvaises configurations.

Vous scannez à grande échelle ? Consultez le Mode Triage — scannez 5 000 cibles en 20 minutes avec les contrôles de sécurité essentiels, puis utilisez le Mode Enrich pour ajouter un contexte de renseignement sur les menaces (ports, CVE, ASN, âge du domaine) aux résultats.

Nommage

  • Projet / dépôt : ApiHunter
  • Paquet Cargo : apihunter
  • Crate de bibliothèque : api_scanner
  • Binaire CLI : apihunter (par défaut pour cargo run)

Métadonnées GitHub (recommandées)

Définissez-les dans les paramètres du dépôt GitHub pour une meilleure découvrabilité :

  • Description : Async API security scanner for CORS/CSP/GraphQL/JWT/OpenAPI and active API posture checks.
  • Site web : https://github.com/Teycir/ApiHunter
  • Sujets : rust, security, api-security, scanner, graphql, cors, csp, jwt, openapi, sarif, ndjson

Flux du dépôt```mermaid

flowchart LR A[CLI apihunter] --> B[main.rs] D[Input Sources] --> E[Pre-filter + Discovery] B --> C[HttpClient + Config] E --> F[runner.rs] C --> F

root@kitploit:~
F --> G1[Passive scanners]
F --> G2[Active scanners]

I[template-tool] --> H[CVE templates]
H --> G2

G1 --> J[Findings]
G2 --> J
J --> K[Reporter]
K --> L[Auto Reports]
K --> M[CI/CD Controls]
root@kitploit:~
## Pourquoi ApiHunter ?

### Avantages principaux

- **Architecture orientée API** : conçu spécifiquement pour les API REST/GraphQL, pas adapté de scanners d'applications web
- **Réduction intelligente des faux positifs** :
  - Détection SPA catch-all avec sondes canaries
  - Validation contextuelle des secrets (frontend vs backend)
  - Validation du contenu du corps et vérification du referer
  - Empreintes de réponse pour ignorer les résultats en double
- **Conçu pour être sûr en production** :
  - Concurrence adaptative (AIMD) qui réduit en cas d'erreurs
  - Limitation de débit par hôte avec délais configurables
  - Contrôles de politesse (nouvelles tentatives, délais d'attente, évasion WAF)
  - Mode dry-run pour les contrôles actifs
- **Furtivité et évasion** :
  - Rotation du User-Agent à l'exécution depuis un pool soigneusement sélectionné (assets/user_agents.txt)
  - Délais de requête aléatoires avec jitter
  - Application du délai par hôte (évite les rafales)
  - Logique de nouvelle tentative avec backoff exponentiel
  - Injection d'en-têtes personnalisés pour se fondre dans le trafic légitime
  - Synchronisation adaptative selon les réponses du serveur
  - Aucune empreinte de scanner codée en dur en mode par défaut

### Plongée dans les techniques de furtivité

ApiHunter utilise plusieurs techniques de furtivité pour éviter la détection par les WAF (Web Application Firewall) et les systèmes de protection anti-bots :

#### 1. Rotation du User-Agent
**Ce que ça fait :** Alterne aléatoirement parmi plus de 100 chaînes de User-Agent de navigateurs réels provenant d'un fichier (`assets/user_agents.txt`)

**Pourquoi ça marche :** Les bots utilisent généralement le même User-Agent (comme `curl/7.68.0`). En se faisant passer pour Chrome, Firefox, Safari, etc., vous vous fondez dans le trafic légitime

**Analogie simple :** Comme porter différents déguisements au lieu de toujours porter le même uniforme

#### 2. Synchronisation aléatoire et jitter
**Ce que ça fait :** Ajoute des délais aléatoires entre les requêtes (contrôlés par `--delay-ms`) avec jitter (petites variations aléatoires)

**Pourquoi ça marche :** Les bots envoient des requêtes à intervalles parfaits (exactement 100 ms d'écart). Les humains sont imprévisibles. Une synchronisation aléatoire rend le trafic organique

**Analogie simple :** Marcher à pas irréguliers au lieu de marcher comme un robot

#### 3. Application du délai par hôte
**Ce que ça fait :** Suit le délai séparément pour chaque domaine, pas globalement

**Pourquoi ça marche :** Empêche les rafales où vous frappez un hôte 50 fois instantanément. Chaque hôte voit des requêtes polies et espacées

**Analogie simple :** Prendre tour à tour la parole dans différentes conversations au lieu de crier après une seule personne sans arrêt

#### 4. Concurrence adaptative (AIMD)
**Ce que ça fait :** Ralentit automatiquement en cas d'erreurs 429 (limite de débit) ou 503 (serveur occupé), accélère quand tout réussit

**Pourquoi ça marche :** Réduit la cadence quand il est repéré, imite la façon dont les navigateurs réessaient. Les WAF voient « ce client respecte nos limites »

**Analogie simple :** Ralentir quand le trafic est congestionné, accélérer sur les routes dégagées

#### 5. Nouvelle tentative avec backoff exponentiel
**Ce que ça fait :** Quand une requête échoue, attend 1 s, puis 2 s, puis 4 s avant de réessayer

**Pourquoi ça marche :** Les clients légitimes réessaient avec souplesse. Les bots martèlent immédiatement ou abandonnent

**Analogie simple :** Frapper à une porte, attendre plus longtemps à chaque fois au lieu de tambouriner sans arrêt

#### 6. Aucune empreinte de scanner
**Ce que ça fait :** N'envoie pas d'en-têtes comme `X-Scanner: ApiHunter` ni de motifs prévisibles

**Pourquoi ça marche :** De nombreux outils laissent des signatures (modèles Nuclei, motifs sqlmap). ApiHunter évite les marqueurs évidents

**Analogie simple :** Ne pas porter un badge « Testeur de sécurité »

#### 7. Réutilisation et regroupement des connexions
**Ce que ça fait :** Utilise des pools de clients HTTP par hôte, maintient les connexions actives

**Pourquoi ça marche :** Les navigateurs réutilisent les connexions. Ouvrir/fermer pour chaque requête paraît suspect

**Analogie simple :** Laisser la porte ouverte au lieu de la claquer et de sonner à nouveau

#### 8. Injection d'en-têtes personnalisés
**Ce que ça fait :** Peut ajouter des en-têtes comme `Referer`, `X-Forwarded-For`, des cookies personnalisés

**Pourquoi ça marche :** Rend les requêtes semblables à un flux applicatif légitime (clic sur un lien, présence de cookies de session)

**Analogie simple :** Montrer un billet d'entrée en arrivant dans une salle au lieu de sauter par-dessus la barrière

#### Comparaison de détection

| Technique | Sans évasion | Avec évasion |
|-----------|----------------|-------------|
| **User-Agent** | `python-requests/2.28.0` (bot évident) | `Mozilla/5.0 (Windows NT 10.0; Win64; x64)...` (ressemble à Chrome) |
| **Synchronisation** | Intervalles parfaits de 100 ms → WAF bloque | 120 ms, 95 ms, 180 ms → semble humain |
| **Nouvelles tentatives** | Tentative immédiate → bannissement | Attendre 1 s→2 s→4 s → « client patient » |
| **Concurrence** | 100 frappes parallèles → alarme | Adaptatif 5→10→3 selon la réponse → « navigateur poli » |

#### Quand utiliser `--waf-evasion`

- Tester des API de production derrière Cloudflare/Akamai/AWS WAF
- Éviter les bannissements IP lors de grands scans
- Tests d'intrusion où vous devez rester discret

- **Natif CI/CD** :
  - Différentiel de base (`baseline diffing`) : ne rapporte que les nouveaux résultats
  - Sortie NDJSON en streaming pour un suivi en temps réel
  - SARIF 2.1.0 pour GitHub/GitLab Code Scanning
  - Masque de bits de code de sortie pour le contrôle des pipelines
  - Filtrage par sévérité et seuils d'échec
- **Performances à l'échelle** :
  - Runtime asynchrone Rust (tokio) avec abstractions sans coût
  - Scan concurrent avec parallélisme borné par sémaphores
  - Pools de clients HTTP par hôte pour éviter les goulots de connexion
  - Utilisation mémoire efficace (pas de pauses GC)
- **Prise en charge complète de l'authentification** :
  - Flux d'authentification JSON avec extraction de cookies/en-têtes
  - Tests IDOR/BOLA à double identité
  - Import de fichiers de session (intégration Excalibur)
  - Auth Bearer, Basic, et en-têtes personnalisés
  - Client non authentifié automatique pour les vérifications d'élévation de privilèges

## Modules du scanner

ApiHunter inclut 13 modules de scanner intégrés. Voir [docs/scanners.md](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md) pour la logique de détection détaillée.

| Scanner | Type | Ce qu'il détecte |
|---------|------|----------------|
| **CORS** | Passif | Origines génériques (wildcard), origines réfléchies avec identifiants, acceptation de l'origine null, vulnérabilités de contournement regex (attaques par suffixe/préfixe), en-tête `Vary: Origin` manquant, méthodes de préflight non sûres |
| **CSP** | Passif | Content-Security-Policy manquante, directives unsafe-inline/unsafe-eval, sources génériques, hôtes CDN contournables (gadgets JSONP), frame-ancestors manquant |
| **GraphQL** | Passif | Introspection activée, champs de schéma sensibles (types user/password/token), suggestions de champs (fuite de schéma), batching de requêtes, amplification par alias (DoS), exposition GraphiQL/Playground |
| **JWT** | Passif | Jetons alg=none, secrets HS256 faibles (basés sur une liste de mots), expiration absente/excessive, revendications sensibles dans le payload, vulnérabilités de confusion d'algorithme |
| **OpenAPI** | Passif | Schémas de sécurité manquants, opérations sans exigence d'auth, points de terminaison d'upload de fichiers, opérations dépréciées toujours présentes, points de terminaison sensibles non protégés |
| **Versionnement API** | Passif | Divulgation d'en-tête de version, versions d'API anciennes/nouvelles concurrentes, en-têtes de dépréciation, et dérive de réponse entre variantes bénignes de requête/version (plus mode profond via `--response-diff-deep`) |
| **gRPC/Protobuf** | Passif + Actif | Signaux de transport/content-type gRPC, indices de surface protobuf, et sondes facultatives de réflexion/santé |
| **Sécurité API** | Passif + Actif | En-têtes de sécurité manquants (X-Content-Type-Options, X-Frame-Options), divulgation de version serveur, accès non authentifié à des chemins sensibles, énumération de méthodes HTTP, points de terminaison de débogage, motifs d'exposition de secrets, vérifications IDOR/BOLA actives (comparaison du corps + de certains en-têtes), sondes de callback SSRF aveugle, et sondes de signature de passerelle/contournement |
| **Mass Assignment** | Actif | Champs sensibles réfléchis (is_admin, role, permissions), changements d'état persistés, élévation de privilèges par injection de champs |
| **OAuth/OIDC** | Actif | Contournement de validation d'URI de redirection, paramètre state manquant, problèmes de support PKCE (S256 manquant, plain autorisé), flux implicite activé, octroi de mot de passe activé |
| **Rate Limit** | Actif | Limitation de débit absente (sondes en rafale), en-têtes Retry-After manquants, contournement par spoofing d'en-tête IP (X-Forwarded-For) |
| **WebSocket** | Actif | Acceptation de mise à niveau WebSocket sur des chemins courants, validation d'origine manquante, connexions WebSocket non authentifiées |
| **Modèles CVE** | Actif | Détection de CVE pilotée par modèles depuis `assets/cve_templates/*.toml` (168 modèles actuellement), correspondance différentielle baseline vs bypass |

**Les scanners passifs** s'exécutent par défaut et analysent les réponses sans envoyer de requêtes façonnées.  
**Les scanners/vérifications actifs** nécessitent `--active-checks` et envoient des sondes potentiellement invasives (IDOR/BOLA, mutation, tests de contournement).  
IDOR/BOLA se trouve sous le scanner `API Security` (il n'y a pas de drapeau dédié `--no-idor` ; utilisez `--no-api-security` pour le désactiver).

### Notes sur la sortie des modules et les signaux

Ces notes résument comment les résultats sont émis et ce qui génère typiquement du bruit :

| Module | Préfixe / forme du résultat | Faux positifs courants | Faux négatifs courants |
|---------|-------------------------|-------------------------|-------------------------|
| CORS | `cors/*` avec champs origin/evidence | Réflexion sur des routes non sensibles | Vérifications d'origine appliquées seulement sur les routes authentifiées |
| CSP | `csp/*` avec preuve dans la directive | CSP héritée appliquée volontairement pendant une migration | CSP délivrée uniquement sur le chemin de la périphérie CDN de production |
| GraphQL | `graphql/*` avec point de terminaison + signal de capacité | Playground public destiné aux locataires internes/aux tests | Contrôles de schéma activés uniquement après authentification |
| JWT | `jwt/*` avec preuve dans les revendications/en-têtes du jeton | Jetons de test/démo dans des réponses synthétiques | Le jeton n'apparaît jamais dans les réponses scannées |
| OpenAPI | `openapi/*` avec contexte opération/sécurité | La spec inclut intentionnellement des points de terminaison dépréciés mais bloqués | Spec indisponible ou répartie entre plusieurs docs privés |
| Versionnement API | `api_versioning/*` + `response_diff/*` | Plusieurs versions supportées pendant des migrations contrôlées | Chemins versionnés non découvrables depuis le jeu de graines actuel |
| gRPC/Protobuf | `grpc_protobuf/*` avec preuve transport/réflexion | Métadonnées ressemblant à gRPC sur des proxys périphériques sans surface RPC exposée | Points de terminaison gRPC derrière un hôte/chemin séparé non atteints depuis le jeu de graines |
| Sécurité API | `api_security/*` avec preuve en-tête/chemin/méthode | Points de terminaison de débogage/test exposés volontairement hors production | Contrôles appliqués derrière un contexte d'authentification/session |
| Mass Assignment | `mass_assignment/*` avec deltas réfléchis/persistés | Comportement d'écho qui ne persiste pas l'état backend | Mutations rejetées par des règles de validation cachées |
| OAuth/OIDC | `oauth/*` avec preuve redirection/métadonnées | Config IdP non productive avec politiques relâchées | Application dynamique de politiques non visible dans les métadonnées |
| Rate Limit | `rate_limit/*` avec comportement de rafale/429 | Le lissage global du trafic masque le comportement du limiteur applicatif | Limiteurs à longue fenêtre non déclenchés par une courte fenêtre de sonde |
| WebSocket | `websocket/*` avec vérifications d'upgrade/origine | Points de terminaison WS publics volontairement anonymes | Auth requise via en-têtes de handshake non fournis dans la sonde |
| Modèles CVE | `cve/<id>/<check>` avec preuve du modèle | Collision d'empreinte sur des points de terminaison génériques | Chemin/contexte vulnérable non atteint depuis les URL de graines |

Pour le détail check par check et les recommandations de remédiation, voir [docs/scanners.md](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md) et [docs/findings.md](https://github.com/teycir/apihunter/blob/HEAD/docs/findings.md).
La documentation du scanner inclut désormais un [catalogue de vérifications de modules](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md#module-check-catalog) aligné sur la source et un [modèle d'attente des faux positifs](https://github.com/teycir/apihunter/blob/HEAD/docs/scanners.md#false-positive-expectation-model).

## Fonctionnalités

### Analyse de sécurité passive
- **Détection des erreurs de configuration CORS** :
  - Génération dynamique d'origine basée sur le domaine cible
  - Test de contournement regex (attaques par suffixe/préfixe)
  - Score de sévérité tenant compte des identifiants
  - Détection d'origine générique et null
- **Analyse de politique CSP** :
  - Détection de Content Security Policy manquante/faible
  - Directives inline/eval non sûres
  - Détection de sources génériques
  - Motifs de contournement de politique
- **Sécurité GraphQL** :
  - Détection de requête d'introspection
  - Analyse des noms de types/champs sensibles
  - Détection du support du batching de requêtes
  - Sondage d'amplification par alias (DoS)
  - Fuzzing actif de mutations (`--active-checks`, supporte `--dry-run`)
  - Exposition GraphiQL/Playground
- **Analyse des jetons JWT** :
  - Confusion d'algorithme (alg=none, HS256→RS256)
  - Détection de secret faible (liste de mots soigneusement sélectionnée)
  - Détection de jetons à longue durée de vie (exp absente/excessive)
  - Exposition de revendications sensibles
  - Extraction de jetons depuis les en-têtes et cookies
- **Analyse OpenAPI/Swagger** :
  - Validation des schémas de sécurité
  - Détection des points de terminaison d'upload de fichiers
  - Signalement des opérations dépréciées
  - Définitions de sécurité manquantes
  - Cache de la spec pour la performance
- **Couverture gRPC/Protobuf** :
  - Détection des métadonnées/content-types de réponse gRPC
  - Détection d'indices de surface protobuf depuis les métadonnées/forme des chemins du point de terminaison
  - Sondes actives facultatives de réflexion/santé sur les chemins gRPC connus
- **Détection d'exposition de secrets** :
  - Clés AWS (AKIA*, clés secrètes)
  - Clés API Google (AIza*)
  - Jetons GitHub (ghp_*, github_pat_*)
  - Jetons Slack (xox*)
  - Clés Stripe (sk_live_*, pk_live_*)
  - URLs de base de données, clés privées, jetons bearer
  - Validation contextuelle (réduit les faux positifs)
- **Vérifications de sécurité API** :
  - Énumération de méthodes HTTP
  - Détection de points de terminaison de débogage
  - Exposition de listage de répertoires
  - Présence de security.txt
  - Analyse des en-têtes de réponse (HSTS, X-Frame-Options, etc.)
  - Divulgation de messages d'erreur

### Tests de sécurité actifs (--active-checks)
- **Vérifications IDOR/BOLA de sécurité API** (approche à 3 niveaux) :
  - Test d'accès non authentifié
  - Comparaison des réponses via empreintes du corps plus instantanés d'en-têtes stables
  - Énumération d'ID (parcours de plage ±2)
  - Contournement d'autorisation entre utilisateurs (double identité)
  - Sondage de callback SSRF aveugle via paramètres de requête de type callback (`APIHUNTER_OAST_BASE`, supporte `--dry-run`)
  - Sondage d'empreinte et de contournement de passerelle (`api_security/gateway-*`)
- **Vulnérabilités Mass Assignment** :
  - Injection de champs sensibles réfléchis
  - Détection de changement d'état persisté
  - Vérification Baseline→Mutate→Confirm
  - Élévation de privilèges par injection de champs
- **Sécurité OAuth/OIDC** :
  - Contournement de validation d'URI de redirection
  - Gestion du paramètre state
  - Détection du support PKCE
  - Durcissement de la configuration des métadonnées
  - Détection du flux implicite et de l'octroi de mot de passe
- **Limitation de débit** :
  - Sondage de requêtes en rafale
  - Détection d'absence de limitation de débit
  - Validation de l'en-tête Retry-After
  - Tests de contournement par spoofing d'en-tête IP
- **Sécurité WebSocket** :
  - Acceptation d'upgrade sur des chemins courants
  - Test de validation d'origine
  - Vérifications d'authentification manquante
- **Moteur de modèles CVE** :
  - Catalogue de modèles basé sur TOML
  - Support d'import de YAML Nuclei
  - Correspondance différentielle baseline vs bypass
  - Déduplication hôte+modèle
  - Portails de qualité du chargeur qui ignorent les modèles de requête invalides/non sûrs (par exemple, les placeholders de requête non résolus)
  - Correspondance contextuelle segmentée qui réduit les déclenchements excessifs par sous-chaîne large de chemin
  - Catalogue local actuel : 168 modèles (inclut des vérifications durcies sélectionnées telles que CVE-2022-22947, CVE-2021-29442, CVE-2021-29441, CVE-2020-13945, CVE-2021-45232, CVE-2022-24288)

### Découverte et énumération
- **Découverte de points de terminaison** :
  - Analyse de robots.txt
  - Analyse de sitemap.xml
  - Import de spec OpenAPI/Swagger
  - Import de fichier HAR (intégration Excalibur)
  - Import de collection Postman/Insomnia (`--collection`)
  - Extraction de points de terminaison JavaScript
  - Filtrage par même hôte
- **Pré-filtrage d'accessibilité des URL** :
  - Pré-vérification rapide pour ignorer les points de terminaison morts
  - Délai d'attente configurable
  - Contournement facultatif avec --no-filter

### Performance et fiabilité
- **Concurrence adaptative (AIMD)** :
  - Ajustement automatique du débit selon les erreurs
  - Augmentation additive (toutes les 5 s)
  - Diminution multiplicative sur 429/503/délais d'attente
- **Furtivité et évasion WAF** :
  - Rotation du User-Agent depuis le pool d'exécution (assets/user_agents.txt avec plus de 100 vrais UAs)
  - UAs de secours intégrés si le fichier est indisponible
  - Jitter de délai aléatoire pour éviter les motifs de détection
  - Application de la synchronisation par hôte (pas globale)
  - Logique de nouvelle tentative avec backoff exponentiel
  - Injection d'en-têtes personnalisés (X-Forwarded-For, Referer, etc.)
  - Synchronisation adaptative basée sur les réponses 429/503
  - Mode politesse pour les tests coopératifs
  - Aucune empreinte de scanner dans le User-Agent ou les en-têtes par défaut
- **Gestion des ressources** :
  - Parallélisme borné par sémaphores
  - Pools de clients HTTP par hôte
  - Réutilisation et regroupement des connexions
  - Délais d'attente et nouvelles tentatives configurables
- **Gestion des erreurs** :
  - Récupération de panique via JoinSet
  - Erreurs capturées rapportées séparément
  - Dégradation gracieuse en cas d'échec des scanners

### Sortie et rapports
- **Plusieurs formats de sortie** :
  - JSON joli (lisible par l'humain)
  - NDJSON (streaming, analysable)
  - SARIF 2.1.0 (GitHub/GitLab Code Scanning)
- **Différentiel de base (baseline diffing)** :
  - Générer des instantanés de base
  - Comparer les scans pour ne rapporter que les nouveaux résultats
  - Idéal pour les tests de régression
- **Enregistrement automatique des rapports** (activé par défaut, désactivable avec `--no-auto-report`) :
  - Enregistré dans ~/Documents/ApiHunterReports/<horodatage>/
  - findings.json (résultats structurés)
  - summary.md (rapport Markdown)
  - scan.log (journal d'exécution)
- **Streaming en temps réel** :
  - Diffuse les résultats au fur et à mesure qu'ils sont découverts
  - Format NDJSON pour analyse en direct
  - Suivi de la progression
- **Filtrage par sévérité** :
  - Filtrer par sévérité minimale (info/low/medium/high/critical)
  - Seuil d'échec pour CI/CD
  - Masque de bits de code de sortie (0x01 résultats, 0x02 erreurs)

### Intégration et extensibilité
- **Architecture de scanner enfichable** :
  - Implémenter le trait Scanner pour ajouter des modules
  - Conception async-first
  - Exécution indépendante des scanners
  - Isolation des paniques par scanner
- **Extensibilité basée sur TOML** :
  - Catalogue de modèles CVE dans assets/cve_templates/*.toml
  - Aucun changement de code nécessaire pour ajouter de nouvelles vérifications
  - Détection de vulnérabilités pilotée par modèles
  - Format de modèle partageable par la communauté
- **Import de modèles Nuclei** :
  - Binaire template-tool pour la conversion YAML → TOML
  - Traduction automatique des matchers (status, word, regex, dsl)
  - Extraction sûre des chaînes de requêtes en pré-vol
  - Préserve la logique de détection des modèles en amont
- **Modèle d'extension double** :
  - **Basé sur le code** : écrivez des scanners Rust implémentant le trait Scanner pour une logique complexe
  - **Basé sur des modèles** : écrivez des modèles TOML pour des vérifications par signature (CVE, mauvaises configurations)
  - Le meilleur des deux mondes : performance + flexibilité
- **Outils complémentaires** :
  - Extension de navigateur Excalibur (capture HAR)
  - BurpAPIsecuritysuite (tests manuels)
  - Flux de travail : Capturer → Automatiser → Tester en profondeur

### Configuration et contrôle
- **Entrée flexible** :
  - Listes d'URL basées sur des fichiers
  - stdin (pipe depuis d'autres outils)
  - Import de fichier HAR
  - Import de collection Postman/Insomnia
  - Import de spec OpenAPI
- **Contrôle granulaire des scanners** :
  - Activer/désactiver des scanners individuels
  - Mode actif ou passif
  - Dry-run pour les vérifications actives
  - Configuration par scanner
- **Configuration réseau** :
  - Support de proxy HTTP/HTTPS
  - Contrôle de validation des certificats TLS
  - En-têtes et cookies personnalisés
  - Délais d'attente et nouvelles tentatives configurables
- **Profils de scan** :
  - quickscan.sh (rapide, faible impact)
  - deepscan.sh (complet, vérifications actives)
  - inaccessiblescan.sh (revérifier les cibles auparavant inaccessibles avec des paramètres plus lents)
  - baselinescan.sh (générer une base)
  - diffscan.sh (comparer avec la base)
  - authscan.sh (scan authentifié)
  - sarifscan.sh (intégration CI/CD)
  - scan-and-report.sh (exécuter le scan + afficher le dernier chemin de rapport)
  - split-by-host.sh (répartir les cibles par hôte et, facultativement, lancer des scans en parallèle)

## Comparaison avec d'autres outils| Feature | ApiHunter | Nuclei | ZAP | Burp Suite | ffuf |
|---------|-----------|--------|-----|------------|------|
| **Langage** | Rust | Go | Java | Java | Go |
| **Performance** | ⚡⚡⚡ Async, concurrence adaptative | ⚡⚡ Parallélisme rapide | ⚡ Modérée | ⚡ Modérée | ⚡⚡⚡ Très rapide |
| **Conception API-first** | ✅ Conçu pour les API | ❌ Web général | ⚠️ Hybride | ⚠️ Hybride | ❌ Focus fuzzing |
| **Filtrage des faux positifs** | ✅ Détection SPA, validation du corps, vérifications du referer | ⚠️ Dépend des modèles | ⚠️ Beaucoup de faux positifs | ✅ Bon | N/A |
| **Analyse CORS/CSP** | ✅ Analyse approfondie des politiques | ⚠️ Modèles de base | ✅ Bonne | ✅ Bonne | ❌ |
| **Introspection GraphQL** | ✅ Exposition du schéma + vérifications des champs sensibles | ⚠️ Détection basique | ⚠️ Limitée | ✅ Via extensions | ❌ |
| **OpenAPI/Swagger** | ✅ Analyse des schémas de sécurité | ❌ | ✅ Import uniquement | ✅ Import + scan | ❌ |
| **Analyse JWT** | ✅ alg=none, secrets faibles, expiration | ⚠️ Via des modèles | ⚠️ Limitée | ✅ Via extensions | ❌ |
| **Détection IDOR/BOLA** | ✅ 3 niveaux (non authentifié/plage/entre utilisateurs) | ⚠️ Modèles manuels | ⚠️ Limitée | ✅ Tests manuels | ❌ |
| **Détection de secrets** | ✅ Sensible au contexte (frontend vs backend) | ⚠️ Basé sur des regex | ⚠️ Basique | ⚠️ Basique | ❌ |
| **Vérifications actives** | ✅ En option (IDOR, mass-assignment, OAuth/OIDC, websocket, rate-limit, modèles CVE) | ✅ Basé sur des modèles | ✅ Scan actif | ✅ Scan actif | ✅ Fuzzing |
| **Contournement WAF** | ✅ Rotation UA, délais, nouvelles tentatives, timing adaptatif | ⚠️ Basique | ⚠️ Limité | ✅ Bon | ⚠️ Basique |
| **Intégration CI/CD** | ✅ NDJSON, SARIF, codes de sortie | ✅ JSON, SARIF | ⚠️ Rapports XML | ⚠️ XML/JSON | ✅ JSON |
| **Comparaison de baseline** | ✅ Intégrée | ❌ Outils externes | ❌ | ❌ | ❌ |
| **Flux d'authentification** | ✅ Connexion JSON avant scan | ⚠️ Injection d'en-tête | ✅ Gestion de session | ✅ Gestion de session | ⚠️ Injection d'en-tête |
| **Sortie en continu** | ✅ NDJSON en temps réel | ❌ Uniquement par lot | ❌ | ❌ | ✅ |
| **Utilisation des ressources** | 🟢 Faible (Rust) | 🟢 Faible (Go) | 🟡 Élevée (Java) | 🟡 Élevée (Java) | 🟢 Faible (Go) |
| **Courbe d'apprentissage** | 🟢 CLI simple | 🟢 Syntaxe de modèles | 🟡 Complexité de l'interface graphique | 🔴 Raide | 🟢 Simple |
| **Extensibilité** | ✅ Système de traits Rust | ✅ Modèles YAML | ✅ Modules complémentaires | ✅ Extensions | ⚠️ Limitée |
| **Licence** | MIT (Gratuit) | MIT (Gratuit) | Apache 2.0 (Gratuit) | Commerciale | MIT (Gratuit) |
| **Idéal pour** | Sécurité API dans CI/CD, tests de régression, analyse CORS/GraphQL/JWT | Analyse générale de vulnérabilités, détection CVE | Pentest complet d'applications web | Pentest manuel, workflows complexes | Fuzzing de répertoires/paramètres |

### Principaux différenciateurs

**ApiHunter:** Conception API-first, détection SPA, diffing de baseline, IDOR/BOLA à 3 niveaux, secrets sensibles au contexte, concurrence AIMD, **contournement furtif/WAF (rotation UA, gigue, timing adaptatif)**, **double extensibilité (modèles TOML + modules Rust)**  
**Nuclei:** Couverture CVE élargie, modèles YAML uniquement, évasion basique  
**ZAP/Burp:** Tests manuels, workflows proxy, extensions basées sur l'interface graphique, furtivité limitée  
**ffuf:** Fuzzing pur, découverte de contenu, extensibilité limitée, évasion basique

## Démarrage rapide```bash
cargo build --release

# Scan URLs from a file (newline-delimited)
./target/release/apihunter --urls ./targets/cve-regression-real-public.txt --format ndjson --output ./results.ndjson

# Or scan URLs from stdin
cat ./targets/cve-regression-real-public.txt | ./target/release/apihunter --stdin --min-severity medium

Démarrage rapide de l'application de bureau (Tauri + React)

ApiHunter est également livré avec une application de bureau dans apps/desktop.```bash cd apps/desktop npm install npm run tauri dev

root@kitploit:~
L'entrée de scan desktop prend en charge :
- Saisie manuelle de plusieurs cibles (une URL par ligne ou séparées par des virgules)
- Import CSV via `Load CSV` (max 307 200 octets / 300 Kio)
- Préréglages de scan guidé : `Quick Passive` et `Deep Active`
- Limite stricte : jusqu'à 3 000 cibles par exécution (dédupliquées + validées comme URL `http/https` absolues)
- Contrôles de portée : découverte activée/désactivée, filtrage d'accessibilité + délai d'expiration, nombre maximal de points de terminaison par site
- Contrôles de versionnage d'API : bascule facultative de sondage approfondi des différences de réponse
- Contrôles avancés : proxy, en-têtes, cookies, authentification bearer/basic, bascule TLS pour certificat invalide
- Entrée de corrélation de callback SSRF aveugle (`OAST callback base`) pour les contrôles actifs
- Contrôles de performances : clients par hôte, concurrence adaptative, évasion WAF avec pool d'user-agents personnalisés
- Couverture complète des bascules du scanner, y compris `API Versioning` et `gRPC/Protobuf`
- Sections de scan repliables avec chevrons alignés à droite ; `Safety and Scan Behavior`, `Runtime Limits` et `Scanner toggles` sont réduites par défaut
- Cartes de progression des exécutions parallèles avec instantanés d'achèvement/constatations par cible
- Tableau de bord d'analyse des résultats : carte thermique de sévérité, carte de la pire cible, efficacité du scan, couverture du scanner, principaux chemins vulnérables, répartition de la sévérité des contrôles
- Persistance de session : restauration automatique des derniers résultats de scan au prochain lancement
- Panneau Mode Enrich : charger les constatations NDJSON, exécuter l'enrichissement threat-intel, promouvoir les hôtes à score élevé directement vers Full Scan avec le préréglage Deep Active
- UX d'exportation : libellés de taille + `Save All Reports` + noms de fichiers horodatés par exécution ; les exportations incluent des bundles JSON par cible, NDJSON, SARIF, collection Insomnia et données Insomnia Runner

Voir [HOWTO.md](https://github.com/teycir/apihunter/blob/HEAD/HOWTO.md) pour une utilisation détaillée, [docs/lab-setup.md](https://github.com/teycir/apihunter/blob/HEAD/docs/lab-setup.md) pour les laboratoires de validation CVE basés sur Vulhub, et [docs/](https://github.com/teycir/apihunter/blob/HEAD/docs/) pour les détails internes.

Si vous souhaitez un binaire desktop de version :```bash
cd apps/desktop
npm run tauri build
./src-tauri/target/release/apihunter-desktop

Installer une icône/lanceur d'application Linux cliquable :```bash cd apps/desktop npm run desktop:install-icon

root@kitploit:~
Remarque : le démarrage du dev desktop utilise désormais directement les assets frontend compilés et ne nécessite pas de serveur `localhost:1420` séparé.

Consultez [HOWTO.md](https://github.com/teycir/apihunter/blob/HEAD/HOWTO.md) pour une utilisation détaillée, [docs/lab-setup.md](https://github.com/teycir/apihunter/blob/HEAD/docs/lab-setup.md) pour les laboratoires de validation CVE basés sur Vulhub, et [docs/](https://github.com/teycir/apihunter/blob/HEAD/docs/) pour les détails internes.

### Exemple de résultat NDJSON```json
{
  "url": "https://api.example.com/graphql",
  "check": "graphql/introspection-enabled",
  "title": "GraphQL introspection is enabled",
  "severity": "MEDIUM",
  "detail": "Introspection query returned schema metadata from a public endpoint.",
  "evidence": "POST /graphql -> HTTP 200 with __schema fields in response body",
  "scanner": "graphql",
  "timestamp": "2026-03-19T14:02:11.824Z"
}

Architecture```

main.rs ──► cli.rs (args) ──► config.rs (Config) │ runner.rs (orchestration) ┌──────┴────────────────────────────┐ discovery/ scanner/ ├─ robots.rs ├─ cors.rs ├─ sitemap.rs ├─ csp.rs ├─ swagger.rs ├─ jwt.rs ├─ js.rs ├─ graphql.rs ├─ headers.rs ├─ openapi.rs └─ common_paths.rs ├─ api_security.rs ├─ api_versioning.rs ├─ grpc_protobuf.rs ├─ mass_assignment.rs ├─ oauth_oidc.rs http_client.rs ├─ rate_limit.rs auth.rs ├─ cve_templates.rs waf.rs └─ websocket.rs reports.rs error.rs

root@kitploit:~
**Flux:** CLI args → Config → Runner orchestre Discovery + Scanners → HTTP Client (avec Auth/WAF) → Reports

## Outillage de templates

ApiHunter prend en charge **une double extensibilité** : ajoutez des vérifications via **des templates TOML** (sans code) ou **des modules Rust** (contrôle total).

### Format de template TOML
Créez des vérifications personnalisées dans `assets/cve_templates/*.toml` :```toml
id = "custom-api-check"
name = "Custom API Vulnerability"
severity = "high"

[[requests]]
method = "GET"
path = "/api/vulnerable"

[[requests.matchers]]
type = "status"
values = [200]

[[requests.matchers]]
type = "word"
part = "body"
words = ["sensitive_data", "exposed"]

Importer les modèles Nuclei

Convertissez les modèles YAML Nuclei existants :```bash cargo run --bin template-tool -- import-nuclei
--input tests/fixtures/upstream_nuclei/CVE-2022-24288.yaml
--output assets/cve_templates/cve-2022-24288.toml

root@kitploit:~
### Ajouter des scanners Rust personnalisés
Implémentez le trait `Scanner` pour la logique complexe :```rust
#[async_trait]
impl Scanner for MyCustomScanner {
    async fn scan(
        &self,
        url: &str,
        client: &HttpClient,
        config: &Config,
    ) -> (Vec<Finding>, Vec<CapturedError>) {
        // Your custom scanning logic
    }
}

Voir HOWTO.md et docs/scanners.md pour plus de détails.

Scripts de scan

ScanScripts/ contient des scripts d'encapsulation pratiques pour les profils de scan courants :

  • quickscan.sh - Scan rapide et à faible impact (concurrence : 10, max-endpoints : 20, timeout : 5 s, retries : 0, delay : 50 ms)
  • deepscan.sh - Scan complet avec contrôles actifs (concurrence adaptative, clients par hôte, endpoints illimités, retries : 3, timeout : 20 s, delay : 200 ms)
  • defaultscan.sh - Exécution avec les valeurs par défaut de la CLI (aucune option prédéfinie)
  • baselinescan.sh - Génère un NDJSON de référence pour le diff
  • diffscan.sh - Compare avec la référence et ne signale que les nouveaux résultats
  • authscan.sh - Scan authentifié avec flux d'authentification (nécessite --auth-flow, active les contrôles actifs, l'évasion WAF, retries : 2, timeout : 15 s, delay : 150 ms)
  • sarifscan.sh - Génère une sortie au format SARIF pour l'intégration CI/CD
  • inaccessiblescan.sh - Relance un scan sur les URL précédemment inaccessibles avec des tentatives et délais d'expiration prudents
  • scan-and-report.sh - Exécute le scan et affiche l'emplacement du dernier rapport auto-enregistré
  • split-by-host.sh - Divise la liste d'URL en fichiers par hôte et peut éventuellement les scanner en parallèle

Exemples d'utilisation```bash

Quick scan from file

./ScanScripts/quickscan.sh targets/cve-regression-real-public.txt

Deep scan from stdin

cat targets/cve-regression-real-public.txt | ./ScanScripts/deepscan.sh --stdin

Generate baseline

./ScanScripts/baselinescan.sh targets/cve-regression-real-public.txt

Compare against baseline

./ScanScripts/diffscan.sh targets/cve-regression-real-public.txt baseline.ndjson

Authenticated scan

./ScanScripts/authscan.sh targets/cve-regression-real-public.txt --auth-flow auth.json

SARIF output for GitHub Code Scanning

./ScanScripts/sarifscan.sh targets/cve-regression-real-public.txt

Split by host and scan in parallel

./ScanScripts/split-by-host.sh targets/cve-regression-real-public.txt --scan-cmd ./ScanScripts/quickscan.sh --jobs 4

root@kitploit:~
Tous les scripts wrapper sauf `split-by-host.sh` prennent en charge `--stdin` et les indicateurs ApiHunter en fin de ligne.

## Stratégie de test

Les tests d'ApiHunter sont répartis par intention :

- **Tests unitaires** (`tests/*_scanner.rs`, tests du parseur/config) : logique du scanner et cas limites.
- **Tests d'intégration** (`tests/integration_runner.rs`, comportement de démarrage/CLI) : orchestration et câblage d'exécution.
- **Tests de régression sur données de référence** (`tests/cve_templates_real_data.rs`, `tests/cve_templates_upstream_parity.rs`) : rejouent de vrais payloads et comparent avec les modèles amont épinglés.
- **Tests avec serveur simulé** (plusieurs suites de scanners) : vérifications du comportement déterministe sans dépendre de cibles internet.
- **Vérifications sur cible réelle** : uniquement facultatives/manuelles (ne font pas partie du `cargo test` par défaut).

Consultez le [Guide de test](https://github.com/teycir/apihunter/blob/HEAD/docs/testing.md) dédié pour la matrice de tests complète et la carte de couverture.

Lancez les suites ciblées :```bash
cargo test --test cors_scanner
cargo test --test graphql_scanner
cargo test --test cve_templates_runtime_ext
cargo test --test integration_runner

Exécuter la validation complète :```bash cargo test

root@kitploit:~
Exécutez la passerelle d'intégration avec des données réelles (fixtures + suites ignorées live) :```bash
# Fixture-backed real payload regression suites
cargo test --test cve_templates_real_data --test cve_templates_upstream_parity --test cve_templates_runtime_ext

# Manual live internet integration suites (ignored by default)
cargo test --test live_vulnerable_apis --test live_real_world_targets -- --ignored

Les suites live utilisent des inventaires de cibles par défaut :

  • targets/vuln-api-regression-real-public.txt
  • targets/real-world-integration-public.txt

Vous pouvez les remplacer avec :

  • APIHUNTER_LIVE_VULN_TARGET_FILE ou APIHUNTER_LIVE_VULN_TARGETS
  • APIHUNTER_LIVE_REAL_TARGET_FILE ou APIHUNTER_LIVE_REAL_TARGETS

Documentation

La documentation complète est disponible dans docs/. Commencez par :

  • Index de la documentation
  • Guide de l'application de bureau
  • Architecture
  • Configuration
  • Flux d'authentification
  • Guide de test
  • Runbook des opérations
  • Scanners
  • Constats et remédiation
  • Politique de sécurité
  • HOWTO
  • Mode Triage
  • Mode Enrich

Roadmap

Terminé (v0.7.0) : Refonte de l'interface Glass UI, persistance des scans (stockage du dernier scan), tableau de bord d'analyse des résultats (carte de chaleur de sévérité, carte de la pire cible, efficacité du scan, couverture des scanners, répartition de la sévérité des contrôles), flux de promotion Enrich → Deep-Scan, mode Triage/renseignement sur les menaces, configuration de la découverte, scanners WebSocket/Mass-Assignment/OAuth/Rate-Limit/CVE, importateur Nuclei étendu, image Docker
Ensuite : découpage du composant App.tsx, tampon circulaire de l'historique des scans, tiroir de détail des constats, export de rapports HTML/PDF, action native GitHub Actions, temps par cible dans la progression en direct

Installation

Installation CLI

Nécessite Rust stable (testé sur 1.76+).```bash git clone https://github.com/Teycir/ApiHunter cd ApiHunter cargo build --release

root@kitploit:~
### Artefacts de version précompilés

Les versions taguées (`v*`) publient des binaires `apihunter` précompilés pour :

- Linux (`x86_64-unknown-linux-gnu`, `aarch64-unknown-linux-gnu`)
- macOS (`x86_64-apple-darwin`)
- Windows (`x86_64-pc-windows-msvc`)

Chaque version publie également des artefacts de chaîne d'approvisionnement :

- Fichiers de somme de contrôle SHA256 (`*.sha256`)
- Matériaux de signature sans clé Sigstore (`*.sig`, `*.pem`, `*.sigstore.json`)
- SBOM JSON SPDX (`apihunter-release-assets-sbom.spdx.json`)
- Attestations d'artefacts GitHub (métadonnées d'attestation de provenance et de SBOM)

Téléchargez depuis [GitHub Releases](https://github.com/Teycir/ApiHunter/releases).

### Installation de l'application de bureau (Tauri + React)

Le code source de l'application de bureau se trouve dans `apps/desktop`.

Compilez et exécutez un binaire de bureau de production :```bash
cd apps/desktop
npm install
npm run tauri build
./src-tauri/target/release/apihunter-desktop

Pour le mode développement :```bash cd apps/desktop npm run tauri dev

root@kitploit:~
Installer une icône de lanceur Linux cliquable :```bash
cd apps/desktop
npm run desktop:install-icon

Fonctionnalités de l'application de bureau (en bref) :

  • Analyses multi-cibles (jusqu'à 3 000 cibles) avec saisie manuelle + import CSV (limite de 300 KiB)
  • Préréglages de configuration guidée : Quick Passive et Deep Active
  • Interface de progression en direct avec cartes de statut par cible
  • Contrôles complets du profil de scan (découverte/filtrage, nouvelles tentatives/délais d'attente, activation/désactivation des scanners)
  • Sections de scan repliables avec chevrons alignés à droite ; sous-sections volumineuses repliées par défaut
  • Bascule de diff approfondi des réponses pour le versionnage d'API et contrôle de la base de rappel OAST
  • Contrôles d'exécution avancés (proxy/en-têtes d'authentification/cookies, bascule TLS, options WAF/adaptatives/par hôte)
  • Tableau de bord d'analyse des résultats : carte de chaleur de sévérité, pire cible, efficacité du scan, couverture du scanner, répartition de la sévérité des vérifications, principaux chemins vulnérables, résumé par cible
  • Persistance de session : le dernier scan est automatiquement restauré au prochain lancement avec un badge d'horodatage
  • Panneau Enrich Mode : enrichissement threat-intel avec flux de promotion par hôte vers un scan approfondi
  • Export en un clic pour les bundles JSON par cible, NDJSON, SARIF, collection Insomnia et données Insomnia Runner```bash docker build -t apihunter:local . docker run --rm apihunter:local --help
root@kitploit:~
Lancez un scan à partir des fichiers de votre répertoire courant :```bash
docker run --rm -v "$PWD:/work" apihunter:local \
  --urls /work/targets/cve-regression-real-public.txt \
  --format ndjson \
  --output /work/results.ndjson

Référence CLI

*Vous devez fournir exactement un élément parmi --urls, --stdin, --har ou --collection.

Codes de sortie

Garde-fous de sécurité et juridiques

  • --proxy ne désactive pas la vérification TLS à lui seul. Les contrôles de certificats restent activés sauf si --danger-accept-invalid-certs est défini explicitement.
  • --danger-accept-invalid-certs est destiné uniquement à une utilisation contrôlée en laboratoire/débogage. ApiHunter émet un avertissement explicite à l'exécution lorsque cette option est activée.
  • --waf-evasion et les sondes actives peuvent déclencher des alertes IDS/WAF. À exécuter uniquement avec une autorisation écrite explicite et dans les fenêtres de test convenues.
  • Pour les vérifications en CI ou proches de la production, privilégiez d'abord le mode passif, puis limitez les vérifications actives aux cibles approuvées.

Projets associés

ApiHunter fait partie d'une boîte à outils complémentaire de tests de sécurité :

  • Excalibur - Extension de navigateur pour capturer le trafic API et exporter des fichiers HAR avec les cookies de session. À utiliser avec ApiHunter via les options --har et --session-file.
  • BurpAPIsecuritysuite - Extension Burp Suite pour les tests interactifs de sécurité API. Complète le scan automatisé d'ApiHunter avec des flux de travail de test manuel.

Flux de travail : Capture du trafic avec Excalibur → Baseline automatisé avec ApiHunter → Tests manuels approfondis avec BurpAPIsecuritysuite

À propos

Auteur : Teycir Ben Soltane
E-mail : [email protected]
Site web : teycirbensoltane.tn

FAQ

Q : Pourquoi ApiHunter plutôt que Nuclei/ZAP/Burp ?
R : Conception orientée API, détection SPA, diff de baseline, IDOR à 3 niveaux, secrets sensibles au contexte. Complémentaire à Nuclei (couverture CVE) et ZAP/Burp (tests manuels).

Q : Sûr pour la production ?
R : Oui. Utilisez --delay-ms et une --concurrency plus faible. Essayez quickscan.sh.

Q : Scans authentifiés ?
R : --auth-bearer, --auth-basic ou --auth-flow. Pour l'IDOR : --auth-flow-b.

Q : Comparaison de vitesse (1000 endpoints) ?
Cela dépend de la latence des endpoints, des nouvelles tentatives, du comportement de la cible et des vérifications activées. Utilisez --concurrency, --delay-ms et --active-checks pour ajuster le débit par rapport à l'impact.

Q : Scan lent ?
Augmentez --concurrency (défaut : 20), réduisez --delay-ms (défaut : 150 ms), activez --adaptive-concurrency.

Q : Formats de sortie ?
pretty (défaut), ndjson (flux continu), sarif (intégration CI).

Q : Intégration CI/CD ?```bash ./target/release/apihunter --urls targets/cve-regression-real-public.txt --fail-on medium --format sarif --output results.sarif

root@kitploit:~
**Q : Diffing de référence ?**```bash
./target/release/apihunter --urls targets/cve-regression-real-public.txt --format ndjson --output baseline.ndjson
./target/release/apihunter --urls targets/cve-regression-real-public.txt --baseline baseline.ndjson --format ndjson

Q : Vérifications passives ou actives ?
Passives (par défaut) : analyser les réponses. Actives (--active-checks) : envoyer des requêtes conçues (IDOR, mass-assignment, OAuth, rate-limit, sondes CVE).

Q : Test CORS ?
Génération dynamique d'origines : null, https://evil.com, https://<target>.evil.com, https://evil<target>. Teste les contournements regex lorsque l'origine est reflétée.

Q : Détection IDOR ?
3 niveaux : (1) récupération non authentifiée, (2) énumération d'ID (±2), (3) inter-utilisateurs (--auth-flow-b).

Q : Détection de secrets ?
Clés AWS/Google/GitHub/Slack/Stripe, jetons bearer, URL de bases de données, clés privées. Validation contextuelle.

Q : Cookies ?
--cookies "session=abc", --session-file excalibur.json, ou --auth-flow login.json.

Q : Proxy ?
--proxy http://proxy.corp.com:8080

Q : Journalisation de débogage ?
RUST_LOG=debug ./target/release/apihunter --urls targets/cve-regression-real-public.txt

Q : Concurrence adaptative ?
AIMD : augmente de 1 toutes les 5 secondes, divise par deux en cas d'erreurs (429/503/timeouts). Activer avec --adaptive-concurrency.

Q : Désactiver les scanners ?
--no-cors, --no-csp, --no-graphql, --no-api-security, --no-jwt, --no-openapi, --no-api-versioning, --no-mass-assignment, --no-oauth-oidc, --no-rate-limit, --no-cve-templates, --no-websocket.

Q : ApiHunter est-il furtif ?
R : Oui. Fonctionnalités : rotation de UA parmi plus de 100 navigateurs réels (assets/user_agents.txt), délais aléatoires avec jitter, limitation de débit par hôte, repli adaptatif sur 429/503, aucune empreinte de scanner dans les en-têtes, logique de nouvelle tentative exponentielle, injection d'en-têtes personnalisés. Activer avec --waf-evasion.

Q : Comment fonctionne l'évasion WAF ?
R : Fait automatiquement tourner les User-Agents depuis un pool choisi, ajoute un jitter aléatoire aux délais, impose un rythme par hôte (pas de rafales globales), applique un repli exponentiel sur les limites de débit, et permet l'injection d'en-têtes personnalisés pour se fondre dans le trafic légitime. Aucune chaîne "scanner" dans les en-têtes par défaut.

Voir CONTRIBUTING.md pour les directives de développement.

License

MIT

Télécharger l’outil
OptionDéfautDescription
--urlsrequired*Chemin vers un fichier d'URL délimitées par des sauts de ligne
--stdinoffLire les URL délimitées par des sauts de ligne depuis stdin
--haroffImporter les URL de requêtes API probables depuis un HAR (log.entries[].request.url)
--collectionoffImporter les URL de requêtes API probables depuis un export JSON de collection Postman/Insomnia
--outputstdoutÉcrire les résultats dans un fichier au lieu de stdout
--formatprettyFormat de sortie : pretty, ndjson ou sarif
--streamoffDiffuser les résultats NDJSON en continu à mesure qu'ils arrivent
--baselinenoneBaseline NDJSON pour les résultats de type diff uniquement
--quietoffSupprimer la sortie stdout non liée aux erreurs
--summaryoffAfficher le résumé même en mode silencieux
--no-auto-reportoffIgnorer l'écriture des rapports automatiques locaux sous ~/Documents/ApiHunterReports
--min-severityinfoFiltrer les résultats en dessous de ce niveau
--fail-onmediumQuitter avec un code de sortie non nul à ce niveau de sévérité ou au-dessus
--concurrency20Nombre maximal de requêtes en cours
--max-endpoints50Limiter les endpoints scannés par site (0 = illimité)
--delay-ms150Délai minimal entre les requêtes par hôte
--retries1Nombre de nouvelles tentatives en cas d'échec transitoire
--timeout-secs8Délai d'expiration par requête en secondes
--no-filteroffIgnorer le pré-filtrage des URL inaccessibles
--filter-timeout3Délai d'expiration pour le pré-contrôle d'accessibilité (secondes)
--no-discoveryoffIgnorer la découverte d'endpoints et ne scanner que les URL de départ fournies
--waf-evasionoffActiver les heuristiques de contournement WAF
--user-agentsnoneListe d'UA séparés par des virgules (implique le contournement WAF)
--headersnoneEn-têtes de requête supplémentaires (p. ex. Authorization: Bearer ...)
--cookiesnoneCookies séparés par des virgules (p. ex. session=abc,theme=dark)
--auth-bearernoneAjouter Authorization: Bearer <token>
--auth-basicnoneAjouter une authentification HTTP Basic (user:pass)
--auth-flownoneFichier JSON de flux d'authentification (connexion avant le scan)
--auth-flow-bnoneDeuxième flux d'authentification pour les vérifications IDOR entre utilisateurs
--unauth-strip-headersnoneNoms d'en-têtes supplémentaires à retirer pour les sondes non authentifiées
--session-filenoneCharger/enregistrer les cookies depuis le JSON de session Excalibur ({"hosts": {...}})
--proxynoneURL du proxy HTTP/HTTPS
--danger-accept-invalid-certsoffIgnorer la validation des certificats TLS
--active-checksoffActiver les sondes actives (potentiellement invasives)
--dry-runoffSimuler les vérifications actives (rapporter les sondes prévues sans envoyer de requêtes de mutation)
--response-diff-deepoffActiver des sondes de variantes de diff de réponse plus approfondies dans les vérifications de versionnage d'API
--per-host-clientsoffUtiliser des pools de clients HTTP par hôte
--adaptive-concurrencyoffConcurrence adaptative (AIMD)
--no-corsoffDésactiver le scanner CORS
--no-cspoffDésactiver le scanner CSP
--no-graphqloffDésactiver le scanner GraphQL
--no-api-securityoffDésactiver le scanner de sécurité API
--no-jwtoffDésactiver le scanner JWT
--no-openapioffDésactiver le scanner OpenAPI
--no-api-versioningoffDésactiver le scanner de versionnage d'API
--no-grpc-protobufoffDésactiver le scanner gRPC/Protobuf
--no-mass-assignmentoffDésactiver le scanner Mass Assignment (vérifications actives)
--no-oauth-oidcoffDésactiver le scanner OAuth/OIDC (vérifications actives)
--no-rate-limitoffDésactiver le scanner Rate Limit (vérifications actives)
--no-cve-templatesoffDésactiver le scanner de modèles CVE (vérifications actives)
--no-websocketoffDésactiver le scanner WebSocket (vérifications actives)
CodeSignification
0Aucun résultat au niveau ou au-dessus du seuil --fail-on et aucune erreur
1Un ou plusieurs résultats au niveau ou au-dessus du seuil --fail-on
2Un ou plusieurs scanners ont rencontré des erreurs
3À la fois des résultats et des erreurs