Diario tecnico

php2shell (CVE-2026-109618 / 109619) non si valuta con php -v: dove i numeri di versione divergono tra FPM, Docker e distribuzioni

Pubblicato il: 2026-10-22 · Autore: GRAMSHIFT

Versioni CLI e FPM, tag Docker, backport delle distribuzioni e cosa verificare sugli hosting condivisi

php2shell (CVE-2026-109618 / 109619) non si valuta con php -v: dove i numeri di versione divergono tra FPM, Docker e distribuzioni

Questa pagina è stata tradotta con l'IA dall'originale giapponese. In caso di differenze, fa fede la versione in giapponese: 日本語

Se il PHP che gestisce le richieste web (PHP-FPM, mod_php di Apache, php-cgi, FrankenPHP, LiteSpeed) è precedente a 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12, è interessato da CVE-2026-109618 e CVE-2026-109619, noti come php2shell. La soluzione è passare a una di queste versioni (o, per i pacchetti delle distribuzioni, al pacchetto corretto) e riavviare i processi. Ciò che va verificato non è il php -v locale, ma «il PHP che serve effettivamente il web» e «la versione del pacchetto installato».

Questo articolo si concentra su quattro punti in cui giudicare solo dal numero di versione porta a conclusioni sbagliate. Tutti i dati e lo stato delle informazioni sono al 2026-10-22; le fonti di ciascuna voce sono elencate in fondo.

Cosa si sa al 2026-10-22

VoceDettagli
CVECVE-2026-109618 (GHSA-w8hw-w9fx-j79w) / CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp)
GravitàEntrambe valutate CVSS v4.0 9.2 (Critical) nell'avviso di PHP
Versioni corrette8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 (rilasciate il 2026-10-21)
Versioni interessateVersioni precedenti a quelle corrette indicate sopra (secondo gli advisory di GitHub)
AmbitoQualsiasi PHP che gestisca richieste web. L'avviso cita PHP-FPM, mod_php, php-cgi, FrankenPHP e LiteSpeed, indicando mod_php come il caso a rischio più alto. Negli advisory di GitHub lo sfruttamento è dimostrato per mod_php, mentre FPM e FrankenPHP sono indicati come «non dimostrato» o «condizionato». Non dimostrato non significa sicuro: aggiorna a una versione corretta comunque tu esegua PHP
8.1 e precedentiNessun aggiornamento dal progetto PHP. Per 7.4 / 8.0 / 8.1 sono stati pubblicati backport minimi del sorgente, e alcune distribuzioni e fornitori LTS potrebbero rilasciare correzioni
8.2Fine del supporto il 2026-12-31 (secondo le note di rilascio di 8.2.35)

L'avviso di PHP afferma che «l'unica correzione completa è aggiornare». Le mitigazioni per il periodo precedente all'aggiornamento sono trattate più avanti in questo articolo.

Trappola 1: php -v e il PHP esposto sul web possono essere diversi

php -v digitato via SSH riporta la versione del PHP CLI. Le richieste web sono gestite da processi PHP-FPM o da mod_php caricato in Apache, che sono binari e pacchetti distinti. Se hai installato un PHP più recente solo per la CLI, esegui più versioni affiancate, o hai un pool FPM che punta a un'altra versione, il lato web può restare vecchio anche quando php -v mostra una versione corretta.

Ci sono diversi modi per vedere la versione reale lato web.

# FPM su Debian / Ubuntu (nome specifico per versione)
php-fpm8.3 -v

# FPM sui sistemi della famiglia RHEL
php-fpm -v

# Verifica se mod_php è caricato in Apache
apachectl -M | grep -i php

Il metodo più affidabile è far dichiarare la versione al PHP che viene effettivamente eseguito via web. Metti un file temporaneo con un nome difficile da indovinare ed eliminalo subito dopo il controllo.

<?php echo PHP_VERSION, ' ', PHP_SAPI;

Se PHP_SAPI è fpm-fcgi, PHP gira sotto FPM; apache2handler indica mod_php; cgi-fcgi indica CGI. Evita di lasciare esposto phpinfo(), perché di per sé rivela informazioni.

