From 0e55bdabd4df4cf3814c19f55792b5941a816550 Mon Sep 17 00:00:00 2001 From: Diego Rodrigues de Sa e Souza <8016841+diegosouzapw@users.noreply.github.com> Date: Sun, 28 Jun 2026 10:23:35 -0300 Subject: [PATCH] chore(docker): harden base image against container-scan CVEs (#5228) apt-get upgrade -y in the base stage pulls security-patched trixie packages at build time, and npm install -g npm@latest refreshes the globally-bundled undici/tar inside the npm CLI. Together these clear the subset of GitHub container-scan CVE alerts that have an upstream fix available. None of the flagged CVEs are in the application dependency tree (app already resolves undici@8.5.0 / tar@7.5.16, both fixed); they live in the node:24-trixie-slim base layer and npm's own internals, and none are reachable from the proxy request surface at runtime. CVEs without a published fix (local-only TOCTOU, etc.) remain until the distro patches them and the image is rebuilt. --- Dockerfile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Dockerfile b/Dockerfile index b9cab220f6..89d0c2fad5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,12 +2,28 @@ FROM node:24-trixie-slim AS base WORKDIR /app +# `apt-get upgrade` pulls the security-patched versions of the Debian (trixie) +# base-image packages at build time — clears the subset of container-scan CVEs +# (perl / util-linux / systemd / ncurses / zlib / tar / sqlite / shadow / pam …) +# that already have a fix published in trixie. CVEs without an upstream fix yet +# (local-only TOCTOU, etc.) remain until the distro patches them and the image +# is rebuilt; none are reachable from the proxy's request surface at runtime. RUN --mount=type=cache,target=/var/cache/apt,sharing=shared \ --mount=type=cache,target=/var/lib/apt/lists,sharing=shared \ apt-get update \ + && apt-get upgrade -y \ && apt-get install -y --no-install-recommends libsecret-1-0 ca-certificates \ && rm -rf /var/lib/apt/lists/* +# Refresh the globally-installed npm so its *bundled* node_modules (undici, tar) +# ship the patched versions. These are npm's own internals — not application +# dependencies (our app already resolves undici@8.5.0 / tar@7.5.16, both fixed) — +# but the container scanner flags the stale copies under +# /usr/local/lib/node_modules/npm/node_modules. npm is not invoked at runtime in +# the runner stages, so this is hygiene, not an exploitable runtime path. +RUN npm install -g npm@latest \ + && npm cache clean --force + # ── Builder ──────────────────────────────────────────────────────────────── FROM base AS builder