Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
nginx-cve-fix — Container nginx 1.25.5 costruito da sorgente con fix backportato per CVE-2026-42945, aggiornamento di OpenSSL, catena di provenienza completa e attestazione VEX. | Kitploit
Strumenti/GitHubGitHub/barappteam/nginx-cve-fix
Scanner di VulnerabilitàSicurezza dei ContenitoriAnalisi delle VulnerabilitàAudit di ConfigurazioneDevSecOpsSicurezza della Supply Chain
GitHubbarappteam/nginx-cve-fix

nginx-cve-fix

Container nginx 1.25.5 costruito da sorgente con fix backportato per CVE-2026-42945, aggiornamento di OpenSSL, catena di provenienza completa e attestazione VEX.

Vedi Repository
33 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Nginx CVE Fix - Drop-in compilato dafonte per nginx:1.25-bookworm

Un'immagine contenitore nginx 1.25.5 compilata da fonte che corregge due CVE presenti nell'immagine ufficiale nginx:1.25-bookworm mantenendo il comportamento runtime a monte.

CVEComponenteGravitàTecnicaModello di verifica
CVE-2024-6119OpenSSL / libssl3AltaAggiornamento versione dipendenzaVerificabile dallo scanner: libssl3 3.0.20 visibile nel database dpkg
CVE-2026-42945nginx ngx_http_rewrite_moduleCriticaPatch fonte backportataVerificabile dalla provenienza: derivazione patch + test di regressione + attestazione build + VEX

Queste rappresentano due modelli di correzione distinti:

  1. Aggiornamento versione (CVE-2024-6119) - la versione della libreria corretta è direttamente visibile agli scanner tramite il database dpkg. Nessuna attestazione aggiuntiva necessaria.
  2. Backport sorgente (CVE-2026-42945) - la versione del pacchetto rimane 1.25.5, quindi gli scanner non possono distinguere il binario corretto da quello non corretto. La correzione è dimostrata attraverso la provenienza del sorgente, la verifica in fase di build e i test di regressione. VEX fornisce il segnale a livello di scanner.

Stato di parità

Gli argomenti di configurazione nginx -V di questa immagine corrispondono a quelli di nginx:1.25-bookworm (confrontati carattere per carattere dopo aver normalizzato il percorso di build -ffile-prefix-map; verificato in test/compat.py::test_nginx_version). La suite di test (make test) convalida 89 affermazioni che coprono metadati dell'immagine, moduli dinamici, layout del filesystem, comportamento dell'entrypoint, packaging dpkg e gestione delle richieste HTTP rispetto all'immagine a monte in esecuzione.

Differenze note rispetto a monte (non validate come identiche):

  • La riga built with OpenSSL X.X.X in nginx -V riflette la versione libssl-dev del builder, che potrebbe differire dalla OpenSSL a tempo di compilazione di monte.
  • Il contenuto binario non è identico byte per byte (ambiente di compilazione diverso, timestamp di invocazione del toolchain differenti).
  • Il set di pacchetti dell'immagine differisce: base debian:bookworm-slim anziché l'albero di pacchetti ereditato dall'immagine ufficiale.
  • La versione runtime di libssl3 è quella attualmente fornita da bookworm (3.0.20 al momento della scrittura), non la versione bloccata nell'immagine a monte.

Avvio rapido```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:~
Un comando per compilare, testare e scansionare:```bash
make all

Struttura del Repository```

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:~
## Processo di Build

### Architettura```
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/

Il Containerfile NON copia /etc/nginx da upstream. Tutti i file di configurazione sono distribuiti all'interno del .deb e tracciati dal meccanismo conffile di dpkg. Questo è necessario per lo script di entrypoint 10-listen-on-ipv6-by-default.sh, che utilizza dpkg-query per rilevare se default.conf è stato modificato dall'utente.

