
Inoffizieller Fix für CVE-2026-109618 / CVE-2026-109619 (php2shell) für die End-of-Life-Pakete von PHP 5.4 / 5.3 unter RHEL, CentOS und Oracle Linux 7 / 6
Inoffizieller Fix für CVE-2026-109618 und CVE-2026-109619 („php2shell") für die End-of-Life-PHP-Pakete
von Enterprise Linux 6 und 7: php-5.3.3 (RHEL / CentOS / Oracle Linux 6) und php-5.4.16
(RHEL / CentOS / Oracle Linux / Scientific Linux 7).
PHP hat beide Schwachstellen am 21. Okt. 2026 in 8.2.35, 8.3.36, 8.4.27 und 8.5.12 behoben und Quellcode- Backports für 7.4, 8.0 und 8.1 veröffentlicht. Für PHP 5 wurde nichts veröffentlicht, und die EL6-/EL7-Anbieter haben keinen Fix ausgeliefert. Wenn Sie ein solches System weiter betreiben müssen, liefert Ihnen dieses Projekt neu gebaute Anbieter-Pakete mit einer Portierung des offiziellen minimalen Fixes.
Dies ist kein offizieller Fix von PHP, Red Hat oder Oracle. Er verringert das Risiko, bis Sie auf eine unterstützte PHP-Version wechseln können — tun Sie das so bald wie möglich. Auf EL8 / EL9 / EL10 installieren Sie stattdessen die Updates Ihres Anbieters (zum Beispiel ELSA/RHSA-2026:87080, 87151, 87079).
php-5.4.16 / php-5.3.3 anwenden, denen die späteren Sicherheitsfixes des Anbieters im
selben Code fehlen (zum Beispiel CVE-2015-4024 bei der Multipart-Header-Verarbeitung).| Distribution | Anbieter-Paket | Behobenes Paket aus diesem Projekt |
|---|---|---|
| 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 |
Das Release-Suffix sortiert über dem Anbieter-Paket und unterhalb jedes künftigen Anbieter-Erratums
(zum Beispiel 48.el7_9.1), sodass ein offizieller Fix, falls er je erscheint, diesen durch ein normales Update ersetzt.
Wahrscheinlich weniger als auf PHP 7 und 8, aber es gibt noch keine endgültige Antwort:
php-Pakete für RHEL 6 / 7 als nicht betroffen von CVE-2026-109619 ein („vulnerable code not present")
und führt CVE-2026-109618 als in Untersuchung befindlich
(CSAF VEX).Dieses Projekt wendet die offizielle Mitigation trotzdem an: Es entfernt den unsicheren Fehlerpfad selbst, nicht nur den bekannten Weg, ihn zu erreichen.
Aus dem signierten yum-Repository auf 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
Das Repository enthält nur die PHP-Pakete dieses Projekts, und sowohl die Pakete als auch die Repository-Metadaten sind signiert (gpgcheck=1, repo_gpgcheck=1). Die RPMs und Source-RPMs sind außerdem an jedes
Release angehängt, mit einer signierten SHA256SUMS; installieren Sie sie
mit yum localinstall.
./tools/check-patched.sh
Es listet jedes installierte PHP-5-Paket als FIXED oder VULNERABLE auf, prüft, ob die PHP-CLI den korrigierten Code ausführt, und warnt, wenn httpd oder php-fpm vor dem Update gestartet wurde und noch immer den alten Code ausführt.
Die Korrektur folgt dem offiziellen minimalen Backport, der Sicherheit gegenüber einer schonenden Fehlerbehandlung bevorzugt:
memory_limit überschreitet (oder eine Allokationsgröße
überläuft), gibt PHP Fatal error: ... auf stderr (das Fehlerprotokoll des Webservers) aus und der Prozess beendet sich sofort.
Apache / php-fpm starten einen neuen Worker. Shutdown-Funktionen werden nicht ausgeführt, und temporäre Dateien von Uploads in dieser
Anfrage werden nicht entfernt — tmpwatch (EL6) und systemd-tmpfiles (EL7) bereinigen sie mit der Zeit aus /tmp.Content-Disposition und Content-Type jedes Teils bleiben erhalten
(die einzigen, die PHP verwendet), und die neue php.ini-Direktive max_multipart_body_parts begrenzt die Anzahl der
Teile (Standard -1 = max_input_vars + max_file_uploads).zend_mm_safe_error_ex) und ändert keine bestehende API oder ABI, sodass
für das Vendor-Paket gebaute Erweiterungen weiterhin funktionieren.Dies ist eine minimale Abschwächung der veröffentlichten Angriffspfade, kein vollständiges Sicherheitsupdate von PHP 5.
Aus den Vendor-Source-RPMs gebaut (SHA-256 in build/build.sh festgeschrieben); die Spec-Änderung umfasst 8 Zeilen
(spec/*/php.spec.diff).
Die PHP-Testsuite (make test, ausgeführt während des RPM-Builds) wurde mit einem unveränderten Rebuild des
gleichen Vendor-Pakets verglichen. Die einzigen neuen Fehlschläge sind erwartet:
die Tests für den Session-Upload-Fortschritt (Funktion deaktiviert) und tests/lang/bug45392.phpt (die Fatal-Error-
Meldung beginnt nun mit einer leeren Zeile, wie im offiziellen 7.4-Patch).
| Tests | fehlgeschlagen: Vendor | fehlgeschlagen: gepatcht | |
|---|---|---|---|
| EL7, PHP 5.4.16 | 12373 | 14 | 23 (8 Upload-Fortschritt + bug45392) |
| EL6, PHP 5.3.3 | 11213 | 55 | 56 (bug45392) |
Die genauen Zahlen variieren leicht zwischen Build-Umgebungen: Auf GitHub-Runnern schlagen außerdem zwei SPL-Dateieigentümer-Tests
fehl (DirectoryIterator_getOwner/getGroup_basic), und time_sleep_until_basic ist zeitkritisch.
Keiner von ihnen berührt Code, der durch den Patch geändert wurde.
Der PHP-5.4-Patch wurde mit einem unabhängigen Port derselben Korrektur für Amazon Linux 2's php-5.4.16 verglichen:
die Kernänderungen sind identisch. Die Unterschiede sind in docs/ALTERNATIVES.md aufgeführt.
Es wurde kein Exploit-Code geschrieben oder verwendet. Bitte prüfen Sie den Patch selbst gegen den Upstream-Commit.