È stata rilasciata la versione principale della branch nginx 1.31.0, nella quale continuano a essere sviluppate nuove funzionalità, insieme al rilascio della branch stabile parallela nginx 1.30.1, alla quale vengono apportate solo modifiche volte a risolvere seri bug e vulnerabilità. Negli aggiornamenti sono state corrette 6 vulnerabilità, la più pericolosa delle quali consente l'esecuzione remota di codice tramite l'invio di una richiesta HTTP appositamente formattata. Per angie e freenginx, al momento della scrittura di questa notizia, le correzioni non sono state pubblicate.
La vulnerabilità (CVE-2026-42945), classificata con un livello di pericolo critico, è causata da un overflow di buffer nel modulo ngx_http_rewrite_module, che può essere sfruttata per eseguire codice con i privilegi del processo nginx tramite l'invio di una richiesta HTTP con un URI appositamente formattato. Il problema si manifesta in configurazioni con la direttiva 'rewrite', in cui le espressioni regolari utilizzano sostituzioni di maschere tramite variabili senza nome (ad esempio, $1 e $2), a condizione che nella stringa di sostituzione sia presente il simbolo '?'. Un esempio di una costruzione vulnerabile: rewrite ^\/users\/([0-9]+)\/profile\/(.*)$ \/profile.php?id=$1&tab=$2 last;
Le espressioni con sostituzioni nominate non sono vulnerabili. Ad esempio, la vulnerabilità non interessa costruzioni come: rewrite ^\/users\/(?[0-9]+)\/profile\/(?
La vulnerabilità è presente a partire dalla versione 0.6.27, rilasciata a marzo 2008. La causa della vulnerabilità è stata che il buffer veniva allocato presupponendo che vi sarebbero stati scritti dati non sanitizzati, mentre venivano effettivamente copiati dati dopo l'esecuzione della sanitizzazione dei caratteri speciali, la cui dimensione era maggiore, poiché ogni carattere '+', '%' e '&' veniva codificato non come un singolo byte, ma come tre byte. Questo disallineamento si verificava perché quando nel regolamento rewrite era presente il carattere '?', veniva impostato il flag 'e->is_args', che attivava la sanitizzazione, ma l'allocazione del buffer avveniva con il flag resettato, dove la sanitizzazione non veniva applicata.
Altre vulnerabilità:
- CVE-2026-42926 — possibilità di sostituzione dei dati dell'attaccante nella richiesta proxy quando si utilizza la direttiva 'proxy_set_body' nelle impostazioni e ci si collega al backend tramite HTTP/2 (proxy_http_version=2).
- CVE-2026-40701 — accesso alla memoria dopo la sua liberazione (use-after-free) nel modulo ngx_http_ssl_module, che si verifica durante l'elaborazione delle risposte dal server DNS nelle configurazioni con la direttiva «ssl_ocsp».
- CVE-2026-42946 — lettura da un'area oltre il limite del buffer nei moduli ngx_http_uwsgi_module e ngx_http_scgi_module, che si verifica durante l'elaborazione di una risposta appositamente formattata. Il problema può portare a una perdita di contenuto della memoria del processo di lavoro o a una sua terminazione anomala.
- CVE-2026-42934 — lettura da un'area oltre il limite del buffer nel processo di lavoro, che si verifica durante l'elaborazione delle risposte con decodifica dalla codifica UTF-8 utilizzando la direttiva «charset_map». Il problema può portare a una perdita di contenuto della memoria del processo di lavoro o a una sua terminazione anomala.
- CVE-2026-40460 — vulnerabilità nell'implementazione del protocollo HTTP/3, che consente spoofing Indirizzi IP per eludere l'autenticazione o le restrizioni.
Miglioramenti aggiunti nella versione nginx 1.31.0:
- È stato incluso il modulo ngx_http_tunnel_module, che implementa la possibilità di funzionare come proxy («forward proxy»), reindirizzando le richieste a un altro server quando un cliente invia una richiesta utilizzando il metodo HTTP/1.1 CONNECT. È possibile configurare l'autenticazione delle richieste al proxy, utilizzando le direttive «auth_basic», «satisfy» e «auth_delay».
- Nella sezione «upstream» è stata aggiunta la direttiva «least_time», che include un metodo di bilanciamento del carico con invio della richiesta server con il minor tempo medio di risposta e il minor numero di connessioni attive.
- Nel modulo «stream_proxy» è stata aggiunta la direttiva «proxy_ssl_alpn» per specificare l'elenco dei protocolli consentiti nell'estensione ALPN durante la connessione al server proxy. Ad esempio: «proxy_ssl_alpn h2 http/1.1».
- È stato garantito il rifiuto delle richieste nei protocolli HTTP/2 e HTTP/3, che includono le intestazioni «Connection», «Proxy-Connection», «Keep-Alive», «Transfer-Encoding», «Upgrade».
- Nel modulo ngx_http_dav_module è stato garantito il rifiuto delle richieste COPY e MOVE con risorse sorgente e di destinazione duplicate o raccolte annidate.
- Il livello di registrazione degli errori SSL «invalid alert», «record layer failure» e «SSL alert number N» è stato abbassato da «crit» a «info».
- Nel script configure è stato aggiunto il parametro «—without-http_upstream_sticky_module» per disabilitare la compilazione del modulo http_upstream_sticky_module (il parametro «—without-http_upstream_sticky» è stato dichiarato obsoleto).
Aggiornamento: È disponibile un exploit per la vulnerabilità RCE nel ngx_http_rewrite_module.
Fonte: opennet.ru