Garanzie di Integrità

  • Tarball sorgenti: Tutti gli archivi sorgente (nginx, NJS) vengono verificati con SHA256 rispetto a hash hardcoded prima dell'estrazione. La build si interrompe in caso di mancata corrispondenza.
  • Build dal sorgente: ./configure && make all'interno di un container Debian pulito. Nessun binario upstream, nessun apt install nginx.
  • Nessun accesso alla rete durante la compilazione: le dipendenze sono installate nel layer dell'immagine Docker builder; build.sh recupera solo gli archivi sorgente bloccati.

Riproducibilità

La build è per lo più riproducibile ma non ermetica:

  • La versione e lo SHA256 del sorgente nginx sono bloccati e verificati prima dell'estrazione.
  • La versione e lo SHA256 di NJS sono bloccati e verificati prima dell'estrazione.
  • Le dipendenze del builder sono elencate in Dockerfile.build ma non bloccate per versione.
  • I pacchetti runtime Debian vengono risolti dai repository live bookworm al momento della build, quindi le versioni minori possono variare tra build diverse.

Per migliorare la riproducibilità, blocca il digest dell'immagine 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:~
---

## Dettagli sulla Correzione delle CVE

### CVE-2024-6119 - Aggiornamento della Versione di OpenSSL

| Campo                | Valore                                                |
| -------------------- | ---------------------------------------------------- |
| **Componente**       | OpenSSL / libssl3                                    |
| **Gravità**         | Alta (CVSS 7.5)                                      |
| **Tipo**            | Denial of Service tramite controlli del nome X.509   |
| **Versione di base** | 3.0.11-1~deb12u2                                     |
| **Versione corretta** | 3.0.14-1~deb12u2 (o successiva)                      |
| **Nostra versione**  | 3.0.20-1~deb12u1                                     |
| **NVD**              | https://nvd.nist.gov/vuln/detail/CVE-2024-6119       |
| **Avviso**           | https://openssl-library.org/news/secadv/20240903.txt |

**Come funziona la correzione:**

Il pacchetto `.deb` dichiara `Depends: libssl3 (>= 3.0.14)`, il che forza
`apt-get install` a tirare una versione di OpenSSL che include la correzione. Gli
attuali repository di Debian bookworm forniscono la versione 3.0.20, che risolve la CVE-2024-6119 e
decine di altre CVE di OpenSSL rispetto alla versione di 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).

**Comportamento dello scanner:** Grype e Trivy vedono `libssl3 3.0.20` nel database
dpkg e riconoscono che 3.0.20 ≥ 3.0.14, quindi la CVE-2024-6119 non viene più
segnalata. Nessun VEX necessario – l'incremento di versione è auto-evidente.

**Verifica:**```bash
grep "CVE-2024-6119" baseline-grype.txt  # present
grep "CVE-2024-6119" fixed-grype.txt     # absent

CVE-2026-42945 - Patch Backportata

FieldValue
Componentenginx ngx_http_rewrite_module
GravitàMedia (classificazione nginx.org)
Versione di basenginx 1.25.5
Corretto innginx 1.30.1 (rilasciato il 2026-05-13)
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-42945
Avvisohttps://my.f5.com/manage/s/article/K000161019
Modifiche a montenginx 1.30.1 CHANGES: "overflow del buffer di memoria heap nel modulo rewrite"

Vulnerabilità:

ngx_http_script_regex_end_code() in src/http/ngx_http_script.c non riusciva a resettare e->is_args durante l'elaborazione di un risultato regex di rewrite. Se is_args veniva impostato da un'operazione precedente del motore script, i successivi calcoli della lunghezza del buffer nel percorso di redirect/rewrite sarebbero errati, causando un overflow del buffer di memoria heap di dimensione controllabile dall'attaccante tramite URI di richiesta manipolati.

La correzione (una riga):```c // Added before the existing e->quote = 0; at line 1205 e->is_args = 0;

root@kitploit:~
**Provenienza della patch:**

