In breve: per verificare la versione di PHP non basta php -v. Deve sapere quale versione di PHP usa realmente il web server, se il pacchetto contiene la correzione, anche come backport con il vecchio numero, e se dopo l'aggiornamento tutti i processi sono stati riavviati. PHP2Shell è corretta in 8.5.12, 8.4.27, 8.3.36 e 8.2.35.
Perché il solo numero di versione non basta
Per PHP2Shell esiste un elenco chiaro di versioni corrette. Nella pratica, tre situazioni portano comunque a valutazioni errate:
- Più installazioni: la riga di comando mostra PHP 8.3, ma il sito web gira tramite un pool con PHP 8.1.
- Backport: distribuzioni e hoster applicano talvolta le correzioni nei pacchetti esistenti. In tal caso Plesk, ad esempio, continua a mostrare 8.2.34 anche se la patch è applicata.
- Vecchi processi: i nuovi file sono sul disco, ma i worker in esecuzione risalgono ancora a prima.
Per la direzione e i non tecnici aiuta una semplice regola pratica: non chieda soltanto «Che versione di PHP abbiamo?», ma «PHP2Shell è chiusa su tutti i server, e da che cosa lo vediamo?». Una risposta affidabile contiene tre prove: versione o backport, stato dei pacchetti e momento del riavvio.
La verifica tecnica ha quindi tre passi: versione, stato dei pacchetti, processi in esecuzione. I comandi qui sotto sono di sola lettura. I nomi di pacchetti e servizi variano a seconda di distribuzione, fonte di PHP e interfaccia di hosting; gli esempi presuppongono PHP 8.3.
Verificare la versione PHP da riga di comando
php -v # versione della riga di comando
ls /etc/php/ 2>/dev/null # Debian/Ubuntu: rami installati
php-fpm8.3 -v # versione del binario FPM (il nome varia a seconda della distribuzione)
php -i | grep -E "^PHP Version|Server API|Loaded Configuration File"
Su RHEL, AlmaLinux o Rocky il binario FPM si chiama di solito php-fpm; con Software Collections o fonti di terze parti altre versioni si trovano in percorsi propri. Plesk e cPanel portano con sé installazioni PHP proprie, che esistono accanto al PHP di sistema. Come procedere lo descriviamo nelle pagine su Plesk e cPanel.
Quale versione di PHP un sito web usi nel contesto web lo si vede nel modo più affidabile nella configurazione del pool o del VirtualHost oppure nell'interfaccia di hosting. Lo mostra anche una pagina phpinfo; la crei solo per poco tempo, con protezione dell'accesso e nome casuale, e la cancelli subito dopo.
Con l'hosting condiviso di solito non ha accesso alla riga di comando. In tal caso l'interfaccia di hosting mostra la versione di PHP impostata per ogni sito web. Se un backport sia stato applicato e riavviato, però, lì si legge di rado. Qui la via affidabile è la conferma scritta dell'hoster.
Verificare stato dei pacchetti e backport
Lo stato dei pacchetti mostra che cosa la Sua distribuzione ha effettivamente fornito:
# Debian/Ubuntu
apt policy php8.3-fpm
apt changelog php8.3-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
# RHEL, AlmaLinux, Rocky, Fedora
dnf info php-fpm
rpm -q --changelog php-fpm | grep -i -E "CVE-2026-109618|CVE-2026-109619"
Se uno dei numeri CVE compare nel changelog, il backport è contenuto nel pacchetto installato. Se la voce manca, non è ancora la prova di una vulnerabilità: alcuni manutentori dei pacchetti formulano i changelog in modo diverso. In tal caso confronti la versione del pacchetto con i bollettini di sicurezza della Sua distribuzione o chieda al fornitore. Un modello per questa richiesta si trova alla pagina Come chiedere al Suo hoster lo stato della patch.
Importante: verifichi ogni pacchetto PHP installato, non solo il primo. Sui server con più rami spesso uno è aggiornato e un altro no.
La nuova versione gira davvero?
Un aggiornamento è efficace solo quando tutti i processi PHP sono stati riavviati. Confronti l'ora di avvio dei processi in esecuzione con il momento dell'aggiornamento:
ps -o pid,lstart,cmd -C php-fpm8.3 # ora di avvio dei processi FPM
systemctl status php8.3-fpm # da quando il servizio è in esecuzione
needrestart -r l # Debian/Ubuntu, se installato: mostra i processi obsoleti
Se l'ora di avvio precede l'aggiornamento, girano ancora vecchi processi. Con Apache e mod_php vale lo stesso per i processi di Apache. Come riavviare in modo pulito è descritto alla pagina Riavviare PHP-FPM e tutti i worker.
Annoti il risultato per iscritto: server, versione di PHP, versione del pacchetto, CVE nel changelog sì o no, momento del riavvio. Questa nota Le servirà per la direzione, l'assicuratore e una successiva verifica delle tracce.
Inquadrare il risultato
| Esito | Valutazione |
|---|---|
| Versione ufficiale 8.5.12, 8.4.27, 8.3.36 o 8.2.35, processi riavviati | PHP2Shell chiusa |
| Numero più vecchio, numeri CVE nel changelog del pacchetto, processi riavviati | backport applicato, chiusa |
| Numero più vecchio, nessuna voce nel changelog, nessuna conferma | poco chiaro, da chiarire presso il fornitore |
| PHP 8.1 o precedente senza backport confermato | aperta, servono misure provvisorie e migrazione |
| Processi più vecchi dell'aggiornamento | riavvio mancante, vulnerabilità ancora attiva |
Se un server resta nello stato «poco chiaro», lo tratti come aperto: imposti le misure provvisorie e tenga sotto controllo il chiarimento finché non c'è una prova. La panoramica completa delle versioni si trova alla pagina Quali versioni di PHP sono interessate?.
Come aiuta concretamente PHP SOS?
Con il servizio di patch PHP ci occupiamo della verifica e della conferma:
- Trovare tutte le installazioni, anche le seconde versioni provenienti da pannelli di hosting, Software Collections o container.
- Valutare lo stato dei pacchetti: release ufficiale, backport o aperto, con prova dal changelog o dal fornitore.
- Controllare il riavvio, finché non gira più alcun processo con il vecchio codice.
- Redigere un verbale di verifica che può usare internamente e nei confronti di terzi.
Domande frequenti
Perché php -v mostra una versione diversa da quella del mio sito web?
Su molti server sono installate più versioni di PHP. La riga di comando ne usa una, il web server o un pool FPM un'altra. Verifichi quindi la versione che gira effettivamente nel contesto web, ad esempio tramite il binario FPM o l'interfaccia di hosting.
Come riconosco un backport?
Con i pacchetti delle distribuzioni la correzione compare spesso nel changelog del pacchetto, di frequente con il numero CVE. Su Debian e Ubuntu aiuta apt changelog, sui sistemi della famiglia RHEL rpm -q --changelog. Se la voce manca, chiarisca lo stato presso il fornitore.
Posso verificare la versione PHP nel menu cliente dell'hosting?
Sì, la maggior parte delle interfacce mostra la versione impostata per ogni sito web. Se un backport sia stato applicato e riavviato di solito lì non si vede. A tal fine la via affidabile è una conferma scritta dell'hoster.