security: HEALTH_TOKEN injecte en build ARG par Coolify, fuite en clair dans les logs de deploiement #4
Labels
No labels
source:analyste
source:defenseur
source:human
source:medic
status:approved
status:blocked
status:in-progress
status:needs-fix
status:ready
status:review
status:triage
type:bug
type:feature
type:infra
type:refactor
type:schema
type:security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: maximus/vps-health-api#4
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Pendant l'incident du 2026-04-28 (panne des cards Sante VPS + Defenseurs sur
lacompagniemaximus.com/admin), inspection des logs de deploiement Coolify (application_deployment_queues.logs) :HEALTH_TOKENest stocke en clair dans le Dockerfile genere par Coolify et donc dans la DB Coolify.Extrait observe (deployment_uuid
9fe696fc-5076-4c19-8a11-ead431526058) :Coolify redacte automatiquement les noms qui matchent un pattern (
API_KEY,SECRET, etc.) mais pasHEALTH_TOKEN. Le secret apparait donc en clair :application_deployment_queues.logs(DB Coolify)Cause racine
Cote Coolify,
HEALTH_TOKENais_buildtime=trueETis_runtime=truedansenvironment_variables. La variable est donc passee comme build ARG en plus du runtime env. Orindex.jsne litHEALTH_TOKENqu'au runtime —is_buildtimen'est pas necessaire.Decouvertes analyse (2026-05-03)
Verification du code vps-health-api : conforme runtime-only, bug 100% dans Coolify.
vps-health-api/index.js:8:TOKEN = process.env.HEALTH_TOKENlu uniquement au demarrageDockerfile: zeroARG, zeroENVdeclarepackage.json: pas de build step (scripts.start = "node index.js")maximus-api/Dockerfile: zero ARGfeedback-api/Dockerfile: zero ARGla-suite-booking/Dockerfile:ARG NEXT_PUBLIC_*uniquement (publics par design Next.js)simpl-liste/web/Dockerfile: zero ARGla-compagnie-maximus/docs/coolify-ops.mda deja une section runtime-only secrets (commit7044c14, avril 2026) mais reference uniquementmaximus-api. A etendre pour generaliser.Travail a faire (1 issue, 4 cases)
HEALTH_TOKENetPAYPERQ_API_KEY->is_buildtime=false(PATCHenvironment_variablessur l'application Coolify, ou via UI)HEALTH_TOKEN, mettre a jour cote Coolify ET Vercel (VPS_HEALTH_TOKEN) simultanement — mismatch = panne admin cards (cf. incident 2026-04-28 qui a dure 8 jours)DELETE FROM application_deployment_queues WHERE created_at < <date-rotation> AND application_id = <vps-health-api-id>(ou tronquer la table entiere si pas de retention necessaire). Idem cote backups Coolify si retention longue.la-compagnie-maximus/docs/coolify-ops.md— generaliser le pattern runtime-only a toute app dont le secret est lu uniquement aprocess.env.*au demarrage. Ajoutervps-health-apia l'exemple.Fichiers concernes
~/claude-code/la-compagnie-maximus/docs/coolify-ops.md— extension section secrets~/claude-code/vps-health-api/.env.example— note inline "MUST be runtime-only on Coolify, never buildtime ARG"~/claude-code/vps-health-api/CLAUDE.md— section Auth, ajouter avertissement runtime-onlySurface de test
grep HEALTH_TOKENdans les nouveaux logs Coolify -> doit etre absent ou<REDACTED>Criteres d'acceptation
HEALTH_TOKENabsent en clair dansapplication_deployment_queues.logsapres prochain deploylacompagniemaximus.com/admintoujours fonctionnelles apres rotation (test bout-en-bout)coolify-ops.mdetendu, lu et valideComplexite
Simple — ~30 min total, aucun code a ecrire, mais coordination Vercel <-> Coolify obligatoire pour la rotation (sinon les cards retombent en panne).
Notes
HEALTH_TOKEN,PAYPERQ_API_KEY) est un autre sujet ; on s'en passe en supprimantis_buildtime.