
Contenedor nginx 1.25.5 construido desde el código fuente con corrección retroportada de CVE-2026-42945, actualización de OpenSSL, cadena de procedencia completa y atestación VEX.
nginx:1.25-bookwormUna imagen de contenedor nginx 1.25.5 compilada desde fuente que remedia dos CVEs presentes en la imagen oficial nginx:1.25-bookworm mientras preserva el comportamiento de ejecución del upstream.
| CVE | Componente | Severidad | Técnica | Modelo de verificación |
|---|---|---|---|---|
| CVE-2024-6119 | OpenSSL / libssl3 | Alta | Actualización de versión de dependencia | Verificable por escáner: libssl3 3.0.20 visible en la base de datos de dpkg |
| CVE-2026-42945 | nginx ngx_http_rewrite_module | Crítico | Parche de fuente adaptado (backport) | Verificable por procedencia: derivación del parche + prueba de regresión + atestación de compilación + VEX |
Éstos representan dos modelos de remediación distintos:
Los argumentos de configuración de nginx -V de esta imagen coinciden con los de nginx:1.25-bookworm (comparados carácter por carácter después de normalizar la ruta de compilación -ffile-prefix-map; verificado en test/compat.py::test_nginx_version). El conjunto de pruebas (make test) valida 89 comprobaciones que cubren metadatos de la imagen, módulos dinámicos, diseño del sistema de archivos, comportamiento del punto de entrada, empaquetado dpkg y manejo de solicitudes HTTP contra la imagen upstream en vivo.
Diferencias conocidas respecto al upstream (no validadas como idénticas):
built with OpenSSL X.X.X en nginx -V refleja la versión de libssl-dev del compilador, que puede diferir del OpenSSL en tiempo de compilación del upstream.debian:bookworm-slim en lugar del árbol de paquetes heredado de la imagen oficial.libssl3 en tiempo de ejecución es la que bookworm proporciona actualmente (3.0.20 en el momento de escribir esto), no la versión fijada en la imagen upstream.make image
make test
make test-cve
make verify-patch
make scan
Un comando para construir, probar y escanear:```bash
make all
build/ Dockerfile.build Builder image (debian:bookworm-slim + compilation deps) build.sh Fetch → verify → patch → compile → package nginx generate-vex.sh Generate OpenVEX document for backported CVE verify-patch.sh Re-derive patch from upstream tarballs (audit tool) patches/ CVE-2026-42945.patch Backported one-line fix from nginx 1.30.1 CVE-2026-42945.provenance.json Machine-readable patch provenance and derivation metadata
test/ compat.py 89-assertion compatibility test suite (runs against live upstream) test_cve_2026_42945.py CVE-specific regression test (exercises vulnerable code path)
artifacts/
patch-attestation.json Build-time patch attestation (tracked)
nginx_*.deb Compiled package (gitignored - rebuilt via make build-source)
nginx Compiled binary (gitignored)
Containerfile Final runtime image definition
Makefile Orchestrates build → test → scan pipeline
vex.json Generated OpenVEX v0.2.0 document
baseline-trivy.txt Point-in-time Trivy scan of nginx:1.25-bookworm
baseline-grype.txt Point-in-time Grype scan of nginx:1.25-bookworm
fixed-trivy.txt Trivy scan of the fixed image
fixed-grype.txt Grype scan of the fixed image (without VEX)
fixed-grype-vex.txt Grype scan of the fixed image (with VEX applied)
---
## Proceso de compilación
### Arquitectura```
debian:bookworm-slim (builder)
└─ build.sh
├─ curl nginx-1.25.5.tar.gz (SHA256-verified)
├─ curl njs-0.8.4 from github.com/nginx/njs
├─ patch -p1 < CVE-2026-42945.patch
├─ ./configure (flags identical to upstream nginx -V)
├─ make: release binary, debug binary, 4 dynamic module families (×2 release/debug)
├─ make: NJS modules (×2 release/debug) + njs CLI binary
└─ dpkg-deb → nginx_1.25.5-1~bookworm+echo1_<arch>.deb
debian:bookworm-slim (runtime)
├─ apt-get install runtime deps (libssl3 ≥ 3.0.14 enforced)
├─ dpkg -i nginx_*.deb
└─ COPY --from=upstream /docker-entrypoint.sh + /docker-entrypoint.d/
El Containerfile NO copia /etc/nginx desde upstream. Todos los archivos
de configuración se incluyen dentro del .deb y son gestionados por el mecanismo
de archivos de configuración de dpkg. Esto es necesario para el script de
entrada 10-listen-on-ipv6-by-default.sh, que utiliza dpkg-query para detectar
si default.conf ha sido modificado por el usuario.
./configure && make dentro de un contenedor Debian limpio.
Sin binarios de upstream, sin apt install nginx.build.sh solo descarga los archivos fuente
anclados (pinned).La compilación es mayormente reproducible pero no hermética:
Dockerfile.build pero no tienen
versiones ancladas.Para mejorar la reproducibilidad, ancle el digest de la imagen base:```bash docker pull debian:bookworm-slim docker inspect debian:bookworm-slim --format='{{index .RepoDigests 0}}'
---
## Detalles de Remediación de CVE
### CVE-2024-6119 - Actualización de Versión de OpenSSL