Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
nginx-cve-fix — 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. | Kitploit
Outils/GitHubGitHub/barappteam/nginx-cve-fix
Scanners de VulnérabilitésSécurité des ConteneursAnalyse des VulnérabilitésAudit de ConfigurationDevSecOpsSécurité de la Chaîne Logistique
GitHubbarappteam/nginx-cve-fix

nginx-cve-fix

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.

Voir le dépôt
il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Correction de CVE Nginx - Remplacement Construit à partir des Sources pour nginx:1.25-bookworm

Une 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.

CVEComposantGravitéTechniqueModèle de vérification
CVE-2024-6119OpenSSL / libssl3HauteAugmentation de version de dépendanceVérifiable par scanner : libssl3 3.0.20 visible dans la base de données dpkg
CVE-2026-42945nginx ngx_http_rewrite_moduleCritiqueCorrectif 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 :

  1. Augmentation de version (CVE-2024-6119) - la version corrigée de la bibliothèque est directement visible pour les scanners via la base de données dpkg. Aucune attestation supplémentaire nécessaire.
  2. Rétroportage source (CVE-2026-42945) - la version du paquet reste 1.25.5, donc les scanners ne peuvent pas distinguer le binaire corrigé d'un binaire non corrigé. La correction est démontrée par la provenance de la source, la vérification au moment de la construction et les tests de régression. VEX fournit le signal au niveau du scanner.

État de parité

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) :

  • La ligne 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.
  • Le contenu binaire n'est pas identique octet par octet (environnement de compilation différent, horodatages d'invocation de la chaîne d'outils différents).
  • L'ensemble de paquets de l'image diffère - base debian:bookworm-slim plutôt que l'arbre de paquets hérité de l'image officielle.
  • La version d'exécution de 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.

Démarrage rapide```bash

Build everything (builder → .deb → final image)

make image

Run automated compatibility tests

make test

Run CVE-2026-42945 regression test

make test-cve

Verify patch provenance (re-derives from upstream tarballs)

make verify-patch

Scan and demonstrate VEX

make scan

root@kitploit:~
Une commande pour construire, tester et scanner :```bash
make all

Structure du dépôt```

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)

root@kitploit:~
---

## 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.

Garanties d'intégrité

  • Tarballs sources : Toutes les archives sources (nginx, NJS) sont vérifiées par SHA256 par rapport à des hachages codés en dur avant extraction. La construction est interrompue en cas de non-correspondance.
  • Construction à partir du source : ./configure && make à l'intérieur d'un conteneur Debian propre. Pas de binaires amont, pas d'apt install nginx.
  • Pas d'accès réseau pendant la compilation : les dépendances sont installées dans la couche d'image Docker du constructeur ; build.sh ne récupère que les archives sources épinglées.

Reproductibilité

La construction est largement reproductible mais pas hermétique :

  • La version source de nginx et le SHA256 sont épinglés et vérifiés avant extraction.
  • La version de NJS et le SHA256 sont épinglés et vérifiés avant extraction.
  • Les dépendances du constructeur sont énumérées dans Dockerfile.build mais ne sont pas épinglées en version.
  • Les paquets d'exécution Debian sont résolus à partir des dépôts bookworm en direct au moment de la construction, de sorte que des versions mineures peuvent dériver entre les constructions.

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}}'

Then use: FROM debian:bookworm-slim@sha256:

root@kitploit:~
---

## 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

CVE-2026-42945 - Correctif rétroporté

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;

root@kitploit:~
**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

Scanner evidence

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.


Scanner Integrity

Package naming decision

Le paquet est nommé nginx (pas nginx-custom). Ceci est critique car :

  1. Rapport honnête : Si le paquet était renommé, les scanners ne le reconnaîtraient pas comme nginx et TOUTES les CVE de nginx disparaîtraient silencieusement – y compris celles non corrigées. C'est un faux sentiment de sécurité.
  2. Démonstration VEX : VEX ne peut supprimer qu'une CVE que le scanner signale réellement. Les paquets renommés rendent VEX inutile (et non testable).
  3. Gestion des paquets : Nommer le paquet nginx permet de satisfaire les dépendances et d'être géré par les outils Debian standard.

Scanner database volatility

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 :

  1. Provenance du correctif (vérifiable indépendamment de tout scanner)
  2. Attestation de construction (générée lors de la compilation)
  3. Test de régression (exerce le chemin de code vulnérable)
  4. Suppression VEX (reconnaissance au niveau du scanner)

Les fichiers de scan sauvegardés sont uniquement des preuves ponctuelles.

What scanners see (fixed image)

PackageVersionCVE-2024-6119CVE-2026-42945
libssl33.0.20-1~deb12u1Non signalé (corrigé par version)n/a
nginx1.25.5-1~bookworm+echo1n/aSignalé 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.


Compatibility Test

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).

What is NOT tested

  • Comportement du protocole HTTP/3 QUIC (seule la présence du drapeau --with-http_v3_module est vérifiée ; aucun trafic UDP/QUIC n'est envoyé)
  • Caractéristiques de performance ou de latence sous charge
  • Toutes les directives de configuration possibles de nginx
  • Comportement des modules dynamiques rarement utilisés (GeoIP, image_filter, XSLT) au-delà de la vérification de la présence des fichiers .so sur le disque

Exécution :```bash make test