| Evidenza                    | Posizione / Valore                                                                                                                     |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Commit upstream             | [`2046b45aa0c6e712c216b9075886f3f26e9b4ca9`](https://github.com/nginx/nginx/commit/2046b45aa0c6e712c216b9075886f3f26e9b4ca9)         |
| Autore upstream             | Roman Arutyunyan (arut), commesso da Sergey Kandaurov (pluknet), 2026-05-13                                                         |
| PR upstream                 | [nginx/nginx#1350](https://github.com/nginx/nginx/pull/1350)                                                                         |
| Tag upstream               | `release-1.31.0`, `release-1.30.1`                                                                                                   |
| Fix correlato precedente           | [`74d9399`](https://github.com/nginx/nginx/commit/74d939974d430a2c2e71b0134114d2a7b04dcc20) (2012, problema simile di escaping di `is_args`) |
| File della patch                  | `build/patches/CVE-2026-42945.patch`                                                                                                 |
| Metadati di provenienza         | `build/patches/CVE-2026-42945.provenance.json`                                                                                       |
| Tarball sorgente (vulnerabile) | `https://nginx.org/download/nginx-1.25.5.tar.gz` SHA256:`2fe2294f8af4144e7e842eaea884182a84ee7970e...`                               |
| Tarball sorgente (corretto)      | `https://nginx.org/download/nginx-1.30.1.tar.gz` SHA256:`99765000d974896b31ca5882d8c279ce3fe7ef6f...`                                |
| SHA256 del file vulnerabile      | `c4b10c95b00e43d731a61f2380d406155e037f3cfb40a3bf58711ecefddc799a`                                                                   |
| SHA256 del file corretto           | `a6182175a22d88f66b9a61ae051bdcfece10d1bb2e643f7f175eb07589143403`                                                                   |
| Metodo di derivazione           | `diff src/http/ngx_http_script.c` tra i due tarball (confermato identico al commit upstream)                                  |
| Righe modificate               | 1 (solo aggiunta)                                                                                                                    |
| La patch si applica correttamente       | Verificato: `patch --dry-run -p1 < build/patches/CVE-2026-42945.patch` esce con 0                                                         |
| Verifica in fase di build     | `build.sh` verifica che `e->is_args = 0` sia presente nel sorgente dopo l'applicazione della patch, interrompe la build in caso contrario                                        |
| Attestazione in fase di build      | Scritto in `artifacts/patch-attestation.json` durante la build                                                                             |
| Test di regressione             | `test/test_cve_2026_42945.py` - esercita il percorso di codice vulnerabile                                                                   |
| Script di verifica della patch   | `make verify-patch` - deriva indipendentemente la patch dai tarball upstream                                                      |

**Come è stata creata la patch:**

1. Scaricato `nginx-1.25.5.tar.gz` (SHA256 verificato rispetto all'hash fissato)
2. Scaricato `nginx-1.30.1.tar.gz` (SHA256 verificato: `99765000d974896b31ca5882d8c279ce3fe7ef6f5c6f9f0a967ed7fd3407f9cc`)
3. Eseguito `diff src/http/ngx_http_script.c` tra i due alberi
4. Il diff ha prodotto esattamente una riga - l'aggiunta di `e->is_args = 0;`
5. Estratto come patch diff unificata con righe di contesto
6. Verificato che la patch si applica correttamente a nginx 1.25.5
7. Entrambi gli alberi sorgente sono conservati in `research/` per verifica indipendente

**Test di regressione:**

La suite di test `test/test_cve_2026_42945.py` esercita il percorso di codice
vulnerabile inviando richieste attraverso regole di riscrittura che manipolano
lo stato della stringa di query (`is_args`). Valida:

- I redirect di riscrittura con `?` finale (rimozione query) producono risposte ben formate
- Le riscritture concatenate che alternano lo stato di `is_args` non causano il crash del worker
- Le stringhe di query lunghe (4KB+) non causano artefatti di buffer overflow (byte nulli, header Location eccessivamente lunghi)
- 100 richieste miste rapide non causano crash del worker
- Il processo worker sopravvive a tutti i casi di test senza SIGSEGV o corruzione dell'heap

Esegui: `make test-cve`

**Comportamento dello scanner:**

Poiché la versione del pacchetto rimane `1.25.5`, gli scanner segnaleranno CVE-2026-42945
quando l'avviso è presente nel loro database. Questo è previsto - gli scanner
corrispondono per `(package-name, upstream-version)` e non possono ispezionare
se il codice sorgente è stato corretto. Il documento VEX sopprime questo risultato
con una giustificazione leggibile dalla macchina. La soppressione dello scanner è un
meccanismo di comunicazione, non la prova primaria della correzione. La prova primaria
è la catena di provenienza della patch e il test di regressione sopra.

---

## VEX (Vulnerability Exploitability eXchange)

### Perché VEX è necessario

Gli scanner identificano i pacchetti tramite `(name, version)` dal database dpkg.
Il nostro pacchetto è `nginx 1.25.5-1~bookworm+echo1` - gli scanner lo parsano come
versione upstream 1.25.5 e segnalano tutte le CVE che colpiscono nginx ≤ 1.25.5.

Per le correzioni backportate, lo scanner non può determinare che il codice
vulnerabile sia stato corretto. La versione rimane intenzionalmente 1.25.5 per
preservare la compatibilità del pacchetto. VEX fornisce un'attestazione leggibile
dalla macchina che la CVE è stata affrontata, collegata a prove verificabili.

### Catena di credibilità VEX

La dichiarazione VEX per CVE-2026-42945 NON è semplice burocrazia. È supportata da:

1. **Provenienza della patch** - `build/patches/CVE-2026-42945.provenance.json`
   documenta la fonte upstream esatta, il metodo di derivazione e gli hash dei file
2. **Verifica in fase di build** - `build.sh` asserisce che il marcatore della correzione è presente
   nel sorgente compilato, interrompendo la build in caso di fallimento
3. **Attestazione della build** - `artifacts/patch-attestation.json` registra
   gli hash dei file pre/post-patch generati durante la build
4. **Test di regressione** - `test/test_cve_2026_42945.py` esercita il percorso di codice
   vulnerabile senza crash o corruzione
5. **Riderivazione indipendente** - `make verify-patch` scarica entrambi i tarball
   upstream e dimostra che la patch committata è il diff di sicurezza minimale

### Cosa copre il VEX

| CVE            | Stato   | Giustificazione                 | Evidenza                                                   |
| -------------- | ------- | ----------------------------- | ---------------------------------------------------------- |
| CVE-2026-42945 | `fixed` | `vulnerable_code_not_present` | Patch backportata + provenienza + test di regressione + blocco di build |

L'ambito del VEX è intenzionalmente ristretto: vengono coperte solo le CVE che
questo progetto ha attivamente corretto con prove verificabili. I risultati
che sono meramente "previsti come mitigati" dalla versione distribuita non
vengono soppressi - questo evita di usare VEX come strumento di soppressione
generalizzato.

### Come funziona

Lo script `build/generate-vex.sh` produce un documento OpenVEX v0.2.0.
Il comando dello scanner per applicarlo:

---```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 soppressione VEX è osservabile negli artefatti di scansione salvati. Nota che i database degli scanner vengono ricostruiti periodicamente e la presenza di CVE può variare tra le esecuzioni. I file salvati baseline-grype.txt e fixed-grype.txt sono prove puntuali. La validità del documento VEX NON dipende dallo stato del database dello scanner: è verificabile indipendentemente tramite la catena di provenienza sopra.


Integrità dello scanner

Decisione sulla denominazione del pacchetto

Il pacchetto si chiama nginx (non nginx-custom). Questo è fondamentale perché:

  1. Rapporto onesto: Se il pacchetto fosse rinominato, gli scanner non lo riconoscerebbero come nginx e TUTTE le CVE di nginx scomparirebbero silenziosamente, incluse quelle non corrette. Questo dà un falso senso di sicurezza.
  2. Dimostrazione VEX: VEX può sopprimere solo una CVE che lo scanner effettivamente segnala. I pacchetti rinominati rendono VEX superfluo (e non testabile).
  3. Gestione dei pacchetti: Chiamarlo nginx gli consente di soddisfare le dipendenze e di essere gestito dagli strumenti standard di Debian.

Volatilità del database dello scanner

I database degli advisory degli scanner vengono ricostruiti periodicamente. Una CVE presente una settimana potrebbe essere assente la successiva. Questo progetto NON si basa sull'output dello scanner come prova principale della correzione. La catena di evidenze è:

  1. Provenienza della patch (verificabile indipendentemente da qualsiasi scanner)
  2. Attestazione in fase di build (generata durante la compilazione)
  3. Test di regressione (esercita il percorso del codice vulnerabile)
  4. Soppressione VEX (riconoscimento a livello di scanner)

I file di scansione salvati sono prove solo istantanee.

Cosa vedono gli scanner (immagine corretta)

PackageVersioneCVE-2024-6119CVE-2026-42945
libssl33.0.20-1~deb12u1Non segnalata (corretta per versione)n/a
nginx1.25.5-1~bookworm+echo1n/aSegnalata se presente nel DB (backport invisibile allo scanner)

Con --vex vex.json, la segnalazione di CVE-2026-42945 (se presente nel DB dello scanner) viene soppressa. La validità del documento VEX è stabilita dalla catena di provenienza (derivazione della patch, attestazione di build, test di regressione), non solo dall'output dello scanner.


Test di compatibilità

La suite di test (test/compat.py) avvia sia nginx:1.25-bookworm che nginx-fixed come container Docker e confronta i comportamenti. Ogni asserzione testa direttamente l'immagine live corretta contro l'immagine live upstream.

89 asserzioni. Tutte superate.

Inoltre, test/test_cve_2026_42945.py fornisce circa 20 asserzioni specificamente mirate alla correzione CVE backportata (vedi "Test di regressione" sopra).

CategoriaCosa viene confrontatoConteggio asserzioni
Metadati dell'immagineEntrypoint, Cmd, ExposedPorts, User, StopSignal, Env, Labels7
Argomenti nginx -VFlag di configurazione identici (normalizzati per percorso -ffile-prefix-map)1
Moduli dinamiciTutti i 12 file .so upstream presenti + symlink /etc/nginx/modules13
Binario nginx-debug--with-debug e --with-http_v3_module presenti nel debug -V2
Layout del filesystem~20 percorsi chiave, symlink dei log verso /dev/stdout e /dev/stderr~20
Configurazione utente/gruppoOutput di getent passwd/group nginx identico2
Conffiles dpkgdpkg-query segnala default.conf e nginx.conf come conffiles1
Fornitura del pacchettodpkg -s nginx mostra Provides: nginx-r1.25.51
Binario NJSnjs -v restituisce 0.8.41
Entrypoint IPv610-listen-on-ipv6-by-default.sh modifica default.conf in modo identico1
Template EnvsubstLa sostituzione dei template NGINX_ENVSUBST produce lo stesso output1
Log di avvioTutte le righe di log dell'entrypoint corrispondono al formato upstream1
HTTP GET/HEAD/POSTCorpo della risposta, stato, intestazioni corrispondono per più endpoint~10
Richiesta malformataRisposta di errore TCP raw identica1
Servizio file staticiFile montato servito con contenuto corretto1
Terminazione TLSHTTPS con certificato self-signed funziona in modo identico1
Spegnimento gradualeSIGQUIT produce uscita pulita (codice 0)1
Ricarica configurazioneSIGHUP applica nuova configurazione senza riavvio1

Cosa NON viene testato

  • Comportamento del protocollo HTTP/3 QUIC (viene verificata solo la presenza del flag --with-http_v3_module; non viene inviato traffico UDP/QUIC)
  • Caratteristiche di prestazioni o latenza sotto carico
  • Tutte le possibili direttive di configurazione di nginx
  • Comportamento di moduli dinamici poco usati (GeoIP, image_filter, XSLT) oltre alla verifica che i file .so siano presenti sul disco

Esegui:```bash make test

root@kitploit:~
---

## Dimensione dell'immagine

| Immagine               | Dimensione (arm64, `docker images`) |
| ---------------------- | ----------------------------------- |
| `nginx:1.25-bookworm`  | ~278 MB                             |
| `nginx-fixed`          | ~332 MB                             |

L'immagine fissa è più grande di quella upstream. Ciò è previsto: l'immagine ufficiale utilizza binari precompilati in layer ottimizzati, mentre la nostra installa artefatti di build e dipendenze di runtime complete (incluse le librerie per tutti i 12 moduli dinamici) in una base `debian:bookworm-slim`. La differenza di dimensione è un compromesso per il controllo della build a livello di sorgente, non una regressione di funzionalità.

---

## Valutazione del rischio residuo

### CVE rimanenti nell'immagine fissa

L'immagine fissa contiene ancora vulnerabilità nelle librerie di sistema non affrontate da questo progetto (istantanea; esegui `make scan` per lo stato attuale):

| Livello di rischio | Pacchetto       | CVE                                          | Note                                                                                                                   |
| ------------------ | --------------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| Alto               | nginx           | CVE-2023-44487                               | Mitigato in nginx ≥ 1.25.3 secondo upstream; lo scanner lo segnala ancora perché il tracker Debian non ha chiuso il bollettino |
| Critico            | libgnutls30     | CVE-2026-42010, CVE-2026-33845               | Nessuna correzione disponibile in bookworm                                                                             |
| Critico            | libc6/libc-bin  | CVE-2026-5450                                | Non verrà risolto in questa release Debian                                                                             |
| Alto               | libc6/libc-bin  | CVE-2026-5928, CVE-2026-5435, CVE-2026-4437 | glibc non verrà risolto per bookworm                                                                                   |
| Alto               | dpkg            | CVE-2025-6297, CVE-2026-2219                 | Risolvibile (aggiornamento a 1.21.23)                                                                                  |
| Alto               | libldap-2.5-0   | CVE-2023-2953                                | Non verrà risolto                                                                                                      |
| Alto               | curl/libcurl4   | CVE-2026-5773, CVE-2026-6276                 | Non verrà risolto                                                                                                      |
| Alto               | ncurses         | CVE-2025-69720                               | Non verrà risolto                                                                                                      |

Queste sono ereditate da `debian:bookworm-slim` e sono al di fuori dell'ambito della mitigazione CVE incentrata su nginx di questo progetto.

### Limiti di questo approccio

1. **Non ermetico.** L'immagine di base e i pacchetti apt vengono risolti al momento della build dai repository Debian live. Fissare lo SHA dell'immagine di base e utilizzare snapshot apt migliorerebbe la riproducibilità.
2. **Nessun test comportamentale QUIC.** Il supporto HTTP/3 è compilato (verificato dal flag) ma nessun traffico QUIC viene esercitato nella suite di test.
3. **Nessuna validazione delle prestazioni.** Il test con 50 richieste concorrenti dimostra la correttezza, non l'equivalenza di throughput o latenza.
4. **Solo caricamento dei moduli.** I moduli dinamici (GeoIP, image_filter, XSLT) vengono verificati come presenti e caricabili, ma il loro comportamento funzionale non viene testato oltre il caricamento di base.
5. **Evidenza su singola architettura.** I test vengono eseguiti solo sull'architettura dell'host di build (arm64 in sviluppo; servirebbe CI per multi-arch).

### Miglioramenti futuri (non implementati)

1. Fissare il digest dell'immagine di base e utilizzare URL di snapshot apt per build ermetiche.
2. Eliminare i pacchetti non necessari (ncurses, util-linux) tirati come dipendenze transitive.
3. Generare SBOM (il target `make sbom` esiste, usa `syft`) e collegare a VEX tramite SBOM purl.
4. Firmare l'immagine con `cosign` e allegare VEX + SBOM + attestazione di patch come attestazioni OCI.
5. Aggiungere pipeline CI (GitHub Actions) per build → test → scan → push automatizzati.
6. Aggiungere test del protocollo HTTP/3 (client QUIC, configurazione certificato, porta UDP).
7. Considerare una base distroless per eliminare completamente il rumore CVE a livello di sistema operativo.
8. Aggiungere variante di build ASan (AddressSanitizer) per dimostrare assenza di corruzione dell'heap sotto carico di test.

---

## Flag di build vs. upstream

I flag `./configure` in `build.sh` sono identici a quelli riportati da `nginx -V` nell'immagine ufficiale `nginx:1.25-bookworm`. Ciò è verificato da `test/compat.py::test_nginx_version`, che normalizza la differenza `-ffile-prefix-map=<path>` e confronta i flag rimanenti carattere per carattere.

Flag degni di nota (tutti presenti in entrambe le immagini):

| Flag / funzionalità              | Scopo                                                                             |
| -------------------------------- | --------------------------------------------------------------------------------- |
| `--prefix=/etc/nginx`            | Convenzione dell'immagine Docker (non `/usr/share/nginx` di Debian)               |
| `--with-http_v3_module`          | Stack QUIC integrato (indipendente dall'API QUIC di OpenSSL)                      |
| `--with-pcre` (PCRE2)            | Collega con `libpcre2-8-0` (non il legacy PCRE1)                                  |
| `--with-stream`                  | Modulo proxy TCP/UDP (dinamico)                                                   |
| Security hardening               | `-fstack-protector-strong`, `FORTIFY_SOURCE=2`, RELRO, PIE                       |
| Moduli dinamici (×12)            | geoip, stream_geoip, image_filter, xslt, http_js, stream_js (release + debug)     |
| `--with-debug` (debug)           | binario nginx-debug costruito separatamente con flag identici + debug             |

---

## Pacchetto Debian

I metadati del pacchetto `.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

Decisioni chiave per il confezionamento:

  • libssl3 (>= 3.0.14) - richiede esplicitamente OpenSSL con patch (upstream dichiara >= 3.0.0). Questo è il meccanismo che applica la correzione per CVE-2024-6119.
  • Provides: nginx-r1.25.5 - soddisfa i pacchetti di moduli dinamici che dipendono da questo pacchetto virtuale.
  • Conffiles registrati con dpkg: /etc/nginx/nginx.conf e /etc/nginx/conf.d/default.conf. Questo è richiesto per il controllo dpkg-query --showformat dello script di entrypoint IPv6.
  • postinst crea utente/gruppo nginx con uid/gid 101 e shell /bin/false (coerente con upstream - verificato nella suite di test).
  • Include: binario nginx, binario nginx-debug, tutti i 12 moduli .so, l'intero albero di configurazione /etc/nginx, file init.d/systemd/logrotate, pagina man, file HTML predefiniti e il collegamento simbolico /etc/nginx/modules → /usr/lib/nginx/modules.

Decisioni di progettazione e compromessi

  1. Pacchetto denominato nginx, non nginx-custom. Se rinominato, gli scanner non lo abbinerebbero agli advisory di nginx - tutti i CVE di nginx scomparirebbero silenziosamente dai report, inclusi quelli non corretti. Mantenere il nome nginx garantisce una segnalazione onesta dello scanner e rende VEX significativo.

  2. VEX richiede visibilità del CVE. Lo scopo di VEX è sopprimere un CVE già segnalato. Se lo scanner non trova il CVE (a causa di ridenominazione del pacchetto o tempistiche del DB), VEX non ha nulla da sopprimere.

  3. libssl3 (>= 3.0.14) come dipendenza del pacchetto. Piuttosto che sperare che la base runtime abbia per caso un OpenSSL con patch, il .deb richiede esplicitamente una versione che contenga la correzione per CVE-2024-6119.

  4. Volatilità del database dello scanner. I database degli advisory vengono ricostruiti periodicamente. Un CVE presente una settimana potrebbe essere assente la successiva. I file di scansione salvati in questo repository sono prove puntuali; le scansioni attuali potrebbero differire.

  5. Strumenti AI utilizzati. GitHub Copilot ha assistito nell'analisi delle patch (confrontando gli alberi sorgente di nginx 1.25.5 e 1.30.1), nella struttura della suite di test, nell'identificazione del problema di elusione dello scanner dovuto alla ridenominazione del pacchetto e nella redazione del documento VEX. I dettagli del pacchetto Debian e le euristiche di corrispondenza delle versioni di Grype hanno richiesto verifica manuale.

Scarica lo strumento
Richieste concorrenti50 richieste parallele restituiscono tutte 2001