TECHNOLOGIES / ZAP by Checkmarx

ZAP : scanner DAST en blackbox

ZAP teste une application en fonctionnement, comme le ferait un attaquant : il explore, envoie des requêtes, et déduit les failles des réponses. C'est le volet dynamique de notre chaîne de sécurité, à côté de l'analyse statique du code.

Cette fiche documente nos quatre commandes de scan, l'environnement sur lequel elles tournent et le cadrage que nous posons avec chaque client avant le premier lancement.

PRÉSENTATION

Qu'est-ce que ZAP ?

ZAP, pour Zed Attack Proxy, est un scanner de vulnérabilités web open source, gratuit et sans version payante. Son principe est celui d'un proxy d'interception : il s'intercale entre le client et l'application, observe le trafic, et peut le rejouer en le modifiant.

Autour de ce socle, il embarque un crawler, un spider AJAX capable d'exécuter le JavaScript, un moteur de règles passives et actives, un générateur de rapports et un cadre d'automatisation piloté par un plan YAML. La version 2.17.0 est sortie en décembre 2025.

Créé en 2010 et longtemps connu sous le nom d'OWASP ZAP, le projet a quitté l'OWASP en 2023 pour la Software Security Project de la Linux Foundation, puis rejoint Checkmarx en septembre 2024. Il reste sous licence Apache 2, piloté par la même équipe cœur.

Schéma de fonctionnement de ZAP : le proxy s'intercale entre le navigateur et l'application

POURQUOI ZAP

Ce qui en fait notre scanner dynamique de référence

ZAP couvre à lui seul le test dynamique de nos applications. Il complète l'analyse statique dans notre démarche de qualité logicielle, et sert de base à nos audits techniques.

L'application telle qu'elle est servie

ZAP ne lit pas une ligne de code. Il envoie des requêtes et déduit les problèmes des réponses : en-têtes manquants, cookies mal configurés, erreur SQL renvoyée en clair. C'est le complément du SAST que font PHPStan et Psalm sur le code.

Un scan passif sans effet de bord

Le mode passif observe le trafic sans envoyer la moindre charge d'attaque. Il remonte l'essentiel des problèmes de configuration : CSP absente, HSTS manquant, X-Powered-By qui annonce la version de PHP. Il peut tourner n'importe où.

Un scan actif qui attaque vraiment

Le mode actif injecte, traverse, manipule les paramètres. C'est lui qui trouve les failles exploitables, et c'est pourquoi il ne tourne que sur un environnement jetable, jamais en production.

Des alertes qu'on peut juger

Chaque alerte porte un identifiant de règle stable, une page de documentation qui explique le risque et la correction, et un niveau de confiance annoncé par l'outil. Un faux positif s'écarte nommément, avec un motif écrit, et ne revient pas au scan suivant.

Crawl, API et chemins connus

Le spider et le spider AJAX découvrent la surface, y compris sur une application Vue.js. L'add-on OpenAPI importe un schéma d'API, Forced Browse sonde les chemins connus, OAST détecte les vulnérabilités aveugles. Un seul outil couvre ce terrain.

Docker et plan d'automatisation

L'image officielle exécute un plan YAML qui décrit chaque étape du scan. Rien à installer sur le poste, la même version pour toute l'équipe, et un rapport HTML autonome archivé en artefact de pipeline, comparable d'un scan à l'autre.

NIVEAUX D'INVASIVITÉ

Quatre commandes, du plus inoffensif au plus intrusif

Chaque niveau inclut le précédent. Le passif peut tourner partout, l'actif seulement sur un environnement dont on maîtrise les données. Le nom de la commande dit ce qu'elle fait.

Niveau passive

Passif

Rejoue les routes déclarées en GET et analyse les réponses. Aucun effet de bord.

  • Cible : les routes publiques listées dans targets.json
  • : partout, production comprise
  • Trouve : en-têtes, cookies, fuites d'information
Niveau crawl

Exploratoire

Ajoute le spider et le spider AJAX pour couvrir les assets et les appels XHR.

  • Cible : tout ce que le crawler atteint depuis les routes déclarées
  • : partout, aucun formulaire soumis
  • Trouve : la même chose, sur une surface complète
Niveau active

Actif

Soumet les formulaires et lance les attaques : injections, XSS, traversée.

  • Cible : formulaires et paramètres découverts
  • : environnement jetable uniquement
  • Trouve : les failles exploitables
Niveau ci

Actif, en CI

Le scan actif sur l'environnement d'intégration, déclenché par une pipeline planifiée.

  • Cible : l'environnement d'intégration, iso-production
  • : jamais sur le staging ni la production
  • Trouve : ce qui a changé depuis le dernier scan

Source : make/security.mk du standard-bundle .

NOTRE USAGE

Comment nous utilisons ZAP chez SmartBooster

La partie technique est la plus rapide : les commandes existent, l'image Docker est la même partout. L'essentiel du travail est dans le cadrage avec le client.