Il riavvio è un altro passaggio facile da dimenticare. Anche dopo la sostituzione del pacchetto, i processi php-fpm o Apache già in esecuzione possono continuare a eseguire il vecchio codice. Alcune configurazioni riavviano automaticamente all'aggiornamento dei pacchetti, altre no. Dopo l'aggiornamento, riavvia FPM / Apache e controlla di nuovo la versione lato web con i metodi sopra.

Trappola 2: con Docker non si può giudicare dal nome del tag

L'immagine ufficiale php ha «tag mobili» come 8.3 e 8.3-fpm, il cui contenuto viene sostituito, e tag fissati come 8.3.30, che bloccano la versione.

  • Anche dopo che un tag mobile è stato aggiornato a una versione corretta su Docker Hub, la tua copia locale resta la vecchia immagine finché non esegui di nuovo il pull. Anche i container in esecuzione continuano a usare la vecchia immagine finché non vengono ricreati. Un Dockerfile con FROM php:8.3-fpm verrà comunque costruito sulla vecchia base se questa è rimasta nella cache di build.
  • Un tag fissato resta vecchio per sempre finché non aggiorni tu il numero.

Puoi verificare se i tag delle versioni corrette sono stati pubblicati usando l'API di Docker Hub.

curl -s "https://hub.docker.com/v2/repositories/library/php/tags?name=8.3.36&page_size=100"

Ecco i risultati dell'interrogazione di quattro linee di rilascio il 2026-10-22 (orari in UTC).

Versione correttaTag trovatiQuando sono apparsi i tag basati su Debian (-fpm, -apache, ecc.)Tag basati su Alpine
8.5.1254 (incluso RC1)2026-10-21 18:59–22:132026-10-21 22:12–10-22 01:05
8.4.2754 (incluso RC1)2026-10-21 22:09–22:112026-10-21 22:09–10-22 03:58
8.3.36272026-10-21 22:04–22:062026-10-21 22:04–10-22 03:56
8.2.35272026-10-21 21:59–22:012026-10-21 22:00–10-22 00:58

Da questa verifica sono emersi tre punti in cui giudicare dai numeri può trarre in inganno.

  1. «Aggiornato di recente» non significa «corretto». Il tag fissato 8.3.35 è stato ricostruito durante il 2026-10-21, ma la PHP_VERSION al suo interno era ancora 8.3.35. Guarda la versione interna, non la data di aggiornamento.
  2. Digest diversi possono avere lo stesso contenuto. 8.3 e 8.3.36 avevano digest di tag diversi (il valore dell'indice multi-architettura), ma l'immagine amd64 era identica ed entrambe avevano PHP_VERSION=8.3.36. Allo stesso modo, per 8.3-fpm / 8.3.36-fpm, 8.4-apache / 8.4.27-apache, latest / 8.5.12, 8.5-fpm e 8.2-fpm, la PHP_VERSION dell'immagine amd64 era una versione corretta.
  3. Non esistono immagini ufficiali corrette per 8.1 e precedenti. 8.1-fpm è stata aggiornata l'ultima volta il 2025-12-31.

Per controllare le immagini locali e i container in esecuzione:

# Versione di PHP di un'immagine scaricata in locale
docker image inspect php:8.3-fpm --format '{{range .Config.Env}}{{println .}}{{end}}' | grep PHP_VERSION

# Esegui di nuovo il pull e ricrea i container
docker compose pull
docker compose up -d

# Se costruisci una tua immagine, rifai il pull della base e poi esegui la build
docker compose build --pull

# Versione dentro un container in esecuzione
docker compose exec app php -r 'echo PHP_VERSION, PHP_EOL;'

Sostituisci app nell'ultimo comando con il nome del tuo servizio. Ogni immagine ufficiale è costruita con una singola PHP_VERSION, quindi la versione CLI dentro un container coincide con la versione FPM / Apache di quel container (la Trappola 1 vale quando PHP è installato direttamente sull'host).

FrankenPHP incorpora PHP, quindi la versione di FrankenPHP e quella del PHP incorporato sono numeri diversi. Le note di rilascio di FrankenPHP 1.13.2, rilasciato il 2026-10-21, indicano che le immagini Docker sono state costruite con PHP 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 e i binari statici con PHP 8.5.12.

