PHP-Sicherheitslücke: PHP2Shell-Patch und PHP-Version prüfen (WordPress)

PHP2Shell ist der Name zweier PHP-Sicherheitslücken (CVE-2026-109618 · CVE-2026-109619), deren Patches am 21. Oktober 2026 veröffentlicht wurden. Über diese Lücken zur Remotecodeausführung kann schon eine Anfrage ohne Anmeldung Code auf dem Server ausführen – deshalb prüfst du zuerst, welche PHP-Version deine Website nutzt, und aktualisierst sie auf eine gepatchte Version. Auf einem Nginx + Apache-Server mit WordPress 7.1.3 habe ich die PHP-Version im Website-Zustand geprüft, nur die php-Pakete auf die gepatchte Version aktualisiert und danach erneut geprüft.
1️⃣ Die PHP-Sicherheitslücke PHP2Shell: wie die Lücken funktionieren und wen sie betreffen
Die Lücken stecken in der PHP-Engine, die die Anfrage liest, bevor WordPress-Code ausgeführt wird. Sie bleiben deshalb bestehen, auch wenn du Plugins und Themes aktuell hältst, solange du PHP nicht aktualisierst. Laut der Warnung von CERT-EU haben beide einen CVSS-Wert von 9,2; die technischen Details sind öffentlich und werden diskutiert, und erster Proof-of-Concept-Code ist bereits im Umlauf.
CVE-2026-109618 ist eine Lücke, bei der der Aufräumvorgang nur zur Hälfte initialisierte Anfragedaten als gültige Daten behandelt, wenn eine Anfrage das Speicherlimit (memory_limit) überschreitet und abgebrochen wird. CVE-2026-109619 ist eine Lücke, bei der der Zustand von Speicher, der nach einem fatalen Fehler freigegeben wurde, erhalten bleibt und bei der nächsten Anfrage desselben Workers vor der Initialisierung wiederverwendet wird.
Laut der Ankündigung von php.net ist jede PHP-Installation betroffen, die Webanfragen verarbeitet, und Apache mod_php gilt dabei als die gefährlichste Konfiguration. Denn auf mod_php wurde gezeigt, dass schon eine einzige Anfrage ohne Anmeldung den Angriff auslöst, bevor Anwendungscode ausgeführt wird.
| PHP-Ausführungsart | Auswirkung | Anmerkungen |
|---|---|---|
| Apache mod_php | 🔴 Betroffen · am gefährlichsten | Demonstration, bei der eine einzige Anfrage ohne Anmeldung den Angriff vor der Ausführung des Anwendungscodes auslöste |
| PHP-FPM | 🔴 Betroffen | — |
| php-cgi | 🔴 Betroffen | — |
| FrankenPHP | 🔴 Betroffen | — |
| LiteSpeed | 🔴 Betroffen | — |
Die korrigierten Versionen sind 8.2.35, 8.3.36, 8.4.27 und 8.5.12; alle niedrigeren Versionen der Reihen 8.2 bis 8.5 sind betroffen. PHP 8.1 und älter sind Reihen, die das PHP-Projekt nicht mehr unterstützt. Für sie gibt es keine offizielle gepatchte Version, sondern Korrekturen, die Distributionen und Hosting-Anbieter übernehmen (Backports).
Zum Zeitpunkt der CISA-Meldung vom 21. Oktober war noch keine tatsächliche Ausnutzung bestätigt. CISA hielt es dennoch für gefährlich, Systeme ungepatcht zu lassen, und empfahl, sofort zu patchen – zuerst die aus dem Internet erreichbaren Systeme. CERT-EU kam in seiner Warnung am selben Tag zu dem Schluss, dass es wahrscheinlicher geworden sei, dass Angreifer die Lücken bereits ausnutzen, da Proof-of-Concept-Code in Umlauf kommt.
2️⃣ PHP-Version prüfen: Website-Zustand › Bericht › Server
Auch wenn du die Lücken kennst, weißt du erst, was zu tun ist, wenn du weißt, mit welcher PHP-Version deine Website läuft. Öffne im Adminbereich [Werkzeuge › Website-Zustand] und klappe auf dem Tab [Bericht] den Abschnitt [Server] auf: In der Zeile [PHP-Version] steht die PHP-Version, die die Anfragen deiner Website tatsächlich verarbeitet.
Die Zeile [PHP-SAPI] direkt unter [PHP-Version] zeigt, wie PHP ausgeführt wird; fpm-fcgi steht für eine PHP-FPM-Konfiguration. Hier schaust du dir nur die beiden Zeilen [PHP-Version] und [PHP-SAPI] im Abschnitt [Server] an.
Der Angriff beginnt mit einer Anfrage ohne Anmeldung. In der Phase, in der PHP die speziell präparierte Anfrage vor dem WordPress-Code liest, löst sie eine der beiden Lücken aus, was zur Codeausführung auf dem Server führt. Die korrigierten Versionen blockieren diesen Ablauf – deine Aufgabe ist also, das PHP deiner Website mindestens auf eine korrigierte Version zu bringen.
[php -v] im Terminal zeigt nur die Version des Standard-PHP der Kommandozeile. Bei Konfigurationen mit mehreren PHP-Versionen auf einem Server, etwa EA-PHP von cPanel oder alt-php von CloudLinux, kann sie von der Version abweichen, die deine Website nutzt. Maßgeblich ist deshalb der Wert [PHP-Version] im Website-Zustand.
php -vPHP 8.3.xx (cli) (built: Jun 3 2025 17:17:57) (NTS gcc x86_64)3️⃣ Unter PHP 8.2: beim Hoster nach einem Backport fragen und ihn anfordern, falls es keinen gibt
Liegt die [PHP-Version] im Website-Zustand unter 8.2 (7.x, 8.0 oder 8.1), gibt es keine offizielle gepatchte Version von php.net. Laut der Tabelle der unterstützten Versionen auf php.net (geprüft am 22. Oktober 2026) werden nur die vier Reihen 8.2, 8.3, 8.4 und 8.5 unterstützt; für offizielle Versionen ab 8.1 abwärts erscheinen keine Sicherheitspatches.
Stattdessen liefern Distributionen und Hosting-Anbieter manchmal Pakete, die die Versionsnummer beibehalten und nur die Korrektur übernehmen (Backports). Die Pakete 7.4.33, 8.0.30 und 8.1.34 auf einem Testserver eines Managed-Hosting-Anbieters sind ein Beispiel dafür. Im Änderungsprotokoll stand die Zeile [Backported from 8.2.35 — CVE-2026-109618, CVE-2026-109619].
Auch bei gleicher Versionsnummer prüfst du, ob die Korrektur enthalten ist, indem du im Änderungsprotokoll des Pakets nach der CVE-Nummer suchst. Unter Debian und Ubuntu geht das etwa mit [zcat /usr/share/doc/php8.2-cli/changelog.Debian.gz | grep 109618]. Auf RPM-basierten Systemen lautet der Befehl [rpm -q --changelog php-common | grep 109618]; die Versionsnummer im Paketnamen passt du an die Version an, die deine Website nutzt.
Liegst du unter 8.2, fragst du deshalb zuerst bei deinem Hosting-Anbieter nach, ob ein Backport eingespielt wurde. Ist das nicht der Fall oder lässt es sich nicht bestätigen, bittest du um ein Upgrade auf eine unterstützte Version (8.2 oder neuer). Danach prüfst du den Wert [PHP-Version] im Website-Zustand erneut.
CISA empfahl Organisationen, die 8.1 oder älter einsetzen und nicht sofort aktualisieren können, ihre PHP-basierten Systeme bis zum Patch oder Upgrade offline zu nehmen.
Betreibst du den Server selbst und nutzt 8.1 oder älter, kannst du die Backport-Pakete deiner Distribution installieren oder die vom PHP-Sicherheitsteam veröffentlichten Quellcode-Patches für 7.4, 8.0 und 8.1 einspielen. Da diese Reihen aber nicht mehr unterstützt werden, ist der Umstieg auf eine unterstützte Version die eigentliche Lösung.
4️⃣ Ab PHP 8.2: auf die gepatchte Version aktualisieren und erneut prüfen
Hast du 8.2 oder neuer, aber eine niedrigere Version als die gepatchte, aktualisierst du PHP selbst. Beim Managed und Shared Hosting spielt der Anbieter den Patch auf dem ganzen Server ein. Kläre daher über seine Ankündigungen oder den Support, ob er eingespielt ist und welcher Build läuft, und schau, ob sich die [PHP-Version] im Website-Zustand geändert hat. Laut seiner Statusseite begann Cloudways am 21. Oktober um 22:19 UTC, alle unterstützten PHP-Versionen (5.6 bis 8.4) zu patchen. Am 22. Oktober um 10:11 UTC meldete Cloudways den Abschluss.
Auf einem selbst betriebenen Server aktualisierst du, wie in der Ankündigung von php.net beschrieben, mit Paketen aus dem Repository deiner Distribution oder eines LTS-Anbieters. Prüfe vor dem Update in einer Vorschau die Liste der Pakete, die sich ändern, achte darauf, dass nur Pakete mit php am Anfang aktualisiert werden und keine anderen mitkommen, und mische das Update nicht mit anderen Updates des Betriebssystems.
dnf upgrade --assumeno 'php*'Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Upgrading:
php x86_64 8.3.xx-1.… … 1.9 M
php-cli x86_64 8.3.xx-1.… … 5.6 M
php-common x86_64 8.3.xx-1.… … 1.3 M
php-fpm x86_64 8.3.xx-1.… … 1.9 M
(Zeilen für Erweiterungspakete wie php-gd · php-intl ausgelassen)
Transaction Summary
================================================================================
Upgrade xx Packagesdnf upgrade 'php*'Upgraded:
php-8.3.xx-1.….x86_64
php-cli-8.3.xx-1.….x86_64
php-common-8.3.xx-1.….x86_64
php-fpm-8.3.xx-1.….x86_64
(Zeilen für Erweiterungspakete ausgelassen)
Complete!Bei diesem Test wurden nur die Pakete, die mit php beginnen, auf die gepatchte Version aktualisiert, und php-fpm startete nach der Paketinstallation von selbst neu. Die korrigierte Version greift erst, wenn die php-fpm-Worker neu starten. Gibt es in deiner Umgebung keinen automatischen Neustart, führst du [systemctl restart php-fpm] selbst aus.
Prüfe nach dem Upgrade, ob [php -v] und die Zeile [PHP-Version] auf dem Tab [Bericht] im Website-Zustand beide mindestens die gepatchte Version zeigen, und kontrolliere auch den Status des php-fpm-Dienstes und die Antwort der Website. Hat sich nur der Wert der Kommandozeile geändert und [PHP-Version] ist gleich geblieben, startest du php-fpm neu und prüfst erneut.
Auch nach dem Update klappst du auf demselben Bildschirm [Werkzeuge › Website-Zustand] im Tab [Bericht] den Abschnitt [Server] auf und siehst dir die Zeile [PHP-Version] an. Zeigt sie die Version, auf die du aktualisiert hast, laufen auch die php-fpm-Worker mit der neuen Version.
php -vPHP 8.3.xx (cli) (built: Oct 19 2026 14:00:34) (NTS gcc x86_64)systemctl is-active php-fpmactivecurl -s -o /dev/null -w '%{http_code}\n' 'https://example.com/?r=1'200Bei Paketen, deren Versionsnummer selbst steigt, erkennst du den Patch an der neuen Versionsnummer, bei Backport-Paketen mit unveränderter Versionsnummer an der CVE-Nummer im Änderungsprotokoll. Dieser Server gehörte zur ersten Gruppe: In [rpm -q --changelog php-common] gab es keine Zeile mit der CVE-Nummer, und ich habe den Patch an der neuen Versionsnummer in der ersten Zeile des Änderungsprotokolls erkannt.
5️⃣ Wenn du nicht sofort aktualisieren kannst: die vorübergehenden Maßnahmen von php.net
Für Server, die sich nicht sofort aktualisieren lassen, nennt php.net die folgenden Einstellungen als vorübergehende Maßnahmen, stellt aber klar, dass sie nur bestimmte Angriffswege einschränken und die Installation nicht sicher machen. Außerdem rät php.net davon ab, das Speicherlimit stattdessen über RLIMIT_AS oder RLIMIT_DATA zu setzen, da das gerade die anfälligen Fehler bei der Speicherzuweisung auslösen kann.
| Einstellung | Wert | Wo | Was es blockiert |
|---|---|---|---|
| memory_limit | -1 | php_admin_value im FPM-Pool oder in der Apache-Konfiguration (damit die Anwendung es nicht zurücksetzen kann) | CVE-2026-109618 · Fehlerpfad beim Speicherlimit (nicht vollständig) |
| post_max_size | 8M (32M, wenn du Uploads brauchst) · upload_max_filesize kleiner als dieser Wert | php.ini · Pool-Konfiguration | CVE-2026-109618 |
| session.upload_progress.enabled | 0 + alle Worker neu starten | php.ini · FPM-Pool · Serverkonfiguration (nicht über ini_set() oder .user.ini) | CVE-2026-109619 · nur der bestätigte Session-Pfad |
| fatal_error_backtraces | 0 + alle Worker neu starten (nur PHP 8.5) | Wie oben | CVE-2026-109619 · nur der bestätigte Backtrace-Pfad |
php_admin_value ist eine serverseitige Einstellung, die die Anwendung nicht zurücksetzen kann. Nutzer von Shared Hosting können sie deshalb oft nicht selbst ändern und müssen sich auch dann an den Hosting-Anbieter wenden. php.net empfiehlt außerdem, auch auf Ebene des Webservers oder Proxys Obergrenzen für die Größe des Request-Bodys, die Zahl der Eingabefelder, die Zahl der Multipart-Teile, die Zahl der Header und die Verschachtelungstiefe zu setzen.
🔢 FAQ & empfohlene Inhalte
Sicherheit
Sicherheitslücken der wp-config.php
So verhinderst du, dass die Datei wp-config.php offenliegt, und verschärfst die Sicherheitseinstellungen.
Sicherheit
WordPress XML-RPC
So erkennst du xmlrpc.php-Angriffe in den Logs, mit drei Wegen zum Deaktivieren.
Server
php-fpm max_children-Warnung
Ein Praxistest, der die Ursache der Warnung in den Logs findet, bevor du Worker hinzufügst.
ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.