Quatre commandes, un fichier de cibles
make dast-blackbox-passive, crawl, active et ci. Le Makefile ne connaît aucune URL : les domaines, les routes à déclarer et celles à exclure vivent dans dast_scan/targets.json, propre à chaque projet, et le plan ZAP est généré à la volée.
Sur l'intégration, jamais en production
Le scan actif tourne sur un environnement d'intégration hébergé chez Clever Cloud, iso-production sur les versions et la configuration, alimenté par des données factices. Maildev intercepte les emails : aucune soumission d'un formulaire de contact ne déclanche l'envoi d'un mail réel.
Une pipeline planifiée GitLab
Le scan est déclenché par un Pipeline Schedule GitLab, hebdomadaire sur un projet en développement actif, mensuel sur une application stabilisée. Le rapport HTML est archivé en artefact et l'échec est notifié à l'équipe technique par email.
Un seuil de blocage cadré avec le client
High fait échouer la pipeline. Medium entre dans le lot courant de maintenance. Low et Informational restent au rapport. Ce réglage se discute : sur une application grand public, Medium peut devenir bloquant.
Rapport HTML généré par ZAP : alertes classées par sévérité avec le détail de chaque règle

FAQ

Les réponses à vos questions

Et si vous ne trouvez pas ce que vous cherchez, nous serons ravis de vous répondre en direct lors d'un rendez-vous entre humains !

Non, et la question revient souvent parce que le nom « OWASP ZAP » est resté dans les recherches. ZAP a été un projet OWASP de 2010 à 2023, a rejoint en août 2023 la Software Security Project de la Linux Foundation, puis Checkmarx en septembre 2024, qui emploie les responsables du projet. Il s'appelle désormais « ZAP by Checkmarx », reste open source sous licence Apache 2 et sous le contrôle de son équipe cœur. Rien n'a changé pour l'utilisateur.

L'analyse statique lit le code sans l'exécuter : PHPStan pour les types, Psalm pour les flux de données, composer audit pour les CVE. Le DAST teste l'application déployée depuis l'extérieur, sans voir le code. Les deux ne se remplacent pas : le SAST voit du code jamais atteint par le crawler, le DAST voit la configuration du serveur et le comportement réel. Une vulnérabilité observée en conditions réelles se priorise beaucoup plus facilement qu'un risque théorique.

Le scan passif, oui : il ne fait qu'observer des réponses à des requêtes GET. Le scan actif, jamais. Il soumet les formulaires, injecte des charges et déclenche des traitements. Nos commandes le réservent à un environnement jetable en local, ou à l'environnement d'intégration en CI. Sur un hébergement infogéré ou mutualisé, on prévient aussi l'hébergeur : vu depuis un pare-feu applicatif, un scan ressemble beaucoup à une attaque.

Oui, écrite, avec un périmètre et une fenêtre. Un scan actif est un test intrusif : l'article 323-1 du Code pénal punit l'accès frauduleux à un système, et l'article 323-7 punit la tentative des mêmes peines. Sur nos projets, l'accord du client fait partie du cadrage, avant le premier lancement, en même temps que le périmètre et le seuil de blocage.

En blackbox, ZAP n'a pas d'identifiants et ne voit que la partie publique. Sur un back-office Symfony, c'est-à-dire l'essentiel de ce que nous construisons, cela revient à scanner la page de connexion et les routes publiques. Nos scans sont en blackbox par défaut. Un scan authentifié (Greybox) peut couvrir le reste, avec un contexte ZAP et un compte de test, mais d'expérience le temps passé surce sujet serait mieux employé avec une prestation complémentaire de PenTest réel.

Oui, comme tout scanner. Sur l'analyse de ce site, quatre avertissements sur onze du premier rapport remontait des faux positifs dont une avec la plus haute sévérité. L'important n'est pas le taux d'erreur mais plutôt ce que l'on peut en faire : chaque alerte ZAP porte un identifiant stable et un niveau de confiance, on la qualifie à la main puis on l'écarte sur une URL précise avec un motif écrit ce qui permet de ne plus la voir remonter au prochain scan.

Nous l'avons évalué et mesuré sur notre propre build (Voir l'article complet sur notre blog). Ce que Nuclei trouve, nous le savons déjà : le fuzzing recoupe le scan actif de ZAP, la sonde de chemins connus recoupe Forced Browse, les CVE par empreinte recoupent composer audit et OSV-Scanner. Nuclei est fait pour regarder une cible de l'extérieur sans en connaître le code ce qui n'est pas notre cas sur nos projets. Nous l'utilisons à l'occasion sur un audit d'ancien projet php hors Symfony

Pour aller plus loin

Approfondir votre réflexion

Audit sécurité en blackbox avec ZAP : le guide DAST

Le principe du DAST, la prise en main de l'outil, l'automatisation en CI et le cadrage client, point par point.

Nuclei vs ZAP : faut-il deux scanners ?

Notre évaluation mesurée de Nuclei, et pourquoi il ne rentre pas dans notre chaîne à côté de ZAP.

TMA et maintenance évolutive

Les alertes Medium d'un scan planifié entrent dans le lot courant de maintenance, au lieu d'arriver en urgence.

Vous avez un projet ?

Contactez-nous pour savoir comment nous pouvons vous aider.