Trappola 3: i pacchetti delle distribuzioni sono «corretti con numeri vecchi»

Ubuntu e RHEL portano sulle versioni più vecchie solo le correzioni (backporting). Il numero mostrato da php -v resta vecchio, quindi un controllo numerico come «inferiore a 8.3.36, quindi vulnerabile» segnala come vulnerabile un sistema già corretto. Al contrario, nemmeno per stare tranquilli ci si può affidare al numero. Decidi in base alla versione del pacchetto e al security tracker di ciascuna distribuzione.

Pacchetti corretti elencati in ciascun tracker al 2026-10-22 (gli stessi per entrambe le CVE):

DistribuzionePacchettoVersione correttaFonte
Ubuntu 22.04 (jammy)php8.18.1.2-1ubuntu2.28USN-8948-1
Ubuntu 24.04 (noble)php8.38.3.6-0ubuntu0.24.04.13USN-8948-1
Ubuntu 26.04 (resolute)php8.58.5.4-0ubuntu1.5USN-8948-1
Ubuntu (stonking)php8.58.5.9-0ubuntu2.1USN-8948-1
Ubuntu 14.04 / 16.04 / 18.04 / 20.04php5 / php7.0 / php7.2 / php7.4Disponibile tramite Ubuntu Pro (incluso Legacy Support)USN-8948-2
Debian 12 (bookworm)php8.28.2.35-1~deb12u1DLA-4848-1
Debian 13 (trixie)php8.48.4.27-1~deb13u1DSA-6574-1
RHEL 10php / php8.48.3.36-1.el10_2 / 8.4.27-1.el10_2Red Hat
RHEL 9php (predefinito)8.0.30-8.el9_8.1Red Hat
RHEL 9modulo php 8.2 / 8.38.2.35-1.module+el9.8.0… / 8.3.36-1.module+el9.8.0…Red Hat
RHEL 8modulo php 7.4 / 8.27.4.33-8.module+el8.10.0… / 8.2.35-1.module+el8.10.0…Red Hat

Questa tabella mostra direttamente perché i soli numeri non bastano. Il PHP corretto di Ubuntu 24.04 è una versione che inizia con 8.3.6, molto più bassa della 8.3.36 di upstream. Il PHP predefinito di RHEL 9 è corretto pur restando alla 8.0.30, anche se upstream non rilascia più correzioni per la 8.0. Debian è passata agli stessi numeri di upstream (8.2.35 / 8.4.27).

Alcuni pacchetti non sono ancora corretti (al 2026-10-22).

  • Il modulo php 8.4 di RHEL 9 è indicato come «affected, no fix» (interessato, nessuna correzione).
  • Debian forky (testing) ha php8.4 8.4.26-1, contrassegnato come «vulnerable». Il php8.4 di sid (unstable) è 8.4.27-1 e corretto.

Esempi di comandi per verificare il tuo server:

# Debian / Ubuntu: versione installata e versione disponibile
apt-cache policy php8.3-fpm libapache2-mod-php8.3

# Ubuntu: se questa CVE è corretta su questo server
pro fix CVE-2026-109618
pro fix CVE-2026-109619

# Famiglia RHEL: se esiste un aggiornamento che corregge questa CVE, e la versione installata
dnf updateinfo list --cve CVE-2026-109618
rpm -q php-fpm php-cli

Adatta il nome del pacchetto (php8.3-fpm, ecc.) al tuo ambiente. Confronta la versione mostrata con la «versione corretta» della tabella sopra o del tracker: se è uguale o superiore, la correzione è presente. Poi completa il riavvio e il controllo lato web descritti nella Trappola 1.

Se installi PHP da un repository di terze parti anziché dai pacchetti della distribuzione, devi seguire gli aggiornamenti di quel repository. L'avviso di PHP osserva che rpms.remirepo.net, gestito da volontari, non avrebbe avuto aggiornamenti il giorno della divulgazione, e raccomanda di passare ai pacchetti della distribuzione o a build proprie.

Trappola 4: su hosting condiviso e ambienti gestiti non puoi aggiornare PHP da solo

