ZAP est un scanner de sécurité pour des applications web, on m’a chargé de le mettre en place au boulot dans la chaîne d’intégration.

Pour des scénarios simples ça se fait assez facilement, mais dès qu’on veut utiliser l’outil à pleine puissance la documentation est juste manquante.

Là dans notre chaîne on voudrait faire en sorte que ZAP utilise nos tests selenium pour apprendre la structure de notre application, une fois fait ZAP devrait lancer ses scans puis générer un rapport qui sera envoyé par mail, dans notre slack…

Ça à l’air simple sur le papier mais pour gitlab y’a pas de template ou quoi faut tout réimplémenter et c’est pas simple parce que je me suis heurté à des limitations de gitlab.

Mon premier instinct aurait été d’implémenter ZAP dans un job qui ressemblerait à ça:

zap-vulnerability-test:
  stage: test
  when: manual
  image: big-business-image-containing-zap
  tags:
    - php
  variables:
    ZAP_PLAN_AUTHORITY: "http://10.X.X.X"
    ZAP_PLAN_AUTHORITY_REPORT: "10.X.X.X"
  parallel: 5
  services:
    - selenium-standalone/firefox
    - postgresql
    - name: ghcr.io/zaproxy/zaproxy:2.14.0
      alias: zap
      command: [
        "zap.sh",
        "-cmd",
        "-silent",
        "-host",
        "0.0.0.0",
        "-port",
        "8080",
        "-configfile",
        "config-zap",
        "-autorun",
        "plan.yml"
      ]
  script:
    - # lancer votre commande pour les tests selenium
    - # Une fois que tous les tests sont passé signaler à ZAP qu'il peut lancer les tests

Et là je suis bloqué parce que vu qu’on a plein de tests selenium, je les fait tourner en parallèle, je peux pas utiliser le keyword after_script pour dire que ok tous les tests sont passés, ça marche que pour chaque groupe individuel de test alors qu’on veut que ZAP continue son travail après que l’intégralité des tests soit passé.

Et il est hors de question de lancer les 300 tests dans un seul job donc je vois pas trop de solution à part ne pas utiliser ZAP en tant que service mais plutot le déployer dans un environnement dédié.

J’ai envoyé toute une série de mails https://groups.google.com/g/zaproxy-users/c/TKe1_OrsqOU qui reprend tout ça plus en détail mais pour l’instant pas de réponse et toujours aucun exemple :(

N’hésitez pas à me contacter si vous avez déjà eus affaire à ce genre de cas d’utilisation.