Le 55 CVE corrette su PHP 5.6.40: cosa abbiamo trovato e come le abbiamo chiuse

Dentro il nostro pacchetto PHP 5.6.40-41.ms1 per EL6: le 55 CVE corrette, 44 ereditate dai sorgenti Remi e 11 aggiunte con backport dedicati, cosa cambia per chi lo installa e come verificarlo sul server.

Copertina con il logo php∞, la categoria Sicurezza e CVE, il titolo Le 55 CVE corrette su PHP 5.6.40 e il numero 10

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.ini e /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.

Griglia di 55 quadrati, uno per ogni CVE corretta nel pacchetto PHP 5.6.40-41.ms1 per EL6: 44 quadrati azzurri per le correzioni ereditate dai sorgenti Remi 5.6.40-41 e 11 viola per quelle aggiunte da PHP Legacy con backport dedicati, relative a CVE dal 2024 al 2026. A lato le correzioni senza numero CVE: GHSA-4w77-75f9-2c8w sui dati POST in CLI, GH-22187 sulla memoria in OpenSSL e circa 20 correzioni dei sorgenti Remi in exif, phar e pcre. In basso le due famiglie di pacchetti, php-* e php56-php-*, per EL6
Quarantaquattro correzioni ereditate e verificate, undici aggiunte con backport dedicati.

Le undici correzioni aggiunte da noi sono queste:

CVEComponente
CVE-2026-109618Zend Engine: corruzione dello stato dopo un errore fatale durante un’allocazione (mitigazione)
CVE-2026-109619Caricamenti e sessioni: session.upload_progress disattivato, filtro degli header multipart
CVE-2026-6735PHP-FPM: XSS nella pagina di stato
CVE-2026-7261SOAP: use-after-free con SOAP_PERSISTENCE_SESSION
CVE-2026-7262SOAP: puntatore nullo con una mappa Apache incompleta
CVE-2024-8925Lettura errata dei dati multipart/form-data
CVE-2024-8926CGI: aggiramento della correzione di CVE-2024-4577
CVE-2024-8927CGI: aggiramento di cgi.force_redirect
CVE-2024-8932LDAP: accesso fuori dai limiti in ldap_escape()
CVE-2024-11233Stream: lettura oltre il buffer in convert.quoted-printable-decode
CVE-2024-11234Stream: iniezione CRLF con un proxy nel contesto
Le 11 CVE corrette con backport aggiunti da PHP Legacy nel pacchetto 5.6.40-41.ms1.

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.

Barre orizzontali con le 55 CVE corrette raggruppate per area del codice, distinguendo le correzioni ereditate dai sorgenti Remi (azzurro) da quelle aggiunte da PHP Legacy (viola): exif 9 ereditate; stream, URL e rete 6, di cui 2 aggiunte; caricamenti e sessioni 5, di cui 2 aggiunte; SOAP 4, di cui 2 aggiunte; phar 4; database (pgsql, mysqlnd, Firebird, PDO) 4; PHP-FPM 3, di cui 1 aggiunta; CGI 2, entrambe aggiunte; XML 2; mbstring e oniguruma 2; cookie 2; password_verify 2; altre aree (Zend Engine, LDAP, gd, iconv, bcmath, percorsi) 10, di cui 2 aggiunte
Exif è l’area più colpita; le correzioni aggiunte si concentrano su caricamenti, stream, SOAP e CGI.

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.

IL PROSSIMO PASSO

Mettiamo
in sicurezza.

Indicaci versione di PHP, sistema operativo e cosa ti preoccupa. Ti risponderemo con una valutazione dell’esposizione e una proposta di intervento.

Richiedi supporto

Ti porta al modulo di richiesta, in quattro passi.

PHP LEGACY · MANAGED SERVER S.R.L.info@phplegacy.it +39 02 5656 9681

Lunedì – venerdì · 09:30 – 19:30

Urgenza in corso? Reperibilità H24
+39 340 985 4556 ↗