From 0c1076eda0b32c5ebf2899bc07f4f844c0e399f9 Mon Sep 17 00:00:00 2001 From: Cristian Felipe Cruz Buitron Date: Sat, 15 Aug 2026 13:49:51 -0500 Subject: [PATCH] fix(commerce-backend): remediar 3/5 CVE CRITICAL, documentar excepcion para 2 Run 138 de build-medusa.yaml encontro 5 CVE CRITICAL reales (no falsos positivos) al escanear la imagen con Trivy: Remediados en el Dockerfile (verificado localmente con Trivy real, exit 0): - CVE-2026-33845 / CVE-2026-42010 (libgnutls30, base Debian): apt upgrade puntual del paquete. - CVE-2026-59873 (tar vendorizado dentro del npm CLI global de la imagen base node:*-slim): se elimina /usr/local/lib/node_modules/npm completo -- no es una dependencia real del proyecto (el CMD nunca invoca npm en runtime), asi que no hay nada que "actualizar". Documentados como excepcion en workloads/commerce-backend/.trivyignore (con --ignorefile solo en este workflow, no afecta a build.yaml ni deploy-docs.yaml): - CVE-2024-24790 / CVE-2025-68121 (Go stdlib embebido en el binario de esbuild que trae vite@5.4.21, dependencia interna de @medusajs/admin-sdk). Se probo el fix real (override de esbuild a una version mas nueva) y rompio el build del admin panel -- vite@5.4.21 fija "esbuild: ^0.21.3" como dependencia directa, y esbuild >=0.24 cambio el manejo de targets de transpilacion que vite 5 espera. No existe un patch dentro de la serie 0.21.x con un Go toolchain mas nuevo. Requiere subir @medusajs/admin-sdk/vite en un cambio aparte, fuera de alcance de este pipeline de seguridad. --- .gitea/workflows/build-medusa.yaml | 5 ++++ workloads/commerce-backend/.trivyignore | 34 +++++++++++++++++++++++++ workloads/commerce-backend/Dockerfile | 20 +++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 workloads/commerce-backend/.trivyignore diff --git a/.gitea/workflows/build-medusa.yaml b/.gitea/workflows/build-medusa.yaml index 5fcd087..cdc7ea8 100644 --- a/.gitea/workflows/build-medusa.yaml +++ b/.gitea/workflows/build-medusa.yaml @@ -220,6 +220,10 @@ jobs: # a los 4m52s con el timeout default, en un run donde el host # venía de terminar el docker build (ver hallazgo de rendimiento # de Gitea/runner en docs/playbooks). + # --ignorefile: excepciones puntuales y documentadas (ver + # workloads/commerce-backend/.trivyignore) para CVEs sin fix de + # bajo riesgo disponible hoy. No debilita el gate en general -- + # cualquier otra CRITICAL sigue bloqueando igual. - name: Escanear imagen (Trivy) — CRITICAL bloquea shell: bash run: | @@ -229,6 +233,7 @@ jobs: --exit-code 1 \ --ignore-unfixed \ --timeout 15m0s \ + --ignorefile "${APP_DIR}/.trivyignore" \ "${IMAGE_NAME}:${{ steps.vars.outputs.VERSION }}" # HIGH solo informa por ahora — mismo criterio que el frontend. diff --git a/workloads/commerce-backend/.trivyignore b/workloads/commerce-backend/.trivyignore new file mode 100644 index 0000000..a599216 --- /dev/null +++ b/workloads/commerce-backend/.trivyignore @@ -0,0 +1,34 @@ +# Excepciones documentadas al gate CRITICAL de Trivy (imagen) para +# commerce-backend. Cada entrada requiere justificación y fecha -- no +# es un mecanismo para silenciar hallazgos sin revisar. +# +# CVE-2024-24790 / CVE-2025-68121 (golang stdlib, gobinary): +# Van embebidas en el binario precompilado de esbuild +# (app/node_modules/@esbuild/linux-x64/bin/esbuild), traído +# transitivamente por vite@5.4.21, que a su vez lo trae +# @medusajs/admin-sdk para bundlear el panel de admin en build time. +# No es un binario que se ejecute en runtime del contenedor (el CMD +# corre "node .../medusa/cli start", nunca esbuild). +# +# Se intentó el fix real (bump de esbuild a una versión compilada con +# un Go toolchain más nuevo, override en package.json) y rompió el +# build del admin: vite@5.4.21 declara "esbuild: ^0.21.3" como +# dependencia directa (no rango amplio), y esbuild >=0.24 cambió el +# manejo de la lista de "target" de transpilación que vite 5 pasa +# internamente -- build.yaml falló con +# "Transforming destructuring... not supported yet" / +# PLUGIN_ERROR en vite:esbuild-transpile. No existe un patch dentro +# de la propia serie 0.21.x (0.21.5 ya es la última) que incluya un +# Go toolchain con estas CVEs corregidas. +# +# Domesticar esto de verdad requiere subir @medusajs/admin-sdk (y por +# lo tanto vite) a una versión que dependa de un esbuild más nuevo -- +# fuera de alcance de este pipeline de seguridad, queda como TODO de +# dependencias en un cambio aparte, no bloqueado por CI mientras +# tanto. +# +# Documentado: 2026-08-15. Revisar en cada bump de @medusajs/* por si +# ya arrastra una versión de vite/esbuild más nueva y esta excepción +# deja de ser necesaria. +CVE-2024-24790 +CVE-2025-68121 diff --git a/workloads/commerce-backend/Dockerfile b/workloads/commerce-backend/Dockerfile index ca15878..029275b 100644 --- a/workloads/commerce-backend/Dockerfile +++ b/workloads/commerce-backend/Dockerfile @@ -59,6 +59,26 @@ ENV NODE_ENV=production \ PORT=9000 \ NPM_CONFIG_UPDATE_NOTIFIER=false +# +# libgnutls30 en la base node:22.18.0-bookworm-slim trae dos CVE +# CRITICAL con fix ya publicado por Debian (CVE-2026-33845, +# CVE-2026-42010) -- detectado por el gate de Trivy imagen del +# pipeline (run 138). Solo se actualiza este paquete puntual, no toda +# la imagen, para minimizar el diff de superficie de la base. +RUN apt-get update \ + && apt-get upgrade -y libgnutls30 \ + && rm -rf /var/lib/apt/lists/* + +# +# El CLI global de npm que trae la imagen base node:*-slim no se usa en +# runtime (el CMD invoca a Medusa directo con `node`, nunca `npm`) y +# arrastra su propia copia vendorizada de `tar` con un CVE CRITICAL +# (CVE-2026-59873, detectado por Trivy en +# usr/local/lib/node_modules/npm/node_modules/tar). Se elimina en vez +# de forzar una versión: no es una dependencia real de este proyecto, +# así que no hay nada que "actualizar" -- solo superficie sin uso. +RUN rm -rf /usr/local/lib/node_modules/npm + # # Solo lo necesario para ejecutar Medusa #