
Correzione non ufficiale per CVE-2026-109618 / CVE-2026-109619 (php2shell) per i pacchetti PHP 5.4 / 5.3 a fine vita di RHEL, CentOS e Oracle Linux 7 / 6
Correzione non ufficiale per CVE-2026-109618 e CVE-2026-109619 ("php2shell") per i pacchetti PHP a fine vita
di Enterprise Linux 6 e 7: php-5.3.3 (RHEL / CentOS / Oracle Linux 6) e php-5.4.16
(RHEL / CentOS / Oracle Linux / Scientific Linux 7).
PHP ha corretto entrambe le vulnerabilità il 21 ottobre 2026 nelle versioni 8.2.35, 8.3.36, 8.4.27 e 8.5.12, e ha pubblicato backport del codice sorgente per 7.4, 8.0 e 8.1. Non è stato rilasciato nulla per PHP 5, e i fornitori di EL6 / EL7 non hanno distribuito una correzione. Se devi mantenere in funzione un sistema del genere, questo progetto ti fornisce pacchetti del fornitore ricostruiti con un port della correzione minima ufficiale.
Questa non è una correzione ufficiale di PHP, Red Hat o Oracle. Riduce il rischio finché non puoi passare a una versione di PHP supportata — fallo il prima possibile. Su EL8 / EL9 / EL10, installa invece gli aggiornamenti del tuo fornitore (ad esempio ELSA/RHSA-2026:87080, 87151, 87079).
php-5.4.16 / php-5.3.3 originali, che mancano delle successive correzioni di sicurezza del fornitore nello stesso codice
(ad esempio CVE-2015-4024 nell'analisi degli header multipart).| Distribuzione | Pacchetto del fornitore | Pacchetto corretto di questo progetto |
|---|---|---|
| RHEL / CentOS / Oracle Linux / Scientific Linux 7 | php-5.4.16-48.el7 | php-5.4.16-48.el7.php2shell.1 |
| RHEL / CentOS / Oracle Linux 6 | php-5.3.3-50.el6_10 | php-5.3.3-50.el6_10.php2shell.1 |
Il suffisso di rilascio si ordina sopra il pacchetto del fornitore e sotto qualsiasi futuro errata del fornitore
(ad esempio 48.el7_9.1), così una correzione ufficiale, se mai ne apparirà una, sostituirà questa con un normale aggiornamento.
Probabilmente meno che su PHP 7 e 8, ma non c'è ancora una risposta definitiva:
php di RHEL 6 / 7 come non affetti da CVE-2026-109619 ("codice vulnerabile non presente")
e elenca CVE-2026-109618 come in fase di analisi
(CSAF VEX).Questo progetto applica comunque la mitigazione ufficiale: rimuove il percorso di errore non sicuro stesso, non solo il modo noto per raggiungerlo.
Dal repository yum firmato su GitHub Pages:
# EL7
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el7.repo
# EL6
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el6.repo
yum update 'php*' # confirm the signing key: fingerprint under "Signing key" below
service httpd restart # and php-fpm, if you use it
Il repository contiene solo i pacchetti PHP di questo progetto, e sia i pacchetti sia i metadati del repository
sono firmati (gpgcheck=1, repo_gpgcheck=1). Gli RPM e gli RPM sorgente sono inoltre allegati a ciascuna
release, con un SHA256SUMS firmato; installali
con yum localinstall.
./tools/check-patched.sh
Elenca ogni pacchetto PHP 5 installato come FIXED o VULNERABLE, verifica che la CLI di PHP esegua il codice corretto e avvisa se httpd o php-fpm è stato avviato prima dell'aggiornamento e sta ancora eseguendo il vecchio codice.
La correzione segue il backport minimale ufficiale, che privilegia la sicurezza rispetto a una gestione degli errori più morbida:
memory_limit (o una dimensione di allocazione
va in overflow), PHP stampa Fatal error: ... su stderr (il log degli errori del web server) e il processo termina immediatamente.
Apache / php-fpm avviano un nuovo worker. Le funzioni di shutdown non vengono eseguite e i file temporanei degli upload di quella
richiesta non vengono rimossi — tmpwatch (EL6) e systemd-tmpfiles (EL7) li ripuliscono da /tmp nel tempo.Content-Disposition e Content-Type di ciascuna parte
(gli unici usati da PHP), e la nuova direttiva php.ini max_multipart_body_parts limita il numero di
parti (predefinito -1 = max_input_vars + max_file_uploads).zend_mm_safe_error_ex) e non modifica alcuna API o ABI esistente, quindi
le estensioni compilate per il pacchetto del vendor continuano a funzionare.Questa è una mitigazione minimale dei percorsi di attacco pubblicati, non un aggiornamento di sicurezza completo di PHP 5.
Compilato dai pacchetti sorgente RPM del vendor (SHA-256 fissato in build/build.sh); la modifica allo spec è di 8 righe
(spec/*/php.spec.diff).
La suite di test di PHP (make test, eseguita durante la build RPM) è stata confrontata con una ricompilazione non modificata dello
stesso pacchetto del vendor. Le uniche nuove anomalie sono quelle attese:
i test del progresso dell'upload di sessione (funzionalità disabilitata) e tests/lang/bug45392.phpt (il messaggio di errore fatale
ora inizia con una riga vuota, come nella patch ufficiale 7.4).
| test | falliti: vendor | falliti: con patch | |
|---|---|---|---|
| EL7, PHP 5.4.16 | 12373 | 14 | 23 (8 progresso upload + bug45392) |
| EL6, PHP 5.3.3 | 11213 | 55 | 56 (bug45392) |
I conteggi esatti variano leggermente tra gli ambienti di build: sui runner di GitHub falliscono anche due test SPL sul proprietario dei file
(DirectoryIterator_getOwner/getGroup_basic), e time_sleep_until_basic è sensibile ai tempi.
Nessuno di essi tocca il codice modificato dalla patch.
La patch per PHP 5.4 è stata confrontata con un port indipendente della stessa correzione per php-5.4.16 di Amazon Linux 2:
le modifiche al core sono identiche. Le differenze sono elencate in docs/ALTERNATIVES.md.
Non è stato scritto né utilizzato alcun codice di exploit. Ti invitiamo a rivedere tu stesso la patch rispetto al commit upstream.