Project

General

Profile

Actions

SecOps #251

open
CD

[Sécurité] Vulnérabilité de code : server/Dockerfile:19 (dockerfile.security.missing-user.missing-user)

SecOps #251: [Sécurité] Vulnérabilité de code : server/Dockerfile:19 (dockerfile.security.missing-user.missing-user)

Added by Client Dashboard about 2 months ago. Updated about 1 month ago.

Status:
Ready to ship
Priority:
Normal
Assignee:
-
Start date:
06/15/2026
Due date:
% Done:

0%

Estimated time:
spec_ref:
build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
deployed
preprod_url:
https://preprod-scobby.omdev.tech
deployed_at:
07/01/2026
branch:
fix/secops-dockerfile-nonroot
pr_url:
https://github.com/Scobby-organisation/scobby/pull/105
security_key:
server/Dockerfile:19_dockerfile.security.missing-user.missing-user
severity:
high
paused:

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 Actions #1

**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 Actions #2

  • 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 Actions #3

  • 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 Actions #4

  • 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).

Actions

Also available in: PDF Atom