From ea8f9d0a3a0813989f6ff79daf81e9fec2fb67f5 Mon Sep 17 00:00:00 2001 From: Dorian Date: Tue, 22 Sep 2026 14:57:29 +0200 Subject: [PATCH] fix(ci): applique aussi le chmod du fichier d'authentification DAST via sudo --- .github/workflows/dast.yml | 8 +++++++- docs/architecture/50-cicd.md | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dast.yml b/.github/workflows/dast.yml index 018fb44..095781e 100644 --- a/.github/workflows/dast.yml +++ b/.github/workflows/dast.yml @@ -192,8 +192,14 @@ jobs: # ZAP échoue alors dès le lancement (« File not readable: /zap/auth.conf »), et # `zap-api-scan.py` attend `-T` minutes complètes avant d'abandonner : dix minutes qui # ressemblent à un scan actif, pour un daemon mort depuis le début. + # + # Piège vécu (numéro deux) : une fois le fichier passé à l'uid 1000 par `sudo chown`, + # l'utilisateur du runner n'en est plus propriétaire et un `chmod` sans `sudo` échoue + # (« Operation not permitted »). Avec le `-e` implicite de bash sur les étapes GitHub + # Actions, cette erreur arrêtait toute l'étape avant même `docker run` : scan « réussi » + # en une fraction de seconde, sans le moindre journal ni rapport produit. sudo chown 1000:1000 "$RUNNER_TEMP/zap-auth.conf" - chmod 644 "$RUNNER_TEMP/zap-auth.conf" + sudo chmod 644 "$RUNNER_TEMP/zap-auth.conf" docker run --name zap --network host \ -v "$PWD/zap-out:/zap/wrk:rw" \ -v "$RUNNER_TEMP/zap-auth.conf:/zap/auth.conf:ro" \ diff --git a/docs/architecture/50-cicd.md b/docs/architecture/50-cicd.md index be7b711..0e323b8 100644 --- a/docs/architecture/50-cicd.md +++ b/docs/architecture/50-cicd.md @@ -313,6 +313,20 @@ Décisions à savoir défendre : `-config`/`-configfile` chargé à un niveau visible sans `-d` : les copies de `zap.log` et `zap-stdout.log` publiées en artefact sont donc caviardées avant publication. +**Deux pièges d'autorisation** sur ce fichier de configuration (`zap-auth.conf`), tous les deux +propres au montage bind Docker : le conteneur y lit avec son propre uid (1000), distinct de celui +du runner qui l'a écrit, sans remappage automatique. + +- Un `chmod 600` seul rend le fichier illisible pour le conteneur (« File not readable : + /zap/auth.conf »). ZAP échoue dès le lancement, mais `zap-api-scan.py` attend les `-T` minutes + complètes avant d'abandonner : dix minutes qui ressemblent à un scan actif, pour un daemon mort + depuis le début. Corrigé par `sudo chown 1000:1000` du fichier avant de le passer à `644`. +- Ce `chown` déplace la propriété du fichier hors de l'utilisateur du runner : un `chmod` qui + suit sans `sudo` échoue alors (« Operation not permitted »), et le `-e` implicite des étapes + bash de GitHub Actions arrête toute l'étape avant même `docker run` — un scan « réussi » en une + fraction de seconde, sans le moindre journal ni rapport produit. Les deux commandes doivent + passer par `sudo`. + Les routes d'authentification qui changent l'état du compte (`login`, `password`, `logout-all`, `forgot-password`, `reset-password`) sont exclues du scan actif : elles y déclencheraient la limitation de débit et fermeraient les sessions sans rien apprendre de plus.