Blog
NGINXCVE-2026-42530HTTP/3Validazione Continua

NGINX CVE-2026-42530: RCE non autenticato nel reverse proxy davanti a tutto

La patch fuori ciclo di F5 chiude due falle NGINX CVSS 9.2 — CVE-2026-42530 (HTTP/3) e CVE-2026-42055 (HTTP/2 upstream). Perché una RCE nel reverse proxy è la peggiore.

Zero Hunt Research··7 min di lettura

F5 non rilascia patch fuori ciclo a cuor leggero. Il 17 giugno 2026 lo ha fatto, correggendo due vulnerabilità critiche di NGINX — CVE-2026-42530 e CVE-2026-42055, entrambe con punteggio CVSS 9.2 — al di fuori del normale calendario di rilascio, come riportato da BleepingComputer. Entrambe sono raggiungibili da un attaccante remoto e non autenticato. Entrambe corrompono la memoria all'interno del processo worker di NGINX. E NGINX non è un'appliance al perimetro della rete di qualcun altro: secondo il censimento continuo di W3Techs serve il 32,8% di tutti i siti con un web server noto ad aprile 2026, il web server e reverse proxy più diffuso di Internet. Un bug di corruzione di memoria non autenticato in quel ruolo è il bug peggio collocato che esista, e vale la pena spiegare con precisione il perché.

Cosa fanno davvero CVE-2026-42530 e CVE-2026-42055

Le due falle colpiscono percorsi protocollari diversi ma condividono una proprietà: l'attaccante non si autentica mai, e la corruzione finisce nel processo worker che termina le connessioni client.

CVE-2026-42530 è una use-after-free in ngx_http_v3_module, l'implementazione HTTP/3 di NGINX Open Source. Una sessione HTTP/3 costruita ad arte riapre uno stream encoder QPACK che dovrebbe essere già chiuso; NGINX continua a referenziare lo stato dello stream liberato, corrompendo la memoria del worker. L'esito affidabile è il crash e il riavvio del worker — un denial of service. L'esito meno affidabile ma reale, secondo l'advisory di sicurezza di NGINX, è l'esecuzione di codice arbitrario in condizioni specifiche, principalmente dove l'ASLR è disabilitato o aggirabile.

CVE-2026-42055 è un heap buffer overflow in ngx_http_proxy_v2_module e ngx_http_grpc_module, che colpisce sia NGINX Open Source sia NGINX Plus. È raggiungibile specificamente quando NGINX fa da proxy verso un upstream in HTTP/2 — proxy_http_version 2 oppure grpc_pass — con ignore_invalid_headers off e large_client_header_buffers impostato sopra i 2 MB. In quella configurazione un attaccante remoto e non autenticato invia header sovradimensionati o malformati, e NGINX manda in overflow l'heap mentre costruisce la richiesta verso l'upstream. È la più interessante delle due dal punto di vista di un attaccante, perché la corruzione avviene sul percorso in uscita — nel momento in cui NGINX trasforma una richiesta client in una richiesta verso il backend — esattamente la cucitura fidata che la maggior parte delle architetture non pensa mai a difendere.

F5 ha corretto entrambe in NGINX Open Source 1.30.3 e 1.31.2, con le corrispondenti release di NGINX Plus e Gateway Fabric. Al momento della scrittura non risulta alcuno sfruttamento confermato in the wild. È questo il punto che conta di più, e quello che più facilmente verrà letto male.

Il caveat dell'ASLR non è la rassicurazione che sembra

L'advisory HTTP/3 porta con sé una postilla che ha già iniziato a fare opera di conforto nelle chat dei team di sicurezza: l'esecuzione di codice completa richiede che l'ASLR sia disabilitato o aggirato; altrimenti si ottiene "soltanto" un crash. Vale la pena dire con chiarezza cosa questo compra e cosa no.

"È solo un DoS a meno che l'ASLR non sia spento, e il nostro ASLR è acceso."

L'ASLR alza il costo di trasformare una corruzione di memoria in esecuzione di codice. Non la rende impossibile, e la storia dello sfruttamento dei worker NGINX è una storia di ricercatori che concatenano una fuga di informazioni a un overflow per sconfiggere esattamente questa mitigazione. Ancora più importante: l'esito di ripiego è un crash remoto e non autenticato del processo che termina ogni connessione client. Per un reverse proxy davanti a un flusso di pagamento, a un API gateway o a un servizio regolato, un attaccante in grado di riavviare a piacimento il pool di worker non è una nota a piè di pagina: è un incidente di disponibilità ai sensi di NIS2 e DORA, ed è una precondizione su cui lo stesso attaccante può iterare verso il bersaglio più difficile. "È solo un DoS" sta reggendo molto peso in quella frase.

Perché il reverse proxy è il posto peggiore per tutto questo

