SecOps #251
open[Sécurité] Vulnérabilité de code : server/Dockerfile:19 (dockerfile.security.missing-user.missing-user)
0%
Description
**Sévérité** : HIGH
**Source** : Semgrep
`vuln-high`
**Emplacement** : server/Dockerfile:19
**Règle** : dockerfile.security.missing-user.missing-user
By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'.
### Extrait de code
```
requires login
```
### Lien CVE
https://owasp.org/Top10/A04_2021-Insecure_Design
### Recommandations
USER non-root
CMD ["node", "dist/main.js"]
RA Updated by Redmine Admin about 1 month ago
**Reporté (analyse SecOps 2026-06-23).** Passer le conteneur API en utilisateur non-root casserait l'écriture des fichiers : `UPLOAD_DIR=/data/uploads` est un **volume Docker nommé** (`scobby_uploads`) appartenant à root sur preprod/prod existants → un process non-root ne pourrait plus y écrire (contrats/PDF/uploads).
**Plan recommandé (change infra dédié)** : entrypoint démarrant en root → `chown -R <user> /data/uploads` → bascule non-root via `gosu`/`setpriv` avant `node dist/main.js` ; OU chown unique des volumes existants côté hôte + `USER` dans le Dockerfile. À tester sur preprod (génération PDF = écriture uploads). Non inclus dans le lot Semgrep #64 pour ne pas risquer le stockage prod.
RA Updated by Redmine Admin about 1 month ago
- Status changed from Submitted to In development
- branch set to fix/secops-dockerfile-nonroot
- pr_url set to https://github.com/Scobby-organisation/scobby/pull/105
Corrigé et fusionné sur `dev` (PR #105, CI verte). Conteneur API en non-root (`USER pwuser`). ⚠️ Déploiement preprod/prod : un volume `scobby_uploads` existant reste root ; chown one-shot requis (voir PR).
RA Updated by Redmine Admin about 1 month ago
- Status changed from In development to Preprod
- deploy_status set to deployed
- preprod_url set to https://preprod-scobby.omdev.tech
- deployed_at set to 07/01/2026
Déployé sur preprod (#107). Vérifié en live : conteneur API tourne bien en non-root `pwuser` (uid 1001, `id` confirmé), 0 redémarrage, Nest démarré. Volume `scobby_uploads` réapproprié à pwuser (1001) — test d'écriture par pwuser OK. Uploads fonctionnels.
RA Updated by Redmine Admin about 1 month ago
- Status changed from Preprod to Ready to ship
Fusionné sur master (#109) et déployé en PROD le 2026-07-01 : API en non-root pwuser (uid 1001), volume uploads chowné, écriture OK. ⚠️ Suivi #110 (fix/secops-dockerfile-prisma-migrate-perms) requis pour que `prisma migrate deploy` passe en non-root aux prochains déploiements (a dû être lancé en root manuellement lors de cette bascule).