Severity: Low · Area: Infra (frontend/Dockerfile.dev, contracts/Dockerfile.dev, docker-compose.yml)
Description
Neither frontend/Dockerfile.dev nor contracts/Dockerfile.dev declares a non-root USER, so both containers run their build/dev tooling as root by default. docker-compose.yml bind-mounts live source into the frontend container (./frontend:/app), and contracts/Dockerfile.dev pins its base image to a mutable, dated tag (rust:1.75-slim) with no digest pin. This is development-only blast radius (these are not the images used for any production deployment, per the README's Vercel/Netlify/static-hosting deployment guidance), but a compromised transitive build dependency (npm ci, cargo build) would still run as root with write access to the bind-mounted host source tree.
Tasks
Acceptance Criteria
Issue 28 of 30 from the 2026-08 codebase audit tracked in ISSUES.md.
Severity: Low · Area: Infra (
frontend/Dockerfile.dev,contracts/Dockerfile.dev,docker-compose.yml)Description
Neither
frontend/Dockerfile.devnorcontracts/Dockerfile.devdeclares a non-rootUSER, so both containers run their build/dev tooling as root by default.docker-compose.ymlbind-mounts live source into the frontend container (./frontend:/app), andcontracts/Dockerfile.devpins its base image to a mutable, dated tag (rust:1.75-slim) with no digest pin. This is development-only blast radius (these are not the images used for any production deployment, per the README's Vercel/Netlify/static-hosting deployment guidance), but a compromised transitive build dependency (npm ci,cargo build) would still run as root with write access to the bind-mounted host source tree.Tasks
USERdirective to bothDockerfile.devfiles, with appropriate ownership of working directories.contracts/Dockerfile.dev's base image by digest (rust:1.75-slim@sha256:...) rather than a mutable tag.CHOKIDAR_USEPOLLING, etc.) still function correctly for a non-root user, adjusting file permissions/ownership in the Dockerfile as needed.Acceptance Criteria
docker compose up -dstill functions identically for local development (hot reload, contract building) after the change.docker compose exec <service> whoami.Issue 28 of 30 from the 2026-08 codebase audit tracked in
ISSUES.md.