Un reverse proxy occupa una posizione strutturale che trasforma un comune bug di memoria in un problema di categoria. Tre proprietà si sommano:

  • È esposto a Internet per definizione. L'intero compito di NGINX in questo ruolo è accettare connessioni non fidate da chiunque. Non c'è segmentazione di rete dietro cui nascondersi: la superficie d'attacco è Internet pubblica, deliberatamente.
  • Vede il testo in chiaro. Il proxy termina il TLS, quindi gestisce ogni richiesta e risposta in chiaro, comprese quelle che il tuo livello applicativo cifra end-to-end dal browser. Esecuzione di codice qui significa esecuzione di codice con vista su tutto.
  • È fidato da tutto ciò che sta dietro. Le regole del tuo WAF, l'autenticazione applicativa, l'mTLS del service mesh: spesso trattano il traffico proveniente dal proxy come già verificato. Un attaccante che esegue codice nel worker si trova sul lato fidato di tutti questi controlli, con credenziali e connessioni upstream già stabilite.

È la stessa scomoda lezione che continuano a impartire le altre divulgazioni sull'infrastruttura di frontiera del 2026, e fa rima con la classe di esaurimento risorse HTTP/2 di cui abbiamo scritto: il codice di gestione dei protocolli al perimetro è insieme il più esposto e il più fidato, e questi due fatti sono in tensione permanente.

Il divario di rilevamento che un pentest trimestrale lascia aperto

Ecco il problema operativo che CVE-2026-42055 in particolare crea. La condizione vulnerabile non è "usi NGINX". È "usi NGINX e fai da proxy HTTP/2 verso l'upstream e ignore_invalid_headers è off e large_client_header_buffers supera i 2 MB". Se un dato ambiente sia sfruttabile è una funzione della configurazione, e la configurazione deriva di continuo: un team di piattaforma alza un limite di buffer per risolvere un legittimo upstream con header grandi, e sposta silenziosamente un asset da sicuro a sfruttabile mesi dopo che la CVE era stata "gestita".

Mettiamolo a confronto con il modo in cui la maggior parte delle organizzazioni valida:

Modello di validazione Cosa vede per CVE-2026-42055
Scanner di versione Segnala NGINX sotto la 1.30.3 — ma non sa se la config di questa istanza è nello stato raggiungibile
Pentest annuale / trimestrale Un'istantanea puntuale; la config che ti rende vulnerabile può non esistere il giorno del test, e comparire la settimana dopo
Dashboard delle patch Verde una volta aggiornato il pacchetto — muta sulla config viva che reintroduce il rischio col drift
Validazione comportamentale Invia davvero la sequenza HTTP/2 upstream malformata contro la config in esecuzione e osserva se il worker si corrompe

Uno scanner che legge una stringa di versione e un pentest che gira una volta al trimestre rispondono entrambi a una domanda adiacente a quella che conta. La domanda che conta — può un attaccante raggiungere l'heap overflow contro questo proxy, nella sua configurazione attuale, oggi? — è una domanda comportamentale, e ha una risposta comportamentale solo se qualcosa continua a porla.

Come Zero Hunt affronta una RCE non autenticata sul proxy

È lo scenario per cui è costruito il primo pilastro della piattaforma Zero Hunt — il Pentest Generativo AI. Lo swarm di 10 agenti non controlla una stringa di versione e tira dritto. Per una falla come CVE-2026-42530 o CVE-2026-42055 l'agente Exploit scrive un exploit per-bersaglio contro il proxy così come è effettivamente configurato: ricostruisce la riapertura QPACK malformata in HTTP/3 o la sequenza di header upstream sovradimensionati in HTTP/2 e la lancia contro il tuo NGINX, poi gli agenti Recon e Pivot mappano cosa raggiungerebbe davvero l'esecuzione di codice in quel worker. Ogni exploit è generato localmente dall'LLM on-prem e gira in un container effimero, irrobustito con gVisor, così sondare il tuo proxy in configurazione di produzione non tocca mai l'host. Prima che una tecnica simile raggiunga l'ambiente di un cliente, viene ribacktestata nell'AI Gym contro i corpora Vulhub e Vulhub-Bench, così il motore valida con un metodo già provato su bersagli black-box basati su CVE note, anziché improvvisare.

Poiché la configurazione di NGINX deriva, la cadenza è il punto. Una campagna change-triggered rilancia il controllo quando compare un nuovo asset al perimetro o cambia una config — la differenza tra sapere di essere stati al sicuro il giorno del test e sapere di esserlo ora. Ogni finding è firmato ECDSA al momento della scrittura, così quando l'auditor o l'assicuratore cyber chiede "dimostra che il reverse proxy davanti al flusso di pagamento non era sfruttabile il giorno dell'incidente", la risposta è un record di evidenza verificabile, non un ricordo.

E per la finestra che precede la scrittura e l'esecuzione di un exploit per-bersaglio, il secondo pilastro di Zero Hunt — il modello di AI Traffic Analysis — sorveglia il filo. Le sue quattro teste di inferenza, in esecuzione localmente sulla GPU dell'appliance a velocità multi-gigabit, sono addestrate a segnalare esattamente la forma di traffico che queste falle richiedono: comportamento anomalo degli stream QPACK in HTTP/3, sequenze di header sovradimensionati o malformati su un percorso upstream, e le anomalie di processo del worker che seguono una corruzione riuscita — mentre sta accadendo, non nel digest del SIEM del mattino dopo. CVE-2026-42530 e CVE-2026-42055 non hanno ancora sfruttamento confermato in the wild. Il reverse proxy è il posto sbagliato per scoprire nel modo peggiore che ce l'hanno.

Se il divario è una validazione continua e supportata da evidenze del perimetro esposto a Internet, è la conversazione da iniziare qui.