Scanner DAST orienté preuves en Go qui explore les applications web et les API, puis exécute des vérifications adaptatives de SQLi, XSS, RCE, SSRF et d'authentification avec des preuves rejouables.
Scanner de sécurité web avancé
Découvrez les endpoints. Testez les applications web. Inspectez les preuves.
Installation · Utilisation · Fonctionnement · Profils · Couverture · Rapports · Soutien · Fonctionnalités · Journal des modifications
AKCA est un scanner DAST (Dynamic Application Security Testing) open source, orienté preuves, écrit en Go. Il combine le crawling HTTP et assisté par navigateur, l'analyse JavaScript, les imports d'API, les tests actifs adaptatifs, l'inspection passive et les preuves rejouables dans un seul flux de travail en ligne de commande.
De nombreux scanners explorent une application puis envoient un large ensemble de charges utiles à chaque endpoint découvert. Cette stratégie peut générer un trafic inutile, déclencher des systèmes défensifs et produire des signaux faibles nécessitant un tri manuel conséquent. AKCA adopte une approche plus contextuelle : il commence par apprendre à connaître la cible, modélise la surface d'attaque découverte, puis sélectionne les tests en fonction de la pile technologique, des paramètres, de l'état d'authentification, du comportement du WAF et des capacités de vérification disponibles.
AKCA est conçu pour :
L'objectif n'est pas d'épuiser ou de submerger la cible. Il s'agit de trouver de véritables faiblesses avec des requêtes délibérées et des preuves utiles.
AKCA ne prétend pas atteindre la parité de fonctionnalités ou de détection avec des plateformes commerciales matures telles qu'Acunetix, Invicti/Netsparker ou Burp Suite Professional. Ces produits sont développés par des équipes expérimentées sur de nombreuses années. AKCA est maintenu indépendamment par un seul développeur sur son temps personnel disponible, inspiré par des outils de sécurité établis et façonné par des idées originales et les retours de la communauté. La priorité actuelle est un scanner simple, utile et transparent. Une interface graphique est prévue lorsque le moteur sera suffisamment stable et fiable.
Session de scan AKCA v0.2.4 avec état du moteur en direct, télémétrie des ressources et vulnérabilités confirmées.
Nécessite Go 1.25 ou version ultérieure.```bash go install github.com/akha-security/akca/engine/cmd/akca@latest akca --version
<details>
<summary>Commande introuvable ? Configurez votre PATH.</summary>
Pour l'installation Go par défaut, ajoutez le répertoire des binaires Go au `PATH` de votre terminal actuel.
**Linux / macOS**```bash
export PATH="$(go env GOPATH)/bin:$PATH"
Ajoutez cette ligne à votre configuration de shell pour la conserver entre les sessions.
Windows PowerShell```powershell $env:Path += ";$(go env GOPATH)\bin"
Pour les sessions futures, ajoutez le même répertoire à votre variable d'environnement `Path` utilisateur. Si vous avez configuré `GOBIN`, utilisez ce répertoire à la place.
</details>
### Binaires précompilés
Téléchargez votre build depuis [GitHub Releases](https://github.com/akha-security/akca/releases/latest). Les releases incluent `SHA256SUMS.txt` pour la vérification des sommes de contrôle.
| Plateforme | Architecture | Asset |
| --- | --- | --- |
| Linux | x64 / ARM64 | `akca-linux-amd64` / `akca-linux-arm64` |
| macOS | Intel / Apple Silicon | `akca-darwin-amd64` / `akca-darwin-arm64` |
| Windows | x64 | `akca-windows-amd64.exe` |
Sous Linux ou macOS, rendez le fichier téléchargé exécutable. Pour Linux x64 :```bash
chmod +x akca-linux-amd64
./akca-linux-amd64 --help
Sous Windows, renommez le fichier téléchargé en akca.exe et exécutez .\akca.exe --help dans PowerShell. Les exemples ci-dessous supposent que akca est disponible dans votre PATH.
Les vérifications via navigateur nécessitent Chrome, Chromium ou Edge.
N'utilisez AKCA que sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation de test. Remplacez l'URL d'exemple par votre cible autorisée.
akca -u https://example.com
Le profil par défaut est `full`. Pour enregistrer un rapport HTML :```bash
akca -u https://example.com -f html -o report.html
Exécutez des vérifications d'injection SQL, XSS et d'injection côté serveur, y compris SSTI :```bash akca -u https://example.com -m sql,xss,rce
Exécuter les vérifications passives :```bash
akca -u https://example.com -m passive
Les scans passifs envoient tout de même des requêtes pour la découverte et l'inspection.
Fournissez un cookie de session :```bash akca -u https://example.com -c "session=YOUR_SESSION_COOKIE"
Ou un en-tête d'autorisation :```bash
akca -u https://example.com -H "Authorization: Bearer YOUR_TOKEN"
Certaines vérifications d'autorisation nécessitent des identités supplémentaires ou une configuration d'état au-delà d'une seule session.
akca -u https://api.example.com --api-spec ./openapi.yaml -m api
Discovery prend en charge les entrées OpenAPI/Swagger, RAML, Postman, HAR, GraphQL, WSDL, protobuf et AsyncAPI, y compris les bundles ZIP pris en charge. La couverture des tests dépend du protocole et de l'opération importés.
### Inspecter le trafic via un proxy```bash
akca -u https://example.com -p http://127.0.0.1:8080
Exécutez akca --help pour toutes les options disponibles.
Utilisez akca -h pour une aide quotidienne concise, ou akca --help pour la référence complète des options. Les cibles de scan doivent être fournies explicitement avec -u ou --url.
Sélectionnez un profil avec -m, ou combinez-en plusieurs avec des virgules.
| Profil | Vérifications |
|---|---|
full | Tous les modules actifs et passifs activés ; la valeur par défaut |
sql | Injection SQL et NoSQL |
xss | XSS réfléchi, stocké, DOM et aveugle ; vérifications côté client associées |
rce | Injection de commandes, SSTI, désérialisation et vérifications associées |
api | Exposition d'API, BOLA/IDOR, BFLA, mass assignment et vérifications de jetons |
graphql | Vérifications de schéma et d'opérations GraphQL |
ssrf | SSRF, XXE et vérifications hors bande associées |
auth | Authentification, autorisation, CSRF et vérifications de cookies/en-têtes |
passive | Métadonnées, TLS, en-têtes de sécurité, secrets et analyse de composants |
fuzz | Chemins, artefacts exposés, traversée et vérifications associées |
L'exécution dépend des points de terminaison découverts, de la configuration, des capacités de vérification disponibles et des limites de scan. Consultez FEATURES.md pour le guide complet des capacités.
AKCA utilise un pipeline par étapes afin que les vérifications ultérieures puissent bénéficier des informations apprises précédemment :
La couverture est explicite. Une cible ignorée, échouée, limitée par le budget ou inachevée est enregistrée comme couverture incomplète ; elle n'est pas silencieusement traitée comme un résultat de sécurité propre.
La liste suivante décrit les moteurs de découverte et les familles de tests de sécurité implémentés. Les vérifications individuelles ne s'exécutent que lorsque la surface découverte, le profil de scan, la configuration, la politique de sécurité et les prérequis de vérification les rendent applicables. Une capacité listée ne garantit pas que chaque variante d'une vulnérabilité sera détectée.
Définissez un budget total de requêtes et une durée maximale :```bash akca -u https://example.com --request-budget 5000 --time-budget 30m
Ou calculez le budget du module à partir des combinaisons URL/méthode découvertes :```bash
akca -u https://example.com --requests-per-target 200
AKCA répartit des budgets de modules bornés entre les modules, les URL et les paramètres. Les allocations inutilisées sont reportées sur les travaux ultérieurs. Un --request-budget positif est prioritaire sur --requests-per-target.
| Option | Objectif |
|---|---|
--request-budget 5000 | Plafonner le nombre total de requêtes, y compris la découverte, les tentatives et les redirections |
--requests-per-target 200 | Dériver le budget du module à partir des combinaisons URL/méthode découvertes |
--crawler-budget 1000 | Limiter les requêtes de découverte |
--time-budget 30m | Limiter la durée du scan |
--rate-limit 5 | Limiter les requêtes par seconde |
--concurrency 4 | Limiter les workers simultanés |
Par défaut, le scan du module n'a pas de quota de requêtes. Les interruptions de budget sont signalées comme couverture incomplète. Les cibles interrompues ne sont pas automatiquement reprises lorsque des travaux ultérieurs libèrent un budget inutilisé. Aucun réglage de budget ne garantit la détection de chaque vulnérabilité.
Les sous-domaines d'API/service liés sont en dehors du périmètre de cible par défaut. Pour inclure les sous-domaines liés sous la même racine :```bash akca -u https://www.example.com --include-linked-api-subdomains
### Pourquoi une analyse complète prend plus de temps
L'analyse complète par défaut d'AKCA est conçue autour de la couverture et de la qualité des preuves, et non du temps d'exécution le plus court possible. Son temps d'exécution n'est donc pas directement comparable à celui d'outils qui s'arrêtent après un simple crawl HTTP superficiel ou qui signalent une vulnérabilité à partir d'une seule différence de réponse.
Une exécution complète peut prendre plus de temps parce qu'AKCA :
- Maintient une session de navigateur pour les routes rendues côté client et inspecte le JavaScript, y compris les chunks d'application chargés paresseusement.
- Rejoue les résultats prometteurs avec des contrôles avant de les promouvoir en constats, ce qui réduit les faux positifs causés par des erreurs génériques, des pages instables et des réponses WAF.
- Effectue des vérifications tenant compte de l'identité, de l'état et des callbacks lorsqu'un module nécessite une preuve plus solide.
- Respecte le rythme de la cible, les tentatives, les budgets de requêtes et les fenêtres d'observation hors bande au lieu de considérer la vitesse comme le seul indicateur de succès.
La durée de l'analyse dépend également de la taille de l'application, de la latence des réponses, des flux d'authentification, des contrôles défensifs et du périmètre configuré. Pour un retour plus rapide, sélectionnez uniquement les modules pertinents avec `-m` ou appliquez des budgets explicites de crawl, de requêtes et de temps. N'augmentez le taux et la concurrence que lorsque la cible autorisée peut gérer en toute sécurité le trafic supplémentaire. Une analyse plus courte n'est pas nécessairement une analyse plus complète.
## Rapports
Choisissez un format de sortie avec `-f` et un chemin de fichier avec `-o` :```bash
akca -u https://example.com -f html -o report.html
Formats pris en charge : HTML, JSON, Markdown, CSV et SARIF. Chaque invocation démarre un nouveau scan.
Les rapports HTML sont autonomes et incluent le logo AKCA, des résumés des risques et de la gravité, des statistiques de vulnérabilités, des détails structurés sur les constats et des preuves HTTP dépliables. Les onglets de requête et de réponse prennent en charge une vue combinée, l'expansion du contenu complet et la copie. Lorsqu'un constat conserve une valeur de réponse correspondante, AKCA la met en évidence en jaune, ce qui vous aide à localiser une charge utile réfléchie ou un secret exposé. Les constats de secrets passifs conservent un extrait autour de la correspondance.
Selon le module, les constats incluent :
Les constats de timing, les en-têtes manquants et les callbacks externes peuvent ne comporter aucun texte de réponse à mettre en évidence. Leur contexte de vérification fournit les preuves pertinentes.
Lorsque le scanner a stocké une transaction brute complète, le rapport la préserve exactement. Les preuves plus anciennes ou uniquement structurées sont rendues dans une disposition HTTP conventionnelle de style Burp avec une ligne de requête, des en-têtes ordonnés, un séparateur en-tête/corps et des phrases de raison de réponse HTTP standard. Si la limite de capture du transport a tronqué une réponse, le rapport le signale explicitement ; il ne présente jamais la partie stockée comme la réponse complète indisponible.
Rejouer un constat stocké :```bash akca replay --finding 42
Les rapports masquent les identifiants reconnus par défaut. Les preuves brutes stockées sont conservées pour rejeu. Définissez `redact_reports` sur `false` dans la configuration de scan, ou utilisez `redact=false` sur l'API de rapport, uniquement lorsque des exports bruts sont nécessaires. Examinez les rapports avant de les partager : le masquage automatique ne peut pas reconnaître tous les secrets spécifiques à une application.
### Configuration de l'exploration et des preuves
Le crawler conserve une session de navigateur tout au long de chaque phase d'exploration, y compris les cookies et le stockage du navigateur. Il explore les onglets explicites hors formulaire et les panneaux extensibles ; il ne remplit ni ne soumet automatiquement les formulaires. Les requêtes du navigateur obéissent toujours au périmètre et aux budgets de requêtes. Pour les dépendances statiques tierces requises, configurez les noms d'hôtes exacts séparément :```json
{
"browser_resource_domains": ["cdn.example.com"],
"redact_reports": true
}
Cela autorise uniquement les requêtes GET/HEAD de scripts, feuilles de style, images, polices et médias vers ces hôtes, en supprimant les identifiants et les en-têtes personnalisés. Cela n'ajoute pas ces hôtes à la portée de scan active et n'autorise pas les appels API cross-origin. Les dépendances de navigateur bloquées produisent des événements de lacune de couverture.
Les URL découvertes sont conservées même lorsqu'elles ne peuvent pas être visitées. Un crawl qui épuise son budget avec du travail en file d'attente produit un scan partiel et un code de sortie CLI non nul. Les messages de préflight des modules distinguent les politiques d'identité/d'état manquantes des capacités de vérification configurées.
Les vérifications de limitation de débit non configurées produisent des observations, et non des constats de vulnérabilité. Une preuve de seuil configurée nécessite également window_seconds ; si les requêtes ne rentrent pas dans cette fenêtre, la vérification n'est pas concluante. Le SQLi ne considère pas une réponse 400 ou une évaluation arithmétique seule comme une preuve. Les nouvelles erreurs SQL spécifiques à un fournisseur dans les réponses 400/422 doivent passer par le chemin de vérification par rejeu et contrôle.
Voir CHANGELOG.md pour les détails de version.
AKCA n'accepte pas de parrainages ni de dons personnels. Les contributions de code, les tests, la documentation et les retours réfléchis sont toujours les bienvenus.
Projeye maddi olarak destek olmak istiyorsanız, bana göndermek yerine Mehmetçik Vakfı, AFAD, Türk Kızılay veya Çocuk Hizmetleri Genel Müdürlüğü aracılığıyla desteklenen güvenilir sosyal yardım çalışmalarından birine bağış yapmanızı rica ediyorum. Mümkünse bağışınızı kızım Akça Aktaş adına yapın. Bağıştan sonra X üzerinden @caneraktas_ hesabına mesaj göndermeniz beni gerçekten çok mutlu eder.
Si vous souhaitez soutenir financièrement le projet, veuillez faire un don à une organisation caritative réputée de votre pays qui aide les enfants, les communautés touchées par des catastrophes, les anciens combattants ou les personnes dans le besoin urgent. Lorsque c'est possible, faites le don au nom de ma fille, Akça Aktaş. Vous êtes invité à le partager avec moi sur X à @caneraktas_ ; savoir que ce projet a inspiré un acte utile signifierait beaucoup pour moi.
Compiler depuis les sources :```bash git clone https://github.com/akha-security/akca.git cd akca/engine go build -buildvcs=false -trimpath -o ../akca ./cmd/akca
On Windows, utilisez `-o ../akca.exe` pour le nom de l'exécutable.
Lancez les vérifications depuis le répertoire `engine` :```bash
go test ./... -count=1
go vet ./...
go run ./cmd/akca benchmark --strict
Le benchmark mesure son corpus observé. Pour les détails d'implémentation et les limites de vérification, consultez le guide d'architecture et l'audit de vérification.
Les contributions sont les bienvenues. Lisez CONTRIBUTING.md et le Code de conduite avant d'ouvrir une pull request. Signalez les vulnérabilités dans AKCA via SECURITY.md.
Apache License 2.0 · Copyright 2026 AKHA Security contributors.