
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
| Champ | Valeur |
| -------------------- | ---------------------------------------------------- |
| **Composant** | OpenSSL / libssl3 |
| **Sévérité** | Haute (CVSS 7.5) |
| **Type** | Déni de service via les vérifications de noms X.509 |
| **Version de base** | 3.0.11-1~deb12u2 |
| **Version corrigée** | 3.0.14-1~deb12u2 (ou ultérieure) |
| **Notre version** | 3.0.20-1~deb12u1 |
| **NVD** | https://nvd.nist.gov/vuln/detail/CVE-2024-6119 |
| **Avis** | https://openssl-library.org/news/secadv/20240903.txt |
**Comment fonctionne le correctif :**
Le paquet `.deb` déclare `Depends: libssl3 (>= 3.0.14)`, ce qui force
`apt-get install` à récupérer une version d'OpenSSL qui inclut le correctif. Les
dépôts actuels de Debian bookworm fournissent la version 3.0.20, qui corrige CVE-2024-6119 et
des dizaines d'autres CVE OpenSSL par rapport à la version de base (CVE-2024-2511, CVE-2024-5535,
CVE-2024-4741, CVE-2023-5678, CVE-2023-6129, CVE-2023-6237, CVE-2024-9143,
CVE-2025-15467, CVE-2025-69420).
**Comportement du scanneur :** Grype et Trivy voient `libssl3 3.0.20` dans la base de données dpkg
et reconnaissent que 3.0.20 ≥ 3.0.14, donc CVE-2024-6119 n'est plus
signalé. Aucun VEX nécessaire - l'incrémentation de version est évidente.
**Vérification :**```bash
grep "CVE-2024-6119" baseline-grype.txt # present
grep "CVE-2024-6119" fixed-grype.txt # absent
Vulnérabilité :
ngx_http_script_regex_end_code() dans src/http/ngx_http_script.c ne réinitialisait pas
e->is_args lors du traitement d'un résultat de regex de réécriture. Si is_args était
défini par une opération précédente du moteur de script, les calculs ultérieurs de la longueur
du tampon dans le chemin de redirection/réécriture devenaient incorrects, provoquant un
dépassement de tampon de tas d'une taille contrôlée par l'attaquant via des URI de requête
contrefaites.
Le correctif (une ligne) :```c // Added before the existing e->quote = 0; at line 1205 e->is_args = 0;
**Provenance du correctif :**
| Evidence | Emplacement / Valeur |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Commit amont | [`2046b45aa0c6e712c216b9075886f3f26e9b4ca9`](https://github.com/nginx/nginx/commit/2046b45aa0c6e712c216b9075886f3f26e9b4ca9) |
| Auteur amont | Roman Arutyunyan (arut), validé par Sergey Kandaurov (pluknet), 2026-05-13 |
| PR amont | [nginx/nginx#1350](https://github.com/nginx/nginx/pull/1350) |
| Étiquettes amont | `release-1.31.0`, `release-1.30.1` |
| Correctif antérieur connexe | [`74d9399`](https://github.com/nginx/nginx/commit/74d939974d430a2c2e71b0134114d2a7b04dcc20) (2012, problème d'échappement similaire `is_args`) |
| Fichier de correctif | `build/patches/CVE-2026-42945.patch` |
| Métadonnées de provenance | `build/patches/CVE-2026-42945.provenance.json` |
| Archive source (vulnérable) | `https://nginx.org/download/nginx-1.25.5.tar.gz` SHA256:`2fe2294f8af4144e7e842eaea884182a84ee7970e...` |
| Archive source (corrigée) | `https://nginx.org/download/nginx-1.30.1.tar.gz` SHA256:`99765000d974896b31ca5882d8c279ce3fe7ef6f...` |
| SHA256 du fichier vulnérable | `c4b10c95b00e43d731a61f2380d406155e037f3cfb40a3bf58711ecefddc799a` |
| SHA256 du fichier corrigé | `a6182175a22d88f66b9a61ae051bdcfece10d1bb2e643f7f175eb07589143403` |
| Méthode de dérivation | `diff src/http/ngx_http_script.c` entre les deux archives (identique au commit amont confirmé) |
| Lignes modifiées | 1 (ajout uniquement) |
| Le correctif s'applique proprement | Vérifié : `patch --dry-run -p1 < build/patches/CVE-2026-42945.patch` sortie 0 |
| Vérification au moment de la construction | `build.sh` vérifie que `e->is_args = 0` est présent dans la source après application du correctif, interrompt la construction si absent |
| Attestation de construction | Écrite dans `artifacts/patch-attestation.json` lors de la construction |
| Test de régression | `test/test_cve_2026_42945.py` - exerce le chemin de code vulnérable |
| Script de vérification du correctif | `make verify-patch` - re-dérive indépendamment le correctif à partir des archives amont |
**Comment le correctif a été créé :**
1. Téléchargé `nginx-1.25.5.tar.gz` (SHA256 vérifié par rapport au hachage de référence)
2. Téléchargé `nginx-1.30.1.tar.gz` (SHA256 vérifié : `99765000d974896b31ca5882d8c279ce3fe7ef6f5c6f9f0a967ed7fd3407f9cc`)
3. Exécuté `diff src/http/ngx_http_script.c` entre les deux arbres
4. Le diff a produit exactement une ligne - l'ajout de `e->is_args = 0;`
5. Extrait en tant que correctif de diff unifié avec lignes de contexte
6. Vérifié que le correctif s'applique proprement à nginx 1.25.5
7. Les deux arbres sources sont conservés dans `research/` pour vérification indépendante
**Tests de régression :**
La suite de tests `test/test_cve_2026_42945.py` exerce le chemin de code vulnérable en envoyant des requêtes via des règles de réécriture qui manipulent l'état de la chaîne de requête (`is_args`). Elle valide :
- Les redirections de réécriture avec `?` final (suppression de requête) produisent des réponses bien formées
- Les réécritures chaînées qui basculent l'état `is_args` ne font pas planter le worker
- Les longues chaînes de requête (4KB+) ne provoquent pas d'artefacts de débordement de tampon (octets nuls, en-têtes Location trop longs)
- 100 requêtes mixtes rapides ne provoquent pas de crash du worker
- Le processus worker survit à tous les cas de test sans SIGSEGV ni corruption de tas
Exécutez : `make test-cve`
**Comportement du scanner :**
Étant donné que la version du paquet reste `1.25.5`, les scanners signaleront CVE-2026-42945 lorsque l'avis est présent dans leur base de données. C'est attendu - les scanners font correspondre par `(package-name, upstream-version)` et ne peuvent pas inspecter si la source a été corrigée. Le document VEX supprime cette constatation avec une justification lisible par machine. La suppression par le scanner est un mécanisme de communication, pas la preuve principale de la correction. La preuve principale est la chaîne de provenance du correctif et le test de régression ci-dessus.
---
## VEX (Vulnerability Exploitability eXchange)
### Pourquoi VEX est nécessaire
Les scanners identifient les paquets par `(name, version)` à partir de la base de données dpkg. Notre paquet est `nginx 1.25.5-1~bookworm+echo1` – les scanners analysent cela comme la version amont 1.25.5 et signalent toutes les CVE affectant nginx ≤ 1.25.5.
Pour les correctifs rétroportés, le scanner ne peut pas déterminer que le code vulnérable a été corrigé. La version reste intentionnellement 1.25.5 pour préserver la compatibilité du paquet. VEX fournit une attestation lisible par machine que la CVE a été traitée, liée à des preuves vérifiables.
### Chaîne de crédibilité VEX
La déclaration VEX pour CVE-2026-42945 n'est PAS une simple formalité. Elle est soutenue par :
1. **Provenance du correctif** - `build/patches/CVE-2026-42945.provenance.json` documente la source amont exacte, la méthode de dérivation et les hachages de fichiers
2. **Vérification au moment de la construction** - `build.sh` affirme que le marqueur de correction est présent dans la source compilée, interrompant la construction en cas d'échec
3. **Attestation de construction** - `artifacts/patch-attestation.json` enregistre les hachages de fichiers avant/après correctif générés lors de la construction
4. **Test de régression** - `test/test_cve_2026_42945.py` exerce le chemin de code vulnérable sans plantage ni corruption
5. **Re-dérivation indépendante** - `make verify-patch` télécharge les deux archives amont et démontre que le correctif validé est le diff de sécurité minimal
### Ce que couvre le VEX
| CVE | Statut | Justification | Preuve |
| -------------- | ------- | ----------------------------- | ---------------------------------------------------------- |
| CVE-2026-42945 | `fixed` | `vulnerable_code_not_present` | Correctif rétroporté + provenance + test de régression + barrière de construction |
Le périmètre du VEX est intentionnellement restreint : seules les CVE que ce projet a activement corrigées avec des preuves vérifiables sont couvertes. Les constatations qui sont simplement « attendues comme atténuées » par la version livrée ne sont pas supprimées – cela évite d'utiliser VEX comme un outil de suppression généralisé.
### Comment ça fonctionne
Le script `build/generate-vex.sh` produit un document OpenVEX v0.2.0.
La commande du scanner pour l'appliquer :```bash
# Without VEX - CVE is reported (version-based match):
grype nginx-fixed > fixed-grype.txt
# With VEX - CVE is suppressed with justification:
grype nginx-fixed --vex vex.json > fixed-grype-vex.txt
La suppression VEX est observable dans les artefacts de scan sauvegardés. Notez que les bases de données des scanners sont reconstruites périodiquement et que la présence de CVE peut varier entre les exécutions. Les fichiers sauvegardés baseline-grype.txt et fixed-grype.txt sont des preuves ponctuelles. La validité du document VEX ne dépend PAS de l'état de la base de données du scanner - elle est vérifiable indépendamment via la chaîne de provenance ci-dessus.
Le paquet est nommé nginx (pas nginx-custom). Ceci est critique car :
nginx permet de satisfaire les dépendances et d'être géré par les outils Debian standard.Les bases de données d'avis des scanners sont reconstruites périodiquement. Une CVE présente une semaine peut être absente la suivante. Ce projet ne se fie PAS à la sortie du scanner comme preuve principale de correction. La chaîne de preuve est :
Les fichiers de scan sauvegardés sont uniquement des preuves ponctuelles.
| Package | Version | CVE-2024-6119 | CVE-2026-42945 |
|---|---|---|---|
| libssl3 | 3.0.20-1~deb12u1 | Non signalé (corrigé par version) | n/a |
| nginx | 1.25.5-1~bookworm+echo1 | n/a | Signalé lorsqu'il est dans la base (rétroportage invisible pour le scanner) |
Avec --vex vex.json, la découverte CVE-2026-42945 (si présente dans la base de données du scanner) est supprimée. La validité du document VEX est établie par la chaîne de provenance (dérivation du correctif, attestation de construction, test de régression), pas seulement par la sortie du scanner.
La suite de tests (test/compat.py) démarre les deux conteneurs Docker nginx:1.25-bookworm et nginx-fixed et compare leur comportement. Chaque assertion teste directement l'image fixée en direct par rapport à l'image amont en direct.
89 assertions. Toutes réussies.
De plus, test/test_cve_2026_42945.py fournit environ 20 assertions ciblant spécifiquement le correctif de CVE rétroporté (voir « Test de régression » ci-dessus).
--with-http_v3_module est vérifiée ; aucun trafic UDP/QUIC n'est envoyé).so sur le disqueExécution :```bash make test
---
## Taille de l'image
| Image | Taille (arm64, `docker images`) |
| ---------------------- | ------------------------------- |
| `nginx:1.25-bookworm` | ~278 Mo |
| `nginx-fixed` | ~332 Mo |
L'image corrigée est plus grande que celle d'amont. C'est attendu : l'image officielle
utilise des binaires pré-compilés dans des couches optimisées, tandis que la nôtre installe
des artefacts de compilation et toutes les dépendances d'exécution (y compris les bibliothèques pour les 12 modules
dynamiques) dans une base `debian:bookworm-slim`. Cette différence de taille est un compromis
pour un contrôle de construction au niveau source, et non une régression fonctionnelle.
---
## Évaluation des risques résiduels
### CVE restantes dans l'image corrigée
L'image corrigée contient encore des vulnérabilités dans les bibliothèques système non
traitées par ce projet (instantané ; exécutez `make scan` pour l'état actuel) :
| Niveau de risque | Paquet | CVE(s) | Notes |
| ---------------- | ---------------- | ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Élevé | nginx | CVE-2023-44487 | Atténué dans nginx ≥ 1.25.3 selon l'amont ; le scanner signale encore car le suivi Debian n'a pas clos l'avis |
| Critique | libgnutls30 | CVE-2026-42010, CVE-2026-33845 | Aucun correctif disponible dans bookworm |
| Critique | libc6/libc-bin | CVE-2026-5450 | Ne sera pas corrigé dans cette version Debian |
| Élevé | libc6/libc-bin | CVE-2026-5928, CVE-2026-5435, CVE-2026-4437 | glibc ne sera pas corrigé pour bookworm |
| Élevé | dpkg | CVE-2025-6297, CVE-2026-2219 | Corrigible (mise à niveau vers 1.21.23) |
| Élevé | libldap-2.5-0 | CVE-2023-2953 | Ne sera pas corrigé |
| Élevé | curl/libcurl4 | CVE-2026-5773, CVE-2026-6276 | Ne sera pas corrigé |
| Élevé | ncurses | CVE-2025-69720 | Ne sera pas corrigé |
Ces vulnérabilités sont héritées de `debian:bookworm-slim` et sortent du périmètre
de la correction des CVE axée sur nginx de ce projet.
### Limites de cette approche
1. **Non hermétique.** L'image de base et les paquets apt sont résolus au moment de la construction
à partir des dépôts Debian en direct. Épingler le SHA de l'image de base et utiliser des
instantanés apt améliorerait la reproductibilité.
2. **Aucun test QUIC comportemental.** Le support HTTP/3 est compilé (vérifié par
indicateur) mais aucun trafic QUIC n'est exercé dans la suite de tests.
3. **Aucune validation des performances.** Le test de 50 requêtes concurrentes prouve
l'exactitude, pas le débit ni l'équivalence de latence.
4. **Chargement de module uniquement.** Les modules dynamiques (GeoIP, image_filter, XSLT) sont
vérifiés pour leur présence et leur capacité de chargement, mais leur comportement fonctionnel n'est pas
testé au-delà du chargement basique.
5. **Preuve mono-architecture.** Les tests ne s'exécutent que sur l'architecture de l'hôte de construction
(arm64 en développement ; nécessiterait une CI pour multi-arch).
### Améliorations futures (non implémentées)
1. Épingler le digest de l'image de base et utiliser des URL d'instantanés apt pour des constructions hermétiques.
2. Supprimer les paquets inutiles (ncurses, util-linux) tirés comme dépendances transitives.
3. Générer une SBOM (la cible `make sbom` existe, utilise `syft`) et lier à VEX via purl de SBOM.
4. Signer l'image avec `cosign` et joindre VEX + SBOM + attestation de correctif en tant qu'attestations OCI.
5. Ajouter un pipeline CI (GitHub Actions) pour la construction automatisée → test → analyse → publication.
6. Ajouter un test de protocole HTTP/3 (client QUIC, configuration de certificat, port UDP).
7. Envisager une base distroless pour éliminer complètement le bruit des CVE au niveau OS.
8. Ajouter une variante de construction ASan (AddressSanitizer) pour prouver l'absence de corruption de tas sous charge de test.
---
## Indicateurs de construction vs. amont
Les indicateurs `./configure` dans `build.sh` sont identiques à ceux rapportés par
`nginx -V` dans l'image officielle `nginx:1.25-bookworm`. Ceci est vérifié
par `test/compat.py::test_nginx_version`, qui normalise la
différence `-ffile-prefix-map=<chemin>` et compare les indicateurs restants
caractère par caractère.
Indicateurs notables (tous présents dans les deux images) :
| Indicateur / fonctionnalité | Objectif |
| --------------------------- | --------------------------------------------------------------------------------- |
| `--prefix=/etc/nginx` | Convention d'image Docker (pas celle de Debian `/usr/share/nginx`) |
| `--with-http_v3_module` | Pile QUIC intégrée (indépendante de l'API QUIC d'OpenSSL) |
| `--with-pcre` (PCRE2) | Lié à `libpcre2-8-0` (pas l'ancien PCRE1) |
| `--with-stream` | Module proxy TCP/UDP (dynamique) |
| Renforcement de sécurité | `-fstack-protector-strong`, `FORTIFY_SOURCE=2`, RELRO, PIE |
| Modules dynamiques (×12) | geoip, stream_geoip, image_filter, xslt, http_js, stream_js (release + debug) |
| `--with-debug` (débogage) | Binaire nginx-debug construit séparément avec les mêmes indicateurs + débogage |
---
## Paquet Debian
Les métadonnées du paquet `.deb` :```
Package: nginx
Version: 1.25.5-1~bookworm+echo1
Depends: libc6 (>= 2.34), libcrypt1 (>= 1:4.1.0), libpcre2-8-0 (>= 10.22),
libssl3 (>= 3.0.14), zlib1g (>= 1:1.2.11), libgeoip1 (>= 1.6.12),
libgd3 (>= 2.1.0~alpha~), libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25),
lsb-base (>= 3.0-6), adduser
Provides: httpd, nginx, nginx-r1.25.5
Conflicts: nginx-common, nginx-core
Replaces: nginx-common, nginx-core
Décisions clés en matière d’empaquetage :
libssl3 (>= 3.0.14) - nécessite explicitement OpenSSL corrigé (l’amont déclare >= 3.0.0). C’est le mécanisme qui impose le correctif de CVE-2024-6119.Provides: nginx-r1.25.5 - satisfait les paquets de modules dynamiques qui dépendent de ce paquet virtuel./etc/nginx/nginx.conf et /etc/nginx/conf.d/default.conf. Cela est requis pour la vérification dpkg-query --showformat du script d’entrée IPv6./bin/false (correspondant à l’amont - vérifié dans la suite de tests)..so, l’arborescence complète de configuration /etc/nginx, les fichiers init.d/systemd/logrotate, la page de manuel, les fichiers HTML par défaut et le lien symbolique /etc/nginx/modules → /usr/lib/nginx/modules.Paquet nommé nginx, pas nginx-custom. S’il était renommé, les scanners ne l’associeraient pas aux avis nginx – toutes les CVE nginx disparaîtraient silencieusement des rapports, y compris les non corrigées. Conserver le nom nginx garantit un rapport honnête des scanners et rend le VEX pertinent.
VEX nécessite la visibilité des CVE. Le but du VEX est de supprimer une CVE déjà signalée. Si le scanner ne trouve pas la CVE (à cause du renommage du paquet ou du délai de la base de données), le VEX n’a rien à supprimer.
libssl3 (>= 3.0.14) comme dépendance du paquet. Plutôt que d’espérer que la base d’exécution contienne par hasard un OpenSSL corrigé, le .deb impose une version contenant le correctif de CVE-2024-6119.
Volatilité des bases de données des scanners. Les bases de données d’avis se reconstruisent périodiquement. Une CVE présente une semaine peut être absente la suivante. Les fichiers de scan sauvegardés dans ce dépôt sont des preuves à un instant donné ; les scans actuels peuvent différer.
Outils d’IA utilisés. GitHub Copilot a assisté l’analyse des correctifs (comparaison des arbres source de nginx 1.25.5 et 1.30.1), la structure de la suite de tests, l’identification du problème d’évitement du scanner par renommage du paquet et la rédaction du document VEX. Les détails d’empaquetage Debian et les heuristiques de correspondance de version de Grype ont nécessité une vérification manuelle.
| Champ | Valeur |
|---|
| Composant | nginx ngx_http_rewrite_module |
| Gravité | Moyenne (classification nginx.org) |
| Version de base | nginx 1.25.5 |
| Corrigé dans | nginx 1.30.1 (publié le 2026-05-13) |
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2026-42945 |
| Avis | https://my.f5.com/manage/s/article/K000161019 |
| CHANGES amont | nginx 1.30.1 CHANGES : « heap memory buffer overflow in rewrite module » |
| Catégorie | Ce qui est comparé | Nombre d'assertions |
|---|
| Métadonnées d'image | Entrypoint, Cmd, ExposedPorts, User, StopSignal, Env, Labels | 7 |
| Arguments nginx -V | Indicateurs de configuration identiques (normalisés pour le chemin -ffile-prefix-map) | 1 |
| Modules dynamiques | Les 12 fichiers .so amont présents + lien symbolique /etc/nginx/modules | 13 |
| Binaire nginx-debug | --with-debug et --with-http_v3_module présents dans debug -V | 2 |
| Structure du système de fichiers | Environ 20 chemins clés, liens symboliques de logs vers /dev/stdout et /dev/stderr | ~20 |
| Configuration utilisateur/groupe | Sortie de getent passwd/group nginx identique | 2 |
| Fichiers de configuration dpkg | dpkg-query signale default.conf et nginx.conf comme fichiers de configuration | 1 |
| Paquet fournit | dpkg -s nginx affiche Provides: nginx-r1.25.5 | 1 |
| Binaire NJS | njs -v retourne 0.8.4 | 1 |
| Point d'entrée IPv6 | 10-listen-on-ipv6-by-default.sh modifie default.conf à l'identique | 1 |
| Modèles Envsubst | La substitution de modèle NGINX_ENVSUBST produit la même sortie | 1 |
| Journaux de démarrage | Toutes les lignes de journal du point d'entrée correspondent au format amont | 1 |
| HTTP GET/HEAD/POST | Le corps de la réponse, le statut et les en-têtes correspondent pour plusieurs points de terminaison | ~10 |
| Requête malformée | Réponse d'erreur TCP brute identique | 1 |
| Service de fichiers statiques | Fichier monté servi avec le contenu correct | 1 |
| Terminaison TLS | HTTPS avec certificat auto-signé fonctionne à l'identique | 1 |
| Arrêt en douceur | SIGQUIT produit une sortie propre (code 0) | 1 |
| Rechargement de configuration | SIGHUP applique une nouvelle configuration sans redémarrage | 1 |
| Requêtes concurrentes | 50 requêtes parallèles retournent toutes 200 | 1 |