
Correctif non officiel pour CVE-2026-109618 / CVE-2026-109619 (php2shell) pour les paquets PHP 5.4 / 5.3 en fin de vie de RHEL, CentOS et Oracle Linux 7 / 6
Correctif non officiel pour CVE-2026-109618 et CVE-2026-109619 (« php2shell ») pour les paquets PHP en fin de vie
d'Enterprise Linux 6 et 7 : php-5.3.3 (RHEL / CentOS / Oracle Linux 6) et php-5.4.16
(RHEL / CentOS / Oracle Linux / Scientific Linux 7).
PHP a corrigé les deux vulnérabilités le 21 oct. 2026 dans 8.2.35, 8.3.36, 8.4.27 et 8.5.12, et a publié des rétroportages du code source pour 7.4, 8.0 et 8.1. Rien n'a été publié pour PHP 5, et les fournisseurs d'EL6 / EL7 n'ont pas livré de correctif. Si vous devez maintenir un tel système en fonctionnement, ce projet vous fournit des paquets fournisseur reconstruits avec un portage du correctif minimal officiel.
Ce n'est pas un correctif officiel de PHP, Red Hat ou Oracle. Il réduit le risque jusqu'à ce que vous puissiez passer à une version de PHP prise en charge — faites-le dès que possible. Sur EL8 / EL9 / EL10, installez plutôt les mises à jour de votre fournisseur (par exemple ELSA/RHSA-2026:87080, 87151, 87079).
php-5.4.16 / php-5.3.3 brutes, qui n'ont pas les correctifs de sécurité ultérieurs du fournisseur dans le même code
(par exemple CVE-2015-4024 dans l'analyse des en-têtes multipart).| Distribution | Paquet fournisseur | Paquet corrigé de ce projet |
|---|---|---|
| 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 |
Le suffixe de version se classe au-dessus du paquet fournisseur, et en dessous de tout futur erratum du fournisseur
(par exemple 48.el7_9.1), de sorte qu'un correctif officiel, s'il apparaît un jour, remplace celui-ci par une mise à jour normale.
Probablement moindre que sur PHP 7 et 8, mais il n'y a pas encore de réponse définitive :
php de RHEL 6 / 7 comme non affectés par CVE-2026-109619 (« code vulnérable non présent »)
et liste CVE-2026-109618 comme en cours d'investigation
(CSAF VEX).Ce projet applique tout de même l'atténuation officielle : il supprime le chemin d'erreur non sûr lui-même, pas seulement le moyen connu d'y accéder.
Depuis le dépôt yum signé sur 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
Le dépôt ne contient que les paquets PHP de ce projet, et les paquets ainsi que les métadonnées du dépôt sont signés (gpgcheck=1, repo_gpgcheck=1). Les RPM et les RPM sources sont également joints à chaque release, avec un fichier SHA256SUMS signé ; installez-les avec yum localinstall.
./tools/check-patched.sh
Il liste chaque paquet PHP 5 installé comme FIXED ou VULNERABLE, vérifie que le CLI PHP exécute le
code corrigé, et avertit si httpd ou php-fpm a été démarré avant la mise à jour et exécute encore l'ancien code.
Le correctif suit le backport minimal officiel, qui privilégie la sécurité à une gestion gracieuse des erreurs :
memory_limit (ou qu'une taille d'allocation
déborde), PHP affiche Fatal error: ... sur stderr (le journal d'erreurs du serveur web) et le processus se termine immédiatement.
Apache / php-fpm démarrent un nouveau worker. Les fonctions d'arrêt ne s'exécutent pas, et les fichiers temporaires des téléversements de cette
requête ne sont pas supprimés — tmpwatch (EL6) et systemd-tmpfiles (EL7) les nettoient de /tmp au fil du temps.Content-Disposition et Content-Type de chaque partie sont conservés
(les seuls utilisés par PHP), et la nouvelle directive php.ini max_multipart_body_parts limite le nombre de
parties (par défaut -1 = max_input_vars + max_file_uploads).zend_mm_safe_error_ex) et ne modifie aucune API ni ABI existante, de sorte que
les extensions compilées pour le paquet du fournisseur continuent de fonctionner.Il s'agit d'une atténuation minimale des chemins d'attaque publiés, et non d'une mise à jour de sécurité complète de PHP 5.
Compilé à partir des RPM sources du fournisseur (SHA-256 épinglé dans build/build.sh) ; la modification du spec fait 8 lignes
(spec/*/php.spec.diff).
La suite de tests PHP (make test, exécutée pendant la compilation du RPM) a été comparée à une recompilation non modifiée du
même paquet du fournisseur. Les seuls nouveaux échecs sont attendus :
les tests de progression des téléversements de session (fonctionnalité désactivée) et tests/lang/bug45392.phpt (le message d'erreur
fatale commence désormais par une ligne vide, comme dans le patch officiel 7.4).
| tests | échecs : fournisseur | échecs : patché | |
|---|---|---|---|
| EL7, PHP 5.4.16 | 12373 | 14 | 23 (8 progression des téléversements + bug45392) |
| EL6, PHP 5.3.3 | 11213 | 55 | 56 (bug45392) |
Les décomptes exacts varient légèrement selon l'environnement de compilation : sur les runners GitHub, deux tests SPL de propriétaire de fichier
(DirectoryIterator_getOwner/getGroup_basic) échouent également, et time_sleep_until_basic est sensible au timing.
Aucun d'entre eux ne touche au code modifié par le patch.
Le patch PHP 5.4 a été comparé à un portage indépendant du même correctif pour php-5.4.16 d'Amazon Linux 2 :
les changements du cœur sont identiques. Les différences sont listées dans docs/ALTERNATIVES.md.
Aucun code d'exploitation n'a été écrit ni utilisé. Veuillez examiner vous-même le patch par rapport au commit amont.