
Conteneur nginx 1.25.5 construit depuis les sources avec le correctif rétroporté CVE-2026-42945, mise à niveau OpenSSL, chaîne de provenance complète et attestation VEX.
nginx:1.25-bookwormUne image de conteneur nginx 1.25.5 construite à partir des sources qui corrige deux CVE présentes dans l'image officielle nginx:1.25-bookworm tout en préservant le comportement d'exécution en amont.
| CVE | Composant | Gravité | Technique | Modèle de vérification |
|---|---|---|---|---|
| CVE-2024-6119 | OpenSSL / libssl3 | Haute | Augmentation de version de dépendance | Vérifiable par scanner : libssl3 3.0.20 visible dans la base de données dpkg |
| CVE-2026-42945 | nginx ngx_http_rewrite_module | Critique | Correctif source rétroporté | Vérifiable par provenance : dérivation du correctif + test de régression + attestation de construction + VEX |
Celles-ci représentent deux modèles de correction distincts :
Les arguments de configuration nginx -V de cette image correspondent à ceux de nginx:1.25-bookworm (comparés caractère par caractère après normalisation du chemin de construction -ffile-prefix-map ; vérifié dans test/compat.py::test_nginx_version). La suite de tests (make test) valide 89 assertions couvrant les métadonnées de l'image, les modules dynamiques, l'agencement du système de fichiers, le comportement du point d'entrée, le packaging dpkg et la gestion des requêtes HTTP par rapport à l'image amont en direct.
Différences connues par rapport à l'amont (non validées comme identiques) :
built with OpenSSL X.X.X dans nginx -V reflète la version libssl-dev du constructeur, qui peut différer de l'OpenSSL utilisé lors de la compilation en amont.debian:bookworm-slim plutôt que l'arbre de paquets hérité de l'image officielle.libssl3 est celle que bookworm fournit actuellement (3.0.20 au moment de la rédaction), et non la version épinglée dans l'image amont.make image
make test
make test-cve
make verify-patch
make scan
Une commande pour construire, tester et scanner :```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)
---
## Processus de construction
### Architecture```
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/
Le Containerfile NE copie PAS /etc/nginx depuis l'amont. Tous les fichiers de configuration sont livrés dans le .deb et suivis par le mécanisme de conffile de dpkg. Ceci est nécessaire pour le script d'entrée 10-listen-on-ipv6-by-default.sh, qui utilise dpkg-query pour détecter si default.conf a été modifié par l'utilisateur.
./configure && make à l'intérieur d'un conteneur Debian propre. Pas de binaires amont, pas d'apt install nginx.build.sh ne récupère que les archives sources épinglées.La construction est largement reproductible mais pas hermétique :
Dockerfile.build mais ne sont pas épinglées en version.Pour améliorer la reproductibilité, épingler le digest de l'image de base :```bash docker pull debian:bookworm-slim docker inspect debian:bookworm-slim --format='{{index .RepoDigests 0}}'
---
## Détails de correction des CVE
### CVE-2024-6119 - Incrémentation de la version OpenSSL