L'aggiornamento Windows di PHP corregge una vulnerabilità critica di code execution in Brotli
L'aggiornamento Windows di PHP per le versioni dalla 8.2 alla 8.5 sostituisce, nei pacchetti ufficiali del progetto, una copia vulnerabile di Brotli, una libreria che comprime i dati. PHP afferma che CVE-2026-111497, un identificatore Common Vulnerabilities and Exposures usato per tracciare una vulnerabilità di sicurezza, può causare memory corruption e potenzialmente consentire a un aggressore di eseguire codice su un sistema interessato.
PHP afferma che la vulnerabilità è raggiungibile tramite cURL, una libreria software utilizzata dalle applicazioni per effettuare richieste web, quando esegue la automatic decompression di una risposta HTTP. HTTP è il protocollo usato per scambiare richieste e risposte web. La automatic decompression richiede contenuti compressi a un server remoto e poi li decomprime per l'applicazione. cURL non abilita questo comportamento per impostazione predefinita, ma le applicazioni PHP e le librerie client HTTP possono attivarlo.
Nel codice PHP, l'opzione CURLOPT_ENCODING abilita la automatic decompression. Assegnare a questa opzione un valore vuoto indica a cURL di accettare tutti i formati di compressione supportati. Un attacco richiederebbe una risposta compressa appositamente predisposta proveniente da un server contattato dall'applicazione PHP. Ciò rende le applicazioni che recuperano contenuti da server esterni o comunque non attendibili una parte importante dello scenario di esposizione descritto da PHP.
Guzzle, una libreria PHP per l'invio di richieste HTTP, utilizza per impostazione predefinita quel valore vuoto di CURLOPT_ENCODING quando invia richieste tramite cURL, secondo il codice delle release 7.16.1 e 8.3.1. Sulla base di questo comportamento e della spiegazione di PHP, un'applicazione che utilizza le impostazioni predefinite di Guzzle soddisfa la condizione necessaria per raggiungere la vulnerabilità quando viene eseguita sui pacchetti Windows interessati. The Hacker News ha dichiarato di non aver testato questo percorso su un sistema Windows.
I pacchetti corretti sono PHP 8.5.12-1, 8.4.27-1, 8.3.36-1 e 8.2.35-1. Arrivano cinque giorni dopo le release del 21 ottobre che hanno corretto due vulnerabilità PHP2Shell di remote code execution. remote code execution significa che un aggressore può indurre un sistema vulnerabile a eseguire istruzioni. I pacchetti ricompilati mantengono lo stesso codice sorgente PHP e conservano quindi le correzioni precedenti, sostituendo al contempo la libreria di compressione inclusa con Brotli 1.2.1.
Gli amministratori devono prestare attenzione alla build del pacchetto anziché affidarsi alla normale visualizzazione della versione di PHP. L'esecuzione di php -v mostra la stessa versione prima e dopo la sostituzione, perché la versione del codice sorgente PHP non è cambiata. La nuova build è invece identificata da -1 nel nome del file, come php-8.5.12-1-nts-Win32-vs17-x64.zip, e dal valore SHA-256 riportato nella pagina dei download di PHP. SHA-256 è un'impronta digitale che può essere confrontata con un file scaricato per verificare che sia stato ottenuto il pacchetto previsto.
PHP pubblica anche una software bill of materials, ossia un elenco dei componenti inclusi in ogni pacchetto. Gli elenchi relativi alle precedenti build x64 Non Thread Safe di tutti e quattro i branch supportati indicano Brotli 1.2.0, che è interessato dalla vulnerabilità. x64 indica una build a 64 bit, mentre Non Thread Safe è un tipo di pacchetto PHP destinato agli ambienti che non richiedono il supporto thread-safety di PHP.
Le valutazioni della gravità differiscono perché utilizzano versioni diverse del Common Vulnerability Scoring System, o CVSS. Google ha assegnato alla vulnerabilità un punteggio di 9,2 su 10 e l'ha classificata come Critical secondo CVSS 4.0. Red Hat le ha assegnato un punteggio di 8,1 e l'ha classificata come Important secondo CVSS 3.1.
Nelle informazioni citate non risultavano sfruttamenti confermati. I ricercatori di Imperva hanno ottenuto code execution tramite la stessa vulnerabilità di Brotli su una build ufficiale di Node.js, sebbene il loro test abbia richiesto diversi tentativi. L'avviso di PHP non segnala attacchi. Una valutazione del 23 ottobre della Cybersecurity and Infrastructure Security Agency, o CISA, non ha registrato alcuno sfruttamento e, all'aggiornamento di quel giorno, la vulnerabilità non era presente nel catalogo Known Exploited Vulnerabilities di CISA.
I ricercatori di OpenAI hanno scoperto la vulnerabilità e Google ha pubblicato le versioni corrette di Brotli 1.2.1, 1.1.1 e 1.0.10 quando è stata resa nota il 21 ottobre. Anche Node.js, Bun e altri software che includono una propria copia di Brotli hanno pubblicato correzioni. Per i pacchetti Windows ufficiali di PHP, PHP consiglia di installare i download ricompilati.
L'avviso di PHP non fornisce alcun workaround per i sistemi che non possono ancora essere aggiornati. OpenAI consiglia di disabilitare la automatic decompression di Brotli nei client HTTP fino all'installazione del software corretto. Avverte inoltre che la semplice rimozione di br, il valore di Brotli usato nell'header di richiesta Accept-Encoding, non impedisce a un server di inviare una risposta compressa con Brotli.
Per le applicazioni PHP che usano direttamente cURL, seguire questo consiglio significa non impostare CURLOPT_ENCODING, poiché altrimenti cURL non decomprime la risposta. Con Guzzle, le applicazioni possono impostare su false l'opzione di richiesta decode_content. Ciò disabilita tutta la decodifica automatica delle risposte, quindi anche le risposte compresse con gzip rimarranno compresse e dovranno essere gestite di conseguenza. I proprietari di siti web che non gestiscono direttamente PHP dovrebbero chiedere al proprio provider di hosting o IT se sono installati i pacchetti Windows interessati e se è stato applicato il pacchetto ricompilato. Per le organizzazioni che necessitano di supporto esterno durante la verifica degli ambienti interessati, AEU-I offre servizi IT, infrastrutturali e di consulenza incentrati sulla sicurezza.
La priorità immediata è sostituire la build Windows interessata e verificare il nuovo pacchetto tramite il nome del file e il valore SHA-256. Controllare soltanto php -v non è sufficiente, perché la versione di PHP visualizzata rimane invariata dopo questa ricompilazione di sicurezza.