Su hosting condiviso e ambienti PHP gestiti, è il fornitore a sostituire il runtime PHP. Anche qui il solo numero non basta: se il fornitore compila PHP in proprio o fa il backport delle correzioni, il numero di versione può restare vecchio.

Ci sono tre cose che puoi fare da solo.

  1. Verifica la versione lato web. Usa il file temporaneo della Trappola 1 per stampare PHP_VERSION e PHP_SAPI, poi eliminalo subito. Se il pannello di controllo ha un selettore della versione di PHP, annota anche quale versione hai selezionato.
  2. Leggi l'avviso del fornitore e, se non c'è, chiedi. Chiedi: «Per quali versioni di PHP del mio piano verranno applicate le correzioni per CVE-2026-109618 e CVE-2026-109619, e quando (o sono già state applicate)?» Chiedere per numero di CVE anziché per numero di versione ti porta una risposta che comprende anche i backport.
  3. Se hai selezionato una versione non più supportata, aggiorna. Il progetto PHP non rilascia correzioni per 8.1 e precedenti, e il supporto per 8.2 termina il 2026-12-31. A meno che il fornitore non abbia fatto il backport delle correzioni, cambiare versione è la strada sicura.

Stato per fornitore di hosting (al 2026-10-22)

Sugli hosting condivisi, di norma è il fornitore ad aggiornare il runtime PHP, e gli avvisi di molti fornitori dicono che «non è richiesta alcuna azione da parte degli utenti». Gli utenti hanno due cose da fare: controllare l'avviso ufficiale del proprio fornitore e, se nel pannello di controllo hanno selezionato una vecchia versione di PHP, valutare se passare alla versione raccomandata dall'avviso (una con una release corretta).

La tabella seguente riassume solo ciò che è scritto nelle pagine ufficiali di ciascun fornitore (annunci e informazioni di manutenzione), parafrasando il testo degli avvisi. Gli avvisi vengono aggiornati man mano che le cose procedono, quindi verifica sempre lo stato reale sulla pagina ufficiale citata.

