PHP 5.6.40 è l’ultimo rilascio ufficiale del ramo 5.6: è uscito a gennaio 2019, quando il ramo era già arrivato alla fine del supporto di sicurezza. Da allora il progetto PHP non ha più pubblicato nulla per la 5.6, mentre le vulnerabilità scoperte nei rami successivi hanno continuato ad accumularsi. Molte riguardano codice che esiste, uguale o quasi, anche nella 5.6.
In questo articolo apriamo il nostro pacchetto PHP 5.6.40 per Enterprise Linux 6 e mostriamo cosa contiene: quali sono le 55 CVE corrette, da dove arrivano, quali abbiamo aggiunto noi con backport dedicati, che cosa cambia per chi lo installa e come verificare sul proprio server che le correzioni ci siano davvero.
Il pacchetto: PHP 5.6.40-41.ms1 per EL6
Il pacchetto si chiama 5.6.40-41.ms1 e lo pubblichiamo in due famiglie per Enterprise Linux 6, cioè Red Hat Enterprise Linux 6 e CentOS 6:
php-*, che prende il posto del PHP di sistema: stessi nomi dei pacchetti, stessi percorsi, stessa configurazione in/etc/php.inie/etc/php.d/;php56-php-*, nella forma delle collezioni installabili in parallelo, per i server che fanno convivere più versioni di PHP e usano la 5.6 solo per alcune applicazioni.
Il numero di versione dice molto. 5.6.40 è la versione di PHP, che resta quella: chi la interroga con php -v continua a leggere 5.6.40, e il codice delle applicazioni non vede differenze. -41 indica la revisione dei sorgenti del repository Remi da cui partiamo, che per anni ha continuato a raccogliere correzioni di sicurezza per il ramo 5.6. Il suffisso .ms1 identifica la nostra ricostruzione, con le correzioni aggiunte sopra quella base. Le correzioni sono le stesse nelle due famiglie di pacchetti.
55 CVE: 44 ereditate, 11 aggiunte
Il conteggio delle 55 CVE ha due origini. Quarantaquattro correzioni erano già nei sorgenti Remi 5.6.40-41: le abbiamo verificate e mantenute. Undici le abbiamo aggiunte noi, portando sulla 5.6 correzioni pubblicate per i rami moderni tra il 2024 e il 2026.
Le undici correzioni aggiunte da noi sono queste:
| CVE | Componente |
|---|---|
| CVE-2026-109618 | Zend Engine: corruzione dello stato dopo un errore fatale durante un’allocazione (mitigazione) |
| CVE-2026-109619 | Caricamenti e sessioni: session.upload_progress disattivato, filtro degli header multipart |
| CVE-2026-6735 | PHP-FPM: XSS nella pagina di stato |
| CVE-2026-7261 | SOAP: use-after-free con SOAP_PERSISTENCE_SESSION |
| CVE-2026-7262 | SOAP: puntatore nullo con una mappa Apache incompleta |
| CVE-2024-8925 | Lettura errata dei dati multipart/form-data |
| CVE-2024-8926 | CGI: aggiramento della correzione di CVE-2024-4577 |
| CVE-2024-8927 | CGI: aggiramento di cgi.force_redirect |
| CVE-2024-8932 | LDAP: accesso fuori dai limiti in ldap_escape() |
| CVE-2024-11233 | Stream: lettura oltre il buffer in convert.quoted-printable-decode |
| CVE-2024-11234 | Stream: iniezione CRLF con un proxy nel contesto |
Le 44 correzioni ereditate
Le correzioni ereditate coprono le vulnerabilità pubblicate dal 2019 al 2024 per i rami allora supportati. Il gruppo più numeroso riguarda l’estensione exif, che legge i metadati delle immagini: nove CVE, tutte legate alla lettura di dati preparati ad arte, un caso tipico per qualunque sito che accetta immagini caricate dagli utenti. Seguono phar, con quattro CVE tra permessi, use-after-free, blocco del servizio con gzip ricorsivo e un overflow in phar_dir_read(), e i driver dei database: PostgreSQL, mysqlnd, Firebird e PDO::quote.
Nel gruppo ci sono anche vulnerabilità molto note. La CVE-2019-11043 di PHP-FPM, che con alcune configurazioni di nginx permetteva l’esecuzione di codice da remoto, ha un articolo dedicato. La CVE-2021-21703 riguarda una scalata di privilegi in PHP-FPM. Poi ci sono la validazione degli URL, con un caso di SSRF, le entità esterne in XML, i cookie con nomi riservati e con i prefissi __Host- e __Secure-, due difetti di password_verify, mbstring con la libreria oniguruma e alcuni troncamenti dei percorsi al byte nullo.
Le 11 aggiunte, viste da vicino
Le correzioni aggiunte da noi si possono leggere per gruppi, perché ciascun gruppo riguarda un modo diverso di usare PHP.
Caricamenti e richieste multipart
La CVE-2024-8925 riguarda la lettura dei dati multipart/form-data, il formato dei moduli con file allegati. La CVE-2026-109619 tocca lo stesso territorio, insieme alle sessioni. È anche l’unica correzione che cambia un comportamento visibile: nel nostro pacchetto session.upload_progress è disattivato e gli header delle parti multipart vengono filtrati. Chi usa l’avanzamento dei caricamenti tramite sessione, per esempio per mostrare una barra di progresso durante l’invio di un file, deve saperlo prima dell’aggiornamento.
CGI
Le CVE-2024-8926 e CVE-2024-8927 riguardano PHP eseguito come CGI: la prima aggira la correzione della CVE-2024-4577, la seconda l’impostazione cgi.force_redirect. Sui server che usano PHP-FPM o il modulo di Apache il codice coinvolto non è in uso, ma la correzione è nel pacchetto comunque: lo stesso RPM finisce su server configurati in modi diversi.
SOAP, stream e LDAP
Le CVE-2026-7261 e CVE-2026-7262 riguardano l’estensione SOAP: un use-after-free con la persistenza in sessione e un puntatore nullo con una mappa Apache incompleta. Le CVE-2024-11233 e CVE-2024-11234 riguardano gli stream: una lettura oltre il buffer nel filtro convert.quoted-printable-decode e un’iniezione CRLF quando il contesto usa un proxy. La CVE-2024-8932 è un accesso fuori dai limiti in ldap_escape(). Contano solo se l’applicazione usa queste funzioni, ma sono comuni nei gestionali che parlano con altri sistemi.
PHP-FPM e Zend Engine
La CVE-2026-6735 è una XSS nella pagina di stato di PHP-FPM: riguarda chi la espone, anche solo nella rete interna. La CVE-2026-109618 riguarda il cuore dell’interprete, la corruzione dello stato dopo un errore fatale durante un’allocazione di memoria. Qui nel pacchetto c’è una mitigazione, non la correzione completa: riduce il rischio, e la dichiariamo come tale nell’elenco.
Oltre le CVE
Non tutte le correzioni di sicurezza hanno un numero CVE. Nel pacchetto ci sono anche:
- GHSA-4w77-75f9-2c8w, un use-after-free nella lettura dei dati POST quando PHP è eseguito da riga di comando;
- GH-22187, una corruzione della memoria nell’estensione OpenSSL;
- una ventina di correzioni di sicurezza senza CVE già presenti nei sorgenti Remi, soprattutto in exif, phar e pcre.
Per questo il numero 55 va letto come un minimo: conta le correzioni con un identificativo pubblico, non tutto il lavoro di sicurezza contenuto nel pacchetto.
Come portiamo una correzione sulla 5.6
Il metodo è quello che descriviamo nell’articolo sul backport delle patch di sicurezza. Per ogni avviso verifichiamo prima se il codice vulnerabile esiste davvero nel ramo 5.6: il codice di PHP è cambiato molto dalla 7.0 in poi, e una correzione scritta per la 8.x a volte non ha un equivalente, altre volte va riscritta perché le funzioni intorno sono diverse. Poi adattiamo la patch, ricostruiamo i pacchetti per EL6 e li proviamo in un ambiente di prova, con la suite di test dell’interprete e con l’applicazione reale. Quando portare la correzione completa non è possibile senza stravolgere il codice del ramo, applichiamo una mitigazione e la dichiariamo come tale, come per la CVE-2026-109618.
Come verificarlo sul proprio server
Le correzioni sono elencate nel changelog dei pacchetti. Bastano due comandi:
# Versione installata: deve terminare con .ms1
rpm -q php-common php56-php-common 2>/dev/null
# CVE elencate nel changelog (php-* oppure php56-php-*)
rpm -q --changelog php-common | grep -o 'CVE-[0-9]*-[0-9]*' | sort -u | wc -l
rpm -q --changelog php-common | grep -E 'CVE-2024-8925|CVE-2026-109619'
Il numero restituito dal conteggio può essere più alto di 55, perché il changelog porta con sé anche le correzioni dei rilasci ufficiali precedenti alla 5.6.40. Se il server usa la famiglia php56-php-*, il pacchetto da interrogare è php56-php-common.
Che cosa non risolve
Un pacchetto con 55 CVE corrette resta PHP 5.6. Le vulnerabilità che verranno pubblicate da domani andranno valutate e, se riguardano il ramo, corrette con un nuovo backport. Il pacchetto non tocca il resto del server: su EL6 il sistema operativo stesso è fuori dal supporto ordinario, e librerie come OpenSSL hanno i loro problemi, di cui parliamo nell’articolo su PHP su CentOS 6. Infine, il numero 55 conta correzioni applicate e non vulnerabilità sfruttabili su ogni server: alcune riguardano estensioni che un’installazione può non usare, e la CVE-2019-11044, tra quelle ereditate, riguarda solo Windows.
Il pacchetto serve a dare tempo, in sicurezza, a chi deve pianificare la migrazione verso un ramo supportato. Se vuoi capire quali di queste correzioni contano per i tuoi server, o hai PHP 5.6 su un’altra distribuzione, scrivici indicando sistema operativo e versione dei pacchetti installati.
Riassumendo
Il nostro pacchetto PHP 5.6.40-41.ms1 per EL6, nelle famiglie php-* e php56-php-*, corregge 55 CVE: 44 ereditate dai sorgenti Remi 5.6.40-41 e 11 aggiunte da noi con backport dedicati, su caricamenti multipart, CGI, SOAP, stream, LDAP, PHP-FPM e Zend Engine. A queste si aggiungono due correzioni con identificativi GitHub e una ventina di correzioni senza CVE. Una sola cambia un comportamento visibile, la disattivazione di session.upload_progress, e una è dichiarata come mitigazione. Il changelog dei pacchetti permette di verificare tutto sul server, e il ramo resta quello che è: una 5.6 messa in sicurezza, in attesa della migrazione.