
Quellgebauter nginx 1.25.5 Container mit zurückportiertem CVE-2026-42945 Fix, OpenSSL-Update, vollständiger Provenienzkette und VEX-Attestierung.
| CVE | Komponente | Schweregrad | Technik | Verifikationsmodell |
|---|
| CVE-2024-6119 | OpenSSL / libssl3 | Hoch | Versionsanhebung | Scanner-verifizierbar: libssl3 3.0.20 sichtbar in der dpkg-Datenbank |
| CVE-2026-42945 | nginx ngx_http_rewrite_module | Kritisch | Quellcode-Backport | Herkunftsverifizierbar: Patch-Ableitung + Regressionstest + Build-Attestation + VEX |
Diese repräsentieren zwei unterschiedliche Behebungsmodelle:
Die nginx -V-Konfigurationsargumente dieses Images stimmen mit denen von
nginx:1.25-bookworm überein (verglichen Zeichen für Zeichen nach Normalisierung des
Build-Pfades -ffile-prefix-map; verifiziert in test/compat.py::test_nginx_version).
Die Testsuite (make test) validiert 89 Assertions, die Imagemetadaten,
dynamische Module, Dateisystemlayout, Entrypoint-Verhalten, dpkg-Paketierung und
HTTP-Anfragebearbeitung gegenüber dem Live-Upstream-Image abdecken.
Bekannte Unterschiede zum Upstream (nicht als identisch validiert):
built with OpenSSL X.X.X in nginx -V spiegelt die libssl-dev-Version des
Builders wider, die sich vom compile-time OpenSSL des Upstreams unterscheiden kann.debian:bookworm-slim Basis anstelle des vom
offiziellen Image geerbten Paketbaums.libssl3 ist die, die bookworm derzeit bietet (3.0.20 zum
Zeitpunkt des Schreibens), nicht die festgelegte Version im Upstream-Image.make image
make test
make test-cve
make verify-patch
make scan
Ein Befehl zum Erstellen, Testen und Scannen:```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)
## Build-Prozess
### Architektur```
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/
Das Containerfile kopiert /etc/nginx NICHT von upstream. Alle Konfigurationsdateien werden innerhalb des .deb ausgeliefert und vom Conffile-Mechanismus von dpkg verfolgt. Dies ist erforderlich für das Einstiegspunkt-Skript 10-listen-on-ipv6-by-default.sh, das dpkg-query verwendet, um zu erkennen, ob default.conf vom Benutzer geändert wurde.
./configure && make in einem sauberen Debian-Container. Keine Upstream-Binärdateien, kein apt install nginx.build.sh ruft nur festgelegte Quellarchive ab.Der Build ist größtenteils reproduzierbar, aber nicht hermetisch:
Dockerfile.build aufgelistet, aber nicht versioniert festgelegt.Um die Reproduzierbarkeit zu verbessern, fixieren Sie den Digest des Basis-Images:```bash docker pull debian:bookworm-slim docker inspect debian:bookworm-slim --format='{{index .RepoDigests 0}}'
---
## Details zur CVE-Behebung
### CVE-2024-6119 - OpenSSL-Versionssprung
| Feld | Wert |
| -------------------- | ---------------------------------------------------- |
| **Komponente** | OpenSSL / libssl3 |
| **Schweregrad** | Hoch (CVSS 7.5) |
| **Typ** | Denial-of-Service durch X.509-Namensprüfungen |
| **Basisversion** | 3.0.11-1~deb12u2 |
| **Behobene Version** | 3.0.14-1~deb12u2 (oder später) |
| **Unsere Version** | 3.0.20-1~deb12u1 |
| **NVD** | https://nvd.nist.gov/vuln/detail/CVE-2024-6119 |
| **Advisory** | https://openssl-library.org/news/secadv/20240903.txt |
**Wie der Fix funktioniert:**
Das `.deb`-Paket deklariert `Depends: libssl3 (>= 3.0.14)`, was erzwingt, dass
`apt-get install` eine OpenSSL-Version zieht, die den Fix enthält. Die aktuellen
Debian-Bookworm-Repositories bieten 3.0.20, das CVE-2024-6119 sowie Dutzende
anderer OpenSSL-CVEs gegenüber der Basisversion behebt (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).
**Scanner-Verhalten:** Grype und Trivy sehen `libssl3 3.0.20` in der dpkg-Datenbank und erkennen, dass 3.0.20 ≥ 3.0.14 ist, sodass CVE-2024-6119 nicht mehr gemeldet wird. Kein VEX nötig – der Versionssprung ist selbsterklärend.
**Überprüfung:**```bash
grep "CVE-2024-6119" baseline-grype.txt # present
grep "CVE-2024-6119" fixed-grype.txt # absent
| Feld | Wert |
|---|---|
| Komponente | nginx ngx_http_rewrite_module |
| Schweregrad | Mittel (Klassifizierung nginx.org) |
| Basisversion | nginx 1.25.5 |
| Behoben in | nginx 1.30.1 (veröffentlicht 2026-05-13) |
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2026-42945 |
| Advisory | https://my.f5.com/manage/s/article/K000161019 |
| Upstream-Änderungen | nginx 1.30.1 CHANGES: „heap memory buffer overflow in rewrite module“ |
Sicherheitslücke:
ngx_http_script_regex_end_code() in src/http/ngx_http_script.c setzte
e->is_args beim Verarbeiten eines Rewrite-Regex-Ergebnisses nicht zurück. Falls
is_args durch eine vorherige Script-Engine-Operation gesetzt worden war, wären
nachfolgende Berechnungen der Pufferlänge im Redirect-/Rewrite-Pfad inkorrekt,
was einen Heap-Buffer-Overflow mit von einem Angreifer kontrollierter Größe über
präparierte Anfrage-URIs verursachen würde.
Der Fix (eine Zeile):```c // Added before the existing e->quote = 0; at line 1205 e->is_args = 0;
**Patch-Herkunft:**
| Nachweis | Ort / Wert |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Upstream-Commit | [`2046b45aa0c6e712c216b9075886f3f26e9b4ca9`](https://github.com/nginx/nginx/commit/2046b45aa0c6e712c216b9075886f3f26e9b4ca9) |
| Upstream-Autor | Roman Arutyunyan (arut), committed von Sergey Kandaurov (pluknet), 2026-05-13 |
| Upstream-PR | [nginx/nginx#1350](https://github.com/nginx/nginx/pull/1350) |
| Upstream-Tags | `release-1.31.0`, `release-1.30.1` |
| Verwandter früherer Fix | [`74d9399`](https://github.com/nginx/nginx/commit/74d939974d430a2c2e71b0134114d2a7b04dcc20) (2012, ähnliches `is_args` Escape-Problem) |
| Patch-Datei | `build/patches/CVE-2026-42945.patch` |
| Provenienz-Metadaten | `build/patches/CVE-2026-42945.provenance.json` |
| Quell-Tarball (anfällig) | `https://nginx.org/download/nginx-1.25.5.tar.gz` SHA256:`2fe2294f8af4144e7e842eaea884182a84ee7970e...` |
| Quell-Tarball (behoben) | `https://nginx.org/download/nginx-1.30.1.tar.gz` SHA256:`99765000d974896b31ca5882d8c279ce3fe7ef6f...` |
| SHA256 der anfälligen Datei | `c4b10c95b00e43d731a61f2380d406155e037f3cfb40a3bf58711ecefddc799a` |
| SHA256 der behobenen Datei | `a6182175a22d88f66b9a61ae051bdcfece10d1bb2e643f7f175eb07589143403` |
| Ableitungsmethode | `diff src/http/ngx_http_script.c` zwischen den beiden Tarballs (bestätigt identisch mit dem Upstream-Commit) |
| Geänderte Zeilen | 1 (nur Hinzufügung) |
| Patch lässt sich sauber anwenden | Verifiziert: `patch --dry-run -p1 < build/patches/CVE-2026-42945.patch` beendet mit 0 |
| Build-Zeit-Überprüfung | `build.sh` überprüft, ob `e->is_args = 0` nach dem Patchen im Quellcode vorhanden ist, bricht Build ab, wenn nicht |
| Build-Zeit-Bescheinigung | Geschrieben in `artifacts/patch-attestation.json` während des Builds |
| Regressionstest | `test/test_cve_2026_42945.py` - testet den anfälligen Codepfad |
| Patch-Überprüfungsskript | `make verify-patch` - leitet den Patch unabhängig von den Upstream-Tarballs erneut ab |
**Wie der Patch erstellt wurde:**
1. `nginx-1.25.5.tar.gz` heruntergeladen (SHA256 gegen festgelegten Hash verifiziert)
2. `nginx-1.30.1.tar.gz` heruntergeladen (SHA256 verifiziert: `99765000d974896b31ca5882d8c279ce3fe7ef6f5c6f9f0a967ed7fd3407f9cc`)
3. `diff src/http/ngx_http_script.c` zwischen den beiden Bäumen ausgeführt
4. Der Diff erzeugte genau eine Zeile - die `e->is_args = 0;`-Hinzufügung
5. Als Unified-Diff-Patch mit Kontextzeilen extrahiert
6. Verifiziert, dass der Patch sauber auf nginx 1.25.5 angewendet werden kann
7. Beide Quellbäume werden in `research/` zur unabhängigen Überprüfung aufbewahrt
**Regressionstests:**
Die Testsuite `test/test_cve_2026_42945.py` testet den anfälligen Codepfad, indem sie Anfragen durch Rewrite-Regeln sendet, die den Query-String-Zustand (`is_args`) manipulieren. Sie validiert:
- Rewrite-Weiterleitungen mit nachgestelltem `?` (Query-Entfernung) erzeugen wohlgeformte Antworten
- Verkettete Rewrites, die den `is_args`-Zustand umschalten, lassen den Worker nicht abstürzen
- Lange Query-Strings (4KB+) verursachen keine Pufferüberlauf-Artefakte (Null-Bytes, überlange Location-Header)
- 100 schnelle gemischte Anfragen verursachen keine Worker-Abstürze
- Der Worker-Prozess überlebt alle Testfälle ohne SIGSEGV oder Heap-Korrruption
Ausführen: `make test-cve`
**Scanner-Verhalten:**
Da die Paketversion `1.25.5` bleibt, werden Scanner CVE-2026-42945 melden, wenn das Advisory in ihrer Datenbank vorhanden ist. Dies ist erwartet - Scanner gleichen nach `(package-name, upstream-version)` ab und können nicht überprüfen, ob der Quellcode gepatcht wurde. Das VEX-Dokument unterdrückt diesen Befund mit maschinenlesbarer Begründung. Die Scanner-Unterdrückung ist ein Kommunikationsmechanismus, nicht der primäre Nachweis der Behebung. Der primäre Nachweis ist die Patch-Provenienz-Kette und der Regressionstest oben.
---
## VEX (Vulnerability Exploitability eXchange)
### Warum VEX benötigt wird
Scanner identifizieren Pakete anhand von `(name, version)` aus der dpkg-Datenbank. Unser Paket ist `nginx 1.25.5-1~bookworm+echo1` - Scanner parsen dies als Upstream-Version 1.25.5 und melden alle CVEs, die nginx ≤ 1.25.5 betreffen.
Bei zurückportierten Fixes kann der Scanner nicht feststellen, dass der anfällige Code gepatcht wurde. Die Version bleibt absichtlich 1.25.5, um die Paketkompatibilität zu wahren. VEX bietet eine maschinenlesbare Bescheinigung, dass das CVE behoben wurde, verknüpft mit überprüfbaren Beweisen.
### VEX-Glaubwürdigkeitskette
Die VEX-Aussage für CVE-2026-42945 ist KEIN bloßes Papierkram. Sie wird gestützt durch:
1. **Patch-Provenienz** - `build/patches/CVE-2026-42945.provenance.json` dokumentiert die genaue Upstream-Quelle, Ableitungsmethode und Datei-Hashes
2. **Build-Zeit-Überprüfung** - `build.sh` stellt sicher, dass der Fix-Marker im kompilierten Quellcode vorhanden ist, und bricht den Build bei Fehlschlag ab
3. **Build-Bescheinigung** - `artifacts/patch-attestation.json` zeichnet die Datei-Hashes vor/nach dem Patchen auf, die während des Builds erzeugt werden
4. **Regressionstest** - `test/test_cve_2026_42945.py` testet den anfälligen Codepfad ohne Absturz oder Korruption
5. **Unabhängige Neuableitung** - `make verify-patch` lädt beide Upstream-Tarballs herunter und zeigt, dass der eingereichte Patch der minimale Sicherheits-Diff ist
### Was das VEX abdeckt
| CVE | Status | Begründung | Beweise |
| -------------- | ------- | ----------------------------- | ---------------------------------------------------------- |
| CVE-2026-42945 | `fixed` | `vulnerable_code_not_present` | Backport-Patch + Provenienz + Regressionstest + Build-Gate |
Der VEX-Bereich ist bewusst eng gefasst: Nur CVEs, die dieses Projekt aktiv mit überprüfbaren Beweisen behoben hat, werden abgedeckt. Befunde, die lediglich "voraussichtlich gemildert" von der ausgelieferten Version werden, werden nicht unterdrückt - dies vermeidet die Verwendung von VEX als pauschales Unterdrückungswerkzeug.
### Wie es funktioniert
Das Skript `build/generate-vex.sh` erzeugt ein OpenVEX v0.2.0-Dokument. Der Scanner-Befehl zum Anwenden:```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
Die VEX-Unterdrückung ist in gespeicherten Scan-Artefakten beobachtbar. Beachten Sie, dass Scanner-Datenbanken regelmäßig neu aufgebaut werden und das Vorhandensein von CVEs zwischen den Läufen variieren kann. Die gespeicherten Dateien baseline-grype.txt und fixed-grype.txt sind punktuelle Beweise. Die Gültigkeit des VEX-Dokuments hängt NICHT vom Zustand der Scanner-Datenbank ab – sie ist unabhängig über die oben genannte Provenienzkette verifizierbar.
Das Paket heißt nginx (nicht nginx-custom). Dies ist kritisch, weil:
nginx ermöglicht es, Abhängigkeiten zu erfüllen und mit standardmäßigen Debian-Werkzeugen verwaltet zu werden.Scanner-Beratungsdatenbanken werden regelmäßig neu aufgebaut. Ein CVE, das eine Woche vorhanden ist, kann nächste Woche fehlen. Dieses Projekt verlässt sich NICHT auf die Scanner-Ausgabe als primären Nachweis der Behebung. Die Beweiskette ist:
Gespeicherte Scan-Dateien sind nur punktuelle Beweise.
| Package | Version | CVE-2024-6119 | CVE-2026-42945 |
|---|---|---|---|
| libssl3 | 3.0.20-1~deb12u1 | Nicht gemeldet (durch Version behoben) | n/a |
| nginx | 1.25.5-1~bookworm+echo1 | n/a | Gemeldet, wenn in DB (Backport für Scanner unsichtbar) |
Mit --vex vex.json wird der CVE-2026-42945-Fund (falls in der Scanner-DB vorhanden) unterdrückt. Die Gültigkeit des VEX-Dokuments wird durch die Provenienzkette (Patch-Ableitung, Build-Attestierung, Regressionstest) festgestellt, nicht allein durch die Scanner-Ausgabe.
Die Testsuite (test/compat.py) startet sowohl nginx:1.25-bookworm als auch nginx-fixed als Docker-Container und vergleicht das Verhalten. Jede Behauptung testet direkt das live fixierte Image gegen das live Upstream-Image.
89 Tests. Alle bestanden.
Zusätzlich bietet test/test_cve_2026_42945.py ~20 Assertions speziell für den zurückportierten CVE-Fix (siehe "Regressionstest" oben).
| Kategorie | Was verglichen wird | Anzahl der Assertions |
|---|---|---|
| Image-Metadaten | Entrypoint, Cmd, ExposedPorts, User, StopSignal, Env, Labels | 7 |
| nginx -V-Argumente | Konfigurationsflags identisch (normalisiert für -ffile-prefix-map-Pfad) | 1 |
| Dynamische Module | Alle 12 upstream .so-Dateien vorhanden + Symlink /etc/nginx/modules | 13 |
| nginx-debug-Binärdatei | --with-debug und --with-http_v3_module in debug -V vorhanden | 2 |
| Dateisystemlayout | ~20 wichtige Pfade, Log-Symlinks zu /dev/stdout und /dev/stderr | ~20 |
| Benutzer-/Gruppenkonfiguration | getent passwd/group nginx Ausgabe identisch | 2 |
| dpkg-Konfigurationsdateien | dpkg-query meldet default.conf und nginx.conf als Konfigurationsdateien | 1 |
| Paket bietet | dpkg -s nginx zeigt Provides: nginx-r1.25.5 | 1 |
| NJS-Binärdatei | njs -v gibt 0.8.4 zurück | 1 |
| IPv6-Entrypoint | 10-listen-on-ipv6-by-default.sh ändert default.conf identisch | 1 |
| Envsubst-Vorlagen | Template-Substitution von NGINX_ENVSUBST erzeugt gleiche Ausgabe | 1 |
| Startprotokolle | Alle Entrypoint-Logzeilen stimmen mit dem Upstream-Format überein | 1 |
| HTTP GET/HEAD/POST | Antwortkörper, Status, Header stimmen für mehrere Endpunkte überein | ~10 |
| Fehlerhafte Anfrage | Rohe TCP-Fehlerantwort identisch | 1 |
| Statische Dateiauslieferung | Eingehängte Datei mit korrektem Inhalt ausgeliefert | 1 |
| TLS-Terminierung | HTTPS mit selbstsigniertem Zertifikat funktioniert identisch | 1 |
| Sanftes Herunterfahren | SIGQUIT erzeugt sauberen Exit (Code 0) | 1 |
| Konfigurationsneuladung | SIGHUP wendet neue Konfiguration ohne Neustart an | 1 |
--with-http_v3_module wird überprüft; es wird kein UDP/QUIC-Verkehr gesendet).so-Dateien auf der Platte vorhanden sindRun:```bash make test
## Bildgröße
| Bild | Größe (arm64, `docker images`) |
| ------------------- | ------------------------------ |
| `nginx:1.25-bookworm` | ~278 MB |
| `nginx-fixed` | ~332 MB |
Das feste Image ist größer als das offizielle. Das ist zu erwarten: das offizielle Image verwendet vorkompilierte Binärdateien in optimierten Layern, während unseres Build-Artefakte und vollständige Laufzeitabhängigkeiten (einschließlich Bibliotheken für alle 12 dynamischen Module) in eine `debian:bookworm-slim`-Basis installiert. Der Größenunterschied ist ein Kompromiss für Build-Kontrolle auf Quellcode-Ebene, keine Regression in der Funktionalität.
---
## Restrisikobewertung
### Im festen Image verbleibende CVEs
Das feste Image enthält immer noch Schwachstellen in Systembibliotheken, die von diesem Projekt nicht behoben werden (Stand; führen Sie `make scan` für den aktuellen Stand aus):
| Risikostufe | Paket | CVE(s) | Anmerkungen |
| ----------- | --------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| Hoch | nginx | CVE-2023-44487 | Im nginx ≥ 1.25.3 pro Upstream gemildert; Scanner markiert immer noch, da der Debian-Tracker den Sicherheitshinweis nicht geschlossen hat |
| Kritisch | libgnutls30 | CVE-2026-42010, CVE-2026-33845 | Kein Fix in bookworm verfügbar |
| Kritisch | libc6/libc-bin | CVE-2026-5450 | Wird in dieser Debian-Version nicht behoben |
| Hoch | libc6/libc-bin | CVE-2026-5928, CVE-2026-5435, CVE-2026-4437 | glibc wird nicht behoben für bookworm |
| Hoch | dpkg | CVE-2025-6297, CVE-2026-2219 | Behebbar (Upgrade auf 1.21.23) |
| Hoch | libldap-2.5-0 | CVE-2023-2953 | Wird nicht behoben |
| Hoch | curl/libcurl4 | CVE-2026-5773, CVE-2026-6276 | Wird nicht behoben |
| Hoch | ncurses | CVE-2025-69720 | Wird nicht behoben |
Diese werden von `debian:bookworm-slim` geerbt und liegen außerhalb des Rahmens der nginx-fokussierten CVE-Behebung dieses Projekts.
### Einschränkungen dieses Ansatzes
1. **Nicht hermetic.** Basis-Image und apt-Pakete werden zur Build-Zeit aus Live-Debian-Repositories aufgelöst. Das Pinnen des Basis-Image-SHA und die Verwendung von apt-Snapshots würden die Reproduzierbarkeit verbessern.
2. **Keine verhaltensbezogenen QUIC-Tests.** HTTP/3-Unterstützung ist kompiliert (durch Flag verifiziert), aber es wird kein QUIC-Verkehr in der Testsuite durchgeführt.
3. **Keine Leistungsvalidierung.** Der Test mit 50 gleichzeitigen Anfragen beweist die Korrektheit, nicht den Durchsatz oder die Latenzäquivalenz.
4. **Nur Modulladung.** Dynamische Module (GeoIP, image_filter, XSLT) werden als vorhanden und ladbar verifiziert, aber ihr Funktionsverhalten wird über das grundlegende Laden hinaus nicht getestet.
5. **Nur Single-Architektur-Nachweise.** Tests werden nur auf der Build-Host-Architektur ausgeführt (arm64 in der Entwicklung; CI für Multi-Arch wäre nötig).
### Zukünftige Verbesserungen (nicht implementiert)
1. Basis-Image-Digest pinnen und apt-Snapshot-URLs für hermetic Builds verwenden.
2. Unnötige Pakete (ncurses, util-linux) entfernen, die als transitive Abhängigkeiten hereinkommen.
3. SBOM generieren (`make sbom`-Ziel existiert, verwendet `syft`) und über SBOM-Purl mit VEX verknüpfen.
4. Das Image mit `cosign` signieren und VEX + SBOM + Patch-Attestation als OCI-Attestationen anhängen.
5. CI-Pipeline (GitHub Actions) für automatisiertes Build → Test → Scan → Push hinzufügen.
6. HTTP/3-Protokolltest (QUIC-Client, Zertifikatseinrichtung, UDP-Port) hinzufügen.
7. Distroless-Basis in Betracht ziehen, um OS-Level-CVE-Rauschen vollständig zu eliminieren.
8. ASan (AddressSanitizer)-Build-Variante hinzufügen, um zu beweisen, dass es unter Testlast keine Heap-Korruption gibt.
---
## Build-Flags vs. Upstream
Die `./configure`-Flags in `build.sh` sind identisch mit denen, die von `nginx -V` im offiziellen `nginx:1.25-bookworm`-Image gemeldet werden. Dies wird durch `test/compat.py::test_nginx_version` überprüft, das den `-ffile-prefix-map=<Pfad>`-Unterschied normalisiert und die verbleibenden Flags zeichenweise vergleicht.
Bemerkenswerte Flags (alle in beiden Images vorhanden):
| Flag / Feature | Zweck |
| ------------------------- | -------------------------------------------------------------------------------- |
| `--prefix=/etc/nginx` | Docker-Image-Konvention (nicht Debians `/usr/share/nginx`) |
| `--with-http_v3_module` | Integrierter QUIC-Stack (unabhängig von der OpenSSL-QUIC-API) |
| `--with-pcre` (PCRE2) | Verknüpft mit `libpcre2-8-0` (nicht veraltetem PCRE1) |
| `--with-stream` | TCP/UDP-Proxy-Modul (dynamisch) |
| Sicherheitshärtung | `-fstack-protector-strong`, `FORTIFY_SOURCE=2`, RELRO, PIE |
| Dynamische Module (×12) | geoip, stream_geoip, image_filter, xslt, http_js, stream_js (release + debug) |
| `--with-debug` (debug) | nginx-debug-Binärdatei separat mit identischen Flags + Debug gebaut |
---
## Debian-Paket
Die `.deb`-Paket-Metadaten:```
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
libssl3 (>= 3.0.14) – erfordert explizit ein gepatchtes OpenSSL (Upstream deklariert >= 3.0.0). Dies ist der Mechanismus, der den Fix für CVE-2024-6119 erzwingt.Provides: nginx-r1.25.5 – erfüllt die Abhängigkeiten dynamischer Modulpakete, die von diesem virtuellen Paket abhängen./etc/nginx/nginx.conf und /etc/nginx/conf.d/default.conf. Dies wird für die Überprüfung des IPv6-Entrypoint-Skripts mittels dpkg-query --showformat benötigt./bin/false (entspricht dem Upstream – im Testsuite verifiziert)..so-Module, vollständigen /etc/nginx-Konfigurationsbaum, init.d/systemd/logrotate-Dateien, Handbuchseite, HTML-Standardseiten und den Symlink /etc/nginx/modules → /usr/lib/nginx/modules.nginx, nicht nginx-custom. Bei einer Umbenennung würden Scanner es nicht mit nginx-Advisories abgleichen – alle nginx-CVEs würden stillschweigend aus den Berichten verschwinden, einschließlich ungefixter. Die Beibehaltung des Namens nginx gewährleistet ehrliche Scannerberichte und macht VEX sinnvoll.libssl3 (>= 3.0.14) als Paketabhängigkeit. Anstatt darauf zu hoffen, dass die Laufzeitumgebung zufällig ein gepatchtes OpenSSL enthält, erzwingt das .deb eine Version, die den Fix für CVE-2024-6119 enthält.| Gleichzeitige Anfragen | 50 parallele Anfragen geben alle 200 zurück | 1 |