root@kitploit:~
---

## 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.
  • Conffiles enregistrés auprès de dpkg : /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.
  • postinst crée l’utilisateur/groupe nginx avec uid/gid 101 et shell /bin/false (correspondant à l’amont - vérifié dans la suite de tests).
  • Livre : le binaire nginx, le binaire nginx-debug, les 12 modules .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.

Décisions de conception et compromis

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Télécharger l’outil
ChampValeur
Composantnginx ngx_http_rewrite_module
GravitéMoyenne (classification nginx.org)
Version de basenginx 1.25.5
Corrigé dansnginx 1.30.1 (publié le 2026-05-13)
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-42945
Avishttps://my.f5.com/manage/s/article/K000161019
CHANGES amontnginx 1.30.1 CHANGES : « heap memory buffer overflow in rewrite module »
CatégorieCe qui est comparéNombre d'assertions
Métadonnées d'imageEntrypoint, Cmd, ExposedPorts, User, StopSignal, Env, Labels7
Arguments nginx -VIndicateurs de configuration identiques (normalisés pour le chemin -ffile-prefix-map)1
Modules dynamiquesLes 12 fichiers .so amont présents + lien symbolique /etc/nginx/modules13
Binaire nginx-debug--with-debug et --with-http_v3_module présents dans debug -V2
Structure du système de fichiersEnviron 20 chemins clés, liens symboliques de logs vers /dev/stdout et /dev/stderr~20
Configuration utilisateur/groupeSortie de getent passwd/group nginx identique2
Fichiers de configuration dpkgdpkg-query signale default.conf et nginx.conf comme fichiers de configuration1
Paquet fournitdpkg -s nginx affiche Provides: nginx-r1.25.51
Binaire NJSnjs -v retourne 0.8.41
Point d'entrée IPv610-listen-on-ipv6-by-default.sh modifie default.conf à l'identique1
Modèles EnvsubstLa substitution de modèle NGINX_ENVSUBST produit la même sortie1
Journaux de démarrageToutes les lignes de journal du point d'entrée correspondent au format amont1
HTTP GET/HEAD/POSTLe corps de la réponse, le statut et les en-têtes correspondent pour plusieurs points de terminaison~10
Requête malforméeRéponse d'erreur TCP brute identique1
Service de fichiers statiquesFichier monté servi avec le contenu correct1
Terminaison TLSHTTPS avec certificat auto-signé fonctionne à l'identique1
Arrêt en douceurSIGQUIT produit une sortie propre (code 0)1
Rechargement de configurationSIGHUP applique une nouvelle configuration sans redémarrage1
Requêtes concurrentes50 requêtes parallèles retournent toutes 2001