Fornitore / servizioPunti chiave dell'avviso ufficialeData/ora dell'avvisoFonte
エックスサーバー«Per PHP 8.2–8.5, l'applicazione della patch di correzione a tutti i server interessati è stata completata.» Per le versioni precedenti, l'avviso dice che «le patch di correzione sono pronte per alcune versioni e verranno applicate in sequenza man mano che la verifica sarà completata», e che si sta lavorando anche sulle altre versioni vecchieCome indicato alle 10/22 6:45 (la pagina è stata aggiornata fino alle 13:15)メンテナンスの進捗状況
シン・レンタルサーバーLa pagina degli annunci riporta lo stesso «stato di avanzamento della manutenzione» di Xserver, ma non ho trovato alcuna dichiarazione che riguardi specificamente lo stato di PHP di Shin Rental Server (verifica con il supporto)-お知らせ
ConoHa WING«Stiamo applicando patch di sicurezza mantenendo la versione di PHP che state attualmente usando.» L'avviso dice che in genere gli utenti non devono cambiare versione, ma per PHP 5.x e 7.x potrebbe essere necessario. Il file manager e la webmail sono temporaneamente sospesi in via precauzionale; la visualizzazione dei siti e l'invio/ricezione delle e-mail proseguono normalmente10/22【重要】PHPの脆弱性への弊社対応について
さくらのレンタルサーバ«Abbiamo completato la risposta alla vulnerabilità per tutte le versioni di PHP selezionabili dal nostro pannello di controllo.» Dichiara che «non è richiesta alcuna azione urgente da parte dei clienti» e raccomanda di passare in futuro all'ultima versione supportata. L'avviso dice che la webmail è stata risolta alle 10/22 13:45 e che su phpMyAdmin si sta ancora lavorando10/22 (aggiornato alle 13:45)PHPの脆弱性(CVE-2026-109618、CVE-2026-109619)への対応状況について
ロリポップ!Un avviso di manutenzione precauzionale in vista del rilascio delle versioni corrette (sito del servizio, pagine utente, ecc. sospesi a turno; i siti possono essere sospesi o limitati senza preavviso). Al 10/22 non ho trovato un avviso che annunciasse il completamento della correzione di PHP (verifica con il supporto)10/21【重要】PHPの脆弱性への予防措置に伴うメンテナンス実施のお知らせ
ヘテムル«Per PHP 8.x e PHP 7.4 abbiamo applicato le versioni corrette ufficiali»; per le altre versioni, «abbiamo apportato correzioni nostre basate sulla correzione ufficiale». Poiché «alcune funzionalità (session.upload_progress) sono state disattivate in tutte le versioni», si chiede agli utenti di verificare che i loro siti funzionino. Dato che le versioni vecchie potrebbero non ricevere ulteriori correzioni, l'avviso raccomanda di passare a una versione più recentePubblicato 10/21 19:44; aggiornato 10/22 12:18 e 13:20【一部完了】【重要】PHPの脆弱性への予防措置に伴うメンテナンス実施のお知らせ
mixhost«L'applicazione dei pacchetti di correzione di PHP è stata completata il 22 ottobre 2026 intorno alle 10:18.» «Applicati senza modificare il numero di versione di PHP»; «non è richiesta alcuna azione da parte dei clienti». L'avviso raccomanda agli utenti di versioni inferiori a PHP 8.2 di usare una versione supportata (8.2 o successiva)10/22【完了】PHPの重大な脆弱性への対応について
KAGOYAPer il servizio di rental server, PHP 8.2–8.5 verrà aggiornato in sequenza dopo la verifica delle versioni corrette (versioni di destinazione ancora in via di definizione). Per i server dedicati gestiti, condivisi e specifici per WordPress, è ancora in fase di pianificazione una correzione definitiva; come misure provvisorie, l'avviso suggerisce di valutare la messa offline dei siti o la limitazione degli accessiPubblicato 10/21 18:20; aggiornato 10/22 10:35PHPの脆弱性に関する当社サービスへの影響について
Zenlogic(IDCフロンティア)Correzioni applicate durante la manutenzione di emergenza (10/21 22:00–10/22 18:00; l'ora di fine può variare). PHP 5.3 verrà aggiornato all'ultima versione e non potrà essere ripristinato; 7.4 e 8.1 potrebbero essere aggiornati. L'avviso dice che, se dopo l'aggiornamento si verificano problemi di visualizzazione o di funzionamento, la correzione va fatta lato applicazione10/21【ホスティング】緊急メンテナンス作業のお知らせ
ColorfulBox«Abbiamo completato lato server l'aggiornamento alle versioni corrette mantenendo la versione di PHP che state attualmente usando.» L'avviso afferma che «i clienti non devono cambiare o passare da soli a un'altra versione di PHP»10/22【重要】PHPの脆弱性に対するセキュリティアップデート完了のお知らせ
お名前.com レンタルサーバー«Stiamo applicando patch di sicurezza mantenendo la versione di PHP che state attualmente usando.» L'avviso dice che in genere non è necessario cambiare versione, ma potrebbe esserlo per PHP 5.x e 7.x. Il file manager e la webmail sono temporaneamente sospesi in via precauzionale10/22【重要】PHPの脆弱性への弊社対応について
CORESERVER(V2)«Abbiamo completato la risposta alla vulnerabilità per tutte le versioni di PHP che offriamo»; «non è richiesta da parte del cliente alcuna azione, come il cambio della versione di PHP». La manutenzione si è svolta il 10/22 dalle 0:00 alle 11:13 ed è indicata come completataPubblicato 10/21 (completato 10/22)PHP脆弱性の対応(CORESERVER V2)【完了】
XREA«Abbiamo completato la risposta alla vulnerabilità per PHP 7.4 e successivi (7.4 / 8.0 / 8.1 / 8.2 / 8.3 / 8.4 / 8.5).» Gli utenti di queste versioni non devono cambiare versione. L'avviso non dice nulla sulle versioni inferiori alla 7.4Pubblicato 10/21 (completato 10/22 0:50)PHP脆弱性の対応(XREA)【完了】
バリューサーバー«Abbiamo completato la risposta alla vulnerabilità per PHP 7.4 e successivi.» L'avviso dice che gli utenti di queste versioni non devono cambiare versionePubblicato 10/21 (completato 10/22 0:50)PHP脆弱性の対応(VALUESERVER)【完了】
ABLENET«In merito alle due vulnerabilità individuate in PHP, abbiamo effettuato gli aggiornamenti di sicurezza iniziali per il nostro ambiente di rental server.» L'avviso non indica quali versioni siano coperte né se gli utenti debbano intervenire10/22 13:04PHPの脆弱性に関するセキュリティアップデートの対応について
WebARENA(レンタルサーバー)Al 10/22 non ho trovato un avviso ufficiale (verifica con il supporto)-WebARENA お知らせ(2026年)

Dove non sono riuscito a trovare o ad aprire un avviso ufficiale, la tabella dice «non è stato possibile confermare» o «non trovato». L'assenza di informazioni non significa che il fornitore non abbia agito. Verifica direttamente negli annunci e nel supporto del tuo fornitore.

Mitigazioni finché non puoi aggiornare subito

L'avviso di PHP elenca impostazioni che riducono la superficie d'attacco fino al momento dell'aggiornamento. Tuttavia l'avviso stesso afferma esplicitamente che «non rendono sicuri». Le principali sono:

  • Per CVE-2026-109619: imposta session.upload_progress.enabled=0 in php.ini, nel pool FPM o nella configurazione del server, e riavvia tutti i worker (ini_set() e il .user.ini di FPM non funzionano per questo scopo). Su PHP 8.5, imposta anche fatal_error_backtraces=0.
  • Per CVE-2026-109618: imposta memory_limit=-1 in modo che l'applicazione non possa sovrascriverlo, e riduci post_max_size (8M se non ci sono upload, 32M se ci sono). Non usare RLIMIT_AS / RLIMIT_DATA come sostituto.

L'NCSC britannico raccomanda di valutare la messa offline di qualsiasi sistema che non possa essere aggiornato o mitigato subito, e di cercare segni di compromissione prima di aggiornare o applicare le mitigazioni.

Fonti (verificate il 2026-10-22)

Domande frequenti

Se php -v mostra una versione corretta, sono protetto da php2shell (CVE-2026-109618 / 109619)?

Non necessariamente. php -v riporta solo la versione del PHP CLI. PHP-FPM o mod_php di Apache, che gestiscono le richieste web, possono essere un binario e un pacchetto distinti. Controlla la versione di FPM con php-fpm8.3 -v (php-fpm -v sui sistemi della famiglia RHEL). In alternativa, apri dal web un file temporaneo che stampi PHP_VERSION e PHP_SAPI, ed eliminalo subito dopo il controllo. Se dopo l'aggiornamento non hai riavviato FPM o Apache, potrebbero continuare a eseguire il vecchio codice.

Se uso php:8.3-fpm di Docker, php2shell è corretto?

Al 2026-10-22, php:8.3-fpm su Docker Hub è stato aggiornato a PHP 8.3.36. Tuttavia l'immagine locale resta vecchia finché non esegui di nuovo il pull, e i container in esecuzione continuano a usare la vecchia immagine finché non vengono ricreati. Esegui docker compose pull e docker compose up -d (oppure docker compose build --pull se costruisci una tua immagine). Poi esegui php -r 'echo PHP_VERSION;' dentro il container e verifica che sia 8.3.36 o successiva. I tag fissati, come 8.3.30, restano vecchi finché non aggiorni tu il numero.

Ubuntu e RHEL mostrano ancora PHP 8.3.6 o 8.0.30. Sono interessati da php2shell?

Dal solo numero di versione non si può dire. Ubuntu e RHEL fanno il backport delle correzioni su versioni più vecchie, quindi un pacchetto può essere corretto pur mantenendo un numero vecchio. Al 2026-10-22, la correzione è in php8.3 8.3.6-0ubuntu0.24.04.13 su Ubuntu 24.04 e in php 8.0.30-8.el9_8.1 su RHEL 9. Confronta la versione del pacchetto installato (apt-cache policy o rpm -q) con la versione corretta indicata nel security tracker della tua distribuzione. Puoi anche verificare con pro fix CVE-2026-109618 su Ubuntu, oppure con dnf updateinfo list --cve CVE-2026-109618 sui sistemi della famiglia RHEL.