Il 21 ottobre 2026 il team di sicurezza di PHP ha pubblicato un aggiornamento straordinario per correggere due vulnerabilità critiche che possono consentire l’esecuzione di codice da remoto senza autenticazione. La notizia riguarda potenzialmente un numero enorme di applicazioni: dai siti WordPress ai negozi online, fino ai gestionali aziendali sviluppati su misura.
Le vulnerabilità, identificate come CVE-2026-109618 e CVE-2026-109619 e indicate collettivamente come PHP2Shell, hanno ricevuto entrambe un punteggio CVSS 4.0 di 9,2 su 10. Non si tratta di una falla in un plugin o in un framework: il problema interessa il motore PHP, cioè il componente che esegue il codice dell’applicazione sul server.
La conseguenza è importante: anche un sito sviluppato correttamente può essere esposto se viene eseguito con una versione PHP vulnerabile. Vediamo cosa è successo, quali installazioni richiedono attenzione e come affrontare l’aggiornamento senza mettere a rischio il funzionamento dei servizi esistenti.
Due vulnerabilità nel cuore dell’interprete PHP
PHP elabora le richieste ricevute dal web server e gestisce, durante l’esecuzione, dati, variabili e strutture interne in memoria. Le due vulnerabilità pubblicate il 21 ottobre riguardano proprio questa gestione.
La CVE-2026-109618 è collegata alla gestione delle condizioni di memoria esaurita (out of memory). In determinate circostanze, un’interruzione può verificarsi quando alcuni dati interni della richiesta non sono ancora stati inizializzati completamente. Le successive operazioni di pulizia rischiano così di trattare come valide informazioni che non lo sono.
La CVE-2026-109619 riguarda invece uno stato interno che può sopravvivere alla liberazione della memoria cui faceva riferimento. Una richiesta successiva, gestita dallo stesso processo PHP, può incontrare quel riferimento non più valido prima che venga ripristinato il normale stato iniziale.
In condizioni sfruttabili, entrambi i problemi possono arrivare all’esecuzione remota di codice (Remote Code Execution, RCE). Questo non significa che ogni installazione vulnerabile sia già stata compromessa, né che l’attacco riesca automaticamente in qualunque configurazione. Significa però che il rischio è sufficientemente grave da richiedere un intervento urgente.
Il bollettino ufficiale del PHP Security Team indica come potenzialmente interessate le installazioni che servono richieste web, comprese quelle basate su PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP e LiteSpeed. Il rischio viene considerato particolarmente elevato con mod_php, per il quale è stato dimostrato uno scenario di sfruttamento attivabile prima dell’esecuzione del codice applicativo.
Quali versioni sono coinvolte?
Il progetto PHP ha distribuito quattro release di sicurezza. Chi utilizza uno dei rami elencati deve verificare di avere installato almeno la versione correttiva corrispondente.
| Ramo PHP | Versione correttiva |
|---|---|
| PHP 8.5 | 8.5.12 |
| PHP 8.4 | 8.4.27 |
| PHP 8.3 | 8.3.36 |
| PHP 8.2 | 8.2.35 |
Il discorso è più delicato per PHP 8.1 e precedenti, che non ricevono più aggiornamenti di sicurezza dal progetto PHP. Alcuni fornitori di sistemi operativi possono applicare correzioni alle proprie versioni attraverso il backporting, mantenendo un numero di versione apparentemente vecchio. In questi casi è necessario verificare i bollettini e i pacchetti effettivamente distribuiti dal fornitore, anziché basarsi soltanto sul numero restituito dal server.
Va considerato anche il ciclo di vita delle release: PHP 8.2 terminerà il supporto ufficiale il 31 dicembre 2026. La patch 8.2.35 risolve l’emergenza attuale, ma chi usa questo ramo dovrebbe già pianificare il passaggio a una versione più recente. Le date sono riportate nella pagina ufficiale delle versioni PHP supportate.
Come verificare la versione PHP utilizzata dal sito
La prima verifica è semplice, ma richiede un’accortezza: su uno stesso server possono coesistere più installazioni PHP. La versione usata da terminale non coincide necessariamente con quella che esegue il sito web.
Con accesso SSH, il comando seguente mostra la versione PHP disponibile nella shell:
php -v
È un buon punto di partenza, non una verifica definitiva. Un’applicazione può utilizzare PHP-FPM con una versione differente. Per individuare i processi PHP-FPM in esecuzione si può utilizzare:
ps -eo pid,ppid,args | grep '[p]hp-fpm'
Occorre poi controllare la configurazione del virtual host, del pool PHP-FPM o del pannello di hosting per identificare l’interprete realmente associato al sito. Se l’ambiente è gestito da un provider, può essere necessario chiedere conferma della presenza delle patch di sicurezza, soprattutto quando vengono utilizzati pacchetti con correzioni retroportate.
Su WordPress la versione PHP utilizzata dall’applicazione è normalmente visibile in Strumenti → Salute del sito → Informazioni → Server. È un controllo utile anche per chi non dispone di accesso SSH.
Il CERT-AGID ha inoltre segnalato strumenti di verifica dedicati a PHP2Shell. Bisogna però interpretarne i risultati con attenzione: un controllo remoto basato sugli header HTTP può non identificare correttamente la versione in uso, mentre la presenza di un numero di versione precedente non dimostra da sola l’assenza di patch distribuite dal fornitore.
Come mettere in sicurezza il server
La risposta indicata dal PHP Security Team è netta: non esistono mitigazioni complete e l’aggiornamento è l’unica soluzione sicura. Un firewall applicativo, regole più restrittive o sistemi di monitoraggio possono ridurre l’esposizione, ma non correggono il difetto presente nell’interprete.
Su un sito in produzione, tuttavia, aggiornare non dovrebbe significare intervenire alla cieca. La procedura corretta parte da una verifica dell’ambiente e termina con il collaudo delle funzionalità applicative.
Prima dell’aggiornamento
È opportuno predisporre un backup verificato di file e database, identificare la versione PHP realmente utilizzata, controllare estensioni e dipendenze e, quando possibile, riprodurre l’ambiente in staging. Per applicazioni con dati aziendali o processi critici, serve anche un piano di ripristino nel caso emergano incompatibilità.
Installazione delle correzioni
Su Debian e Ubuntu, se PHP è gestito tramite APT, è possibile iniziare verificando gli aggiornamenti disponibili:
sudo apt update
apt list --upgradable
Questi comandi non installano automaticamente la correzione: mostrano soltanto i pacchetti disponibili nei repository configurati. Prima di procedere è necessario verificare che il fornitore abbia effettivamente pubblicato una release corretta per la propria distribuzione e per la versione PHP in uso.
Dopo l’installazione, i processi che eseguono PHP devono caricare i componenti aggiornati. In un ambiente che utilizza, per esempio, PHP-FPM 8.3, il riavvio può avvenire con:
sudo systemctl restart php8.3-fpm
Il comando è soltanto un esempio: il nome del servizio e la procedura dipendono dall’installazione. Su server Apache con mod_php, su hosting gestiti e su infrastrutture containerizzate, i passaggi possono essere diversi. Il controllo finale deve confermare che il processo che serve le richieste web stia realmente utilizzando la versione corretta.
Il caso più delicato: gestionali e applicazioni PHP legacy
Fin qui abbiamo considerato l’aggiornamento dell’ambiente. Ma cosa succede quando un’azienda utilizza ancora un gestionale sviluppato per PHP 5.6 o PHP 7.4?
È una situazione meno rara di quanto si pensi. Molti software personalizzati continuano a svolgere perfettamente il proprio lavoro per anni, senza ricevere aggiornamenti strutturali. Il problema emerge quando una modifica dell’infrastruttura diventa indispensabile: l’applicazione funziona, ma la tecnologia sulla quale si basa non è più supportata.
Il passaggio a una versione moderna di PHP può far emergere funzioni rimosse, librerie incompatibili, modifiche nella gestione dei tipi, errori che prima non venivano rilevati o problemi con le estensioni utilizzate per accedere al database. Un esempio classico è il vecchio insieme di funzioni mysql_*, rimosso da PHP 7: un’applicazione che ne dipende richiede un adeguamento a MySQLi o PDO.
Questo non significa necessariamente dover riscrivere tutto. Una migrazione ben progettata può conservare la logica di business esistente, intervenendo sulle componenti incompatibili e introducendo progressivamente controlli e test che in passato potevano mancare.
Il percorso dovrebbe iniziare da un’analisi del codice sorgente e delle dipendenze, proseguire con la definizione della versione di destinazione e degli interventi necessari e concludersi con test di regressione sulle operazioni più importanti: autenticazione, permessi, inserimento e modifica dei dati, generazione di documenti, integrazioni esterne e procedure amministrative.
In un gestionale aziendale, infatti, il risultato non si misura soltanto dall’assenza di errori PHP: conta soprattutto che i processi di lavoro continuino a funzionare correttamente. È per questo che la sicurezza e la continuità operativa devono essere affrontate insieme.
WordPress e WooCommerce: aggiornare il CMS non basta
Un’installazione WordPress aggiornata, con plugin e temi all’ultima versione, non è automaticamente protetta da una vulnerabilità del motore PHP. Lo stesso vale per WooCommerce: il livello applicativo e l’ambiente server sono due componenti distinti della sicurezza.
È quindi necessario mantenere aggiornati sia WordPress e le sue estensioni, sia PHP e i pacchetti di sistema. Se il sito si trova su hosting condiviso, il primo interlocutore per l’aggiornamento dell’interprete è generalmente il provider. Prima di cambiare versione PHP dal pannello, è comunque consigliabile verificare la compatibilità di tema, plugin e personalizzazioni.
Dopo la patch: verificare il funzionamento e gli eventuali segnali di compromissione
L’installazione della patch è il passaggio fondamentale, ma non conclude ogni attività di verifica. Dopo l’aggiornamento è opportuno controllare la versione effettivamente caricata dal web server, eseguire test sulle funzioni principali dell’applicazione ed esaminare i log per individuare errori o comportamenti anomali.
Va inoltre distinta la correzione della vulnerabilità dall’eventuale gestione di una compromissione già avvenuta. Aggiornare PHP impedisce lo sfruttamento delle falle corrette, ma non elimina automaticamente file malevoli, account non autorizzati o modifiche introdotte da un attaccante. Se emergono indicatori sospetti, serve un’analisi specifica del sistema.
La sicurezza non dovrebbe dipendere da un’emergenza
PHP2Shell riporta l’attenzione su un aspetto spesso sottovalutato: un software che continua a funzionare non è necessariamente un software sicuro. Questo vale soprattutto per le applicazioni personalizzate, che possono restare operative per molti anni senza un piano di manutenzione evolutiva.
La priorità oggi è identificare le installazioni esposte e applicare le correzioni disponibili. Per i progetti più datati, però, l’intervento può diventare anche l’occasione per affrontare incompatibilità, dipendenze obsolete e debito tecnico accumulato nel tempo.
Aggiornare non significa sempre ripartire da zero. Significa proteggere il lavoro già realizzato e creare le condizioni perché possa continuare a essere utilizzato in modo affidabile.
Fonti e approfondimenti
- PHP Security Team — Bollettino ufficiale del 21 ottobre 2026
- PHP.net — Changelog delle release correttive
- PHP.net — Versioni supportate e fine del supporto
- CERT-AGID — Strumenti per verificare l’esposizione a PHP2Shell
Un’applicazione PHP obsoleta richiede un aggiornamento? Prima di intervenire su un gestionale o su un sito personalizzato è utile analizzare compatibilità, dipendenze e rischi operativi. Su matcode.dev mi occupo di sviluppo, manutenzione e modernizzazione di applicazioni web, con particolare attenzione alla continuità dei sistemi esistenti.