PHP-Sicherheitslücke kostenfrei prüfen: Ist Ihre Website von PHP2Shell betroffen?

PHP2Shell-Sicherheitslücke: PHP-Logo in einem stilisierten Browserfenster. Ein rot umrandetes Terminal und rote digitale Störungen symbolisieren einen Webangriff mit möglicher fremder Codeausführung auf dem Webserver.

Eine aktuelle WordPress-Installation, starke Administratorpasswörter und eine geschützte Anmeldung reichen nicht aus, wenn bereits die darunterliegende PHP-Laufzeitumgebung angreifbar ist.

Unter dem Namen PHP2Shell stehen zwei kritische Sicherheitslücken im PHP-Kern im Mittelpunkt: CVE-2026-109618 und CVE-2026-109619. Sie können Angreifern ohne Anmeldung ermöglichen, eigenen Code im Webprozess auszuführen. Beide Schwachstellen tragen eine Bewertung von 9,2 nach CVSS 4.0. Korrigierte PHP-Versionen stehen bereit. Entscheidend ist, welche Laufzeit Ihre Website tatsächlich verwendet und ob der Anbieter die Fehler darin behoben hat. Ein Update des Content-Management-Systems ersetzt dieses PHP-Update nicht. Verwalten Sie Ihren Webserver selbst, etwa mit Plesk oder cPanel, müssen Sie auch die PHP-Updates einspielen. Beim Shared Hosting übernimmt Ihr Anbieter den Rollout; bei Managed Servern entscheidet der vereinbarte Verwaltungsumfang.

Problem für Web-Admins: Hosting-Panels beschränken die Versionsanzeige häufig auf den Versionszweig „PHP 8.5“ und nennen keine Patchnummer. Diese Darstellung unterscheidet PHP 8.5.9 nicht von PHP 8.5.12. PHP 8.5.12 ist das erste Release dieses Zweigs mit den vollständigen PHP2Shell-Korrekturen. Hoster können Sicherheitsupdates innerhalb des Zweigs ausrollen, ohne die Auswahlbezeichnung im Kundenmenü zu ändern.

Für die Prüfung Ihrer eigenen Hostingumgebung stellt Meroth IT-Service Ihnen in diesem Beitrag ein kostenloses PHP-Prüftool zum Download bereit. Nach dem Upload des Skripts auf Ihren Webserver und dem Aufruf über Ihre Domain ermittelt es die vollständige PHP-Versionskennung sowie relevante Einstellungen der zuständigen Web-PHP-Instanz. Die folgenden Szenarien sind theoretische Beispiele auf Grundlage der veröffentlichten technischen Eigenschaften. Sie beschreiben keinen nachgewiesenen Angriff auf ein bestimmtes Unternehmen. Die Codebeispiele zeigen normale Anfrageverarbeitung, die fehlerhaften Abläufe als Pseudocode und konkrete Prüfungen für eigene Systeme.

[Hier direkt zum Prüftool-Download springen]

PHP2Shell: Welche Systeme ein Update benötigen

Die vollständige PHP-Version entscheidet über den Upstream-Patchstand

Für die unterstützten Versionszweige nennt das PHP-Projekt die folgenden korrigierten Releases. Die Angabe „PHP 8“ oder „PHP 8.3“ genügt für die Bewertung nicht. Vergleichen Sie die vollständige Versionsnummer innerhalb ihres jeweiligen Zweigs.

VersionszweigBetroffene Upstream-ReleasesErstes korrigiertes Release
PHP 8.28.2.x vor 8.2.358.2.35
PHP 8.38.3.x vor 8.3.368.3.36
PHP 8.48.4.x vor 8.4.278.4.27
PHP 8.58.5.x vor 8.5.128.5.12

Linux-Distributionen und Hostinganbieter können Sicherheitskorrekturen auch als Backport in ein Paket mit älterer Basisversionsnummer übernehmen. Verlangen Sie dafür einen Nachweis für beide CVEs. PHP 8.1 und ältere Zweige erhalten keine regulären Releases mehr vom PHP-Projekt. Die zusätzlich bereitgestellten Quellcode-Backports für 7.4, 8.0 und 8.1 ersetzen keinen dauerhaft unterstützten Betriebsstand.

Apache, PHP-FPM und weitere Einbindungen unterscheiden sich im Angriffsweg

Ein Worker ist ein Arbeitsprozess, der Webanfragen bearbeitet. Die Server API, kurz SAPI, beschreibt die Einbindung von PHP. Der Name des sichtbaren Webservers allein identifiziert diese Einbindung nicht: Apache kann PHP beispielsweise als Modul oder über PHP-FPM nutzen.

EinbindungBestätigter ErkenntnisstandBedeutung für Betreiber
Apache mit mod_phpCodeausführung ist nachgewiesen; Angriffspfade greifen vor dem Anwendungscode.Besonders hohe Priorität für das Update.
PHP-FPMFür CVE-2026-109619 ist Codeausführung über den Session-Lebenszyklus bestätigt, abhängig von einem geeigneten Anwendungsablauf.PHP-FPM bietet keine generelle Entwarnung.
PHP-FPM, OOM-LückeFür CVE-2026-109618 beschreibt das Advisory Anfälligkeit anhand der Quellcodeanalyse, dort jedoch noch keinen vollständigen FPM-Exploit.Nachgewiesene Ausnutzung und technische Anfälligkeit getrennt bewerten.
CGI, FrankenPHP, LiteSpeedDas PHP-Projekt bezieht weitere Webeinbindungen in seine Updatewarnung ein.Die andere Betriebsart ersetzt den Patchnachweis nicht.

Prüfen Sie auch Testdomains, alte Kundenportale und Anwendungen, die PHP als Bestandteil eines größeren Produkts mitbringen. Eine abgeschaltete Verlinkung macht eine weiterhin erreichbare Installation nicht intern. Bei solchen Produkten benötigen Sie gegebenenfalls das Sicherheitsupdate des Produktherstellers.

Unterstützte PHP-Versionen: Ab PHP 7.4 erstellt das Tool den vollständigen Bericht. Unter PHP 5.6 und PHP 7.0–7.3 liefert es eine kennwortgeschützte Basisdiagnose mit Versionsangabe, Supportende und Hinweisen zu erforderlichen Sicherheitsupdates. Zusätzliche Build-Angaben helfen dem Hoster, das eingesetzte PHP-Paket zu bestimmen; sie beweisen allein keine Fehlerbehebung.

PHP2Shell · Prüfung auf Ihrem Webspace

Betroffen? Führen Sie eine Prüfung mit dem kostenfreien PHP-Check-Tool durch.

PHP-Prüfscript herunterladen und auf Ihrem Webserver testen. Der Check liest dort die tatsächlich verwendete PHP-Version und relevante Einstellungen aus. Der folgende Assistent erstellt dafür Ihre persönliche Prüfdatei. Das Vorgehen Schritt für Schritt:

  1. Prüfkennwort notieren. Beim Öffnen dieses Blogartikels wird unten bereits vorsorglich automatisch ein zufälliges achtstelliges Kennwort erzeugt. Das Prüfkennwort ist dafür gedacht, Ihr Prüfergebnis zu schützen.
  2. Prüfdatei herunterladen. Nehmen Sie den Opt-in-Hinweis zur Kenntnis und speichern Sie die erzeugte Datei php2shell_check.php. Eine Bearbeitung des Codes ist nicht erforderlich.
  3. Auf den Webspace hochladen. Laden Sie die PHP-Datei über den per HTTPS geschützten Dateimanager Ihres Hosters, per SFTP oder per FTPS in das betreffende Verzeichnis der zu prüfenden Website. Verwenden Sie keine unverschlüsselte FTP-Verbindung.
  4. Im Browser aufrufen. Öffnen Sie beispielsweise https://ihre-domain.de/php2shell_check.php. Bei einem Unterordner ergänzen Sie dessen Namen in der Adresse.
  5. Auf Ihrer eigenen Website das zuvor notierte Prüfkennwort eingeben. Öffnen Sie die hochgeladene Datei auf Ihrer Domain und geben Sie dort das beim Download angezeigte Kennwort ein. Lesen Sie anschließend den Bericht und die empfohlenen nächsten Schritte.
  6. Datei anschließend löschen. Entfernen Sie php2shell_check.php nach der Prüfung zeitnah wieder von Ihrem Webspace.

Ihr Kennwort für die eigene Prüfdatei. Bei einem erneuten Aufruf dieser Seite entsteht ein neues Kennwort. Für eine bereits heruntergeladene Datei gilt das Kennwort, das beim damaligen Download angezeigt wurde; es steht zusätzlich ganz oben in dieser PHP-Datei bei P2S_PASSWORD.

Ihr automatisch erzeugtes PrüfkennwortWird erzeugt …

Bitte notieren oder markieren und kopieren. Sie benötigen es nach dem Hochladen der Datei. Beim Download erscheint es zusätzlich in einem Hinweisfenster.

Die Datei wertet Version und Konfiguration aus; sie führt keinen Exploit oder Belastungstest durch. Der Bericht ist eine Einordnung und kein vollständiger Sicherheitsnachweis. Insbesondere Hersteller-Backports und weitere Serverinstanzen können eine zusätzliche Prüfung erfordern.

Nur 24 Stunden ab Download gültig. Danach sperrt die Datei Bericht, Exporte und Zusatztests und zeigt einen Ablaufhinweis. Die PHP-Laufzeit verarbeitet den Aufruf weiterhin; die Frist schaltet keinen PHP-Endpunkt ab. Die Datei bleibt auf Ihrem Webspace liegen: Bitte nach der Prüfung selbst löschen. Für eine spätere Prüfung laden Sie eine neue Datei herunter.

Bitte aktivieren Sie JavaScript, um das Prüfkennwort und die Datei zu erstellen.

Was bedeuten die Ampelfarben und die zusätzlichen Tests?

Grün: Die gemeldete PHP-Version erreicht den offiziellen Korrekturstand beider CVEs. Das gilt für die bei diesem Aufruf gemessene Laufzeit; weitere Backends und frühere Angriffe erfasst die Anzeige nicht.

Orange: Der Check erkennt Hinweise auf begrenzte Konfigurationsmaßnahmen oder führt eine hinterlegte Hoster-Auskunft auf. Die Einzelbefunde nennen Wirkung und offene Voraussetzungen. Orange belegt keinen vollständigen Fix und bedeutet keine Freigabe für den unbeschränkten Betrieb. Insbesondere erkennt das Skript keine eingebauten C-Code-Teilpatches anhand von INI-Werten.

Rot: Der Check bestätigt weder den vollständigen Fix noch eine der von ihm bewerteten Teilmaßnahmen. Ein dokumentierter Anbieter-Backport kann trotzdem vorliegen. Offen/Grau: Messwerte, Geltungsbereich oder Versionsregeln erlauben keine eindeutige Einordnung. Klären Sie in beiden Fällen den tatsächlichen Build mit dem Hoster.

Formularvergleich: Der optionale Test sendet zwei kleine Formularanfragen an die Prüfdatei, eine URL-kodiert und eine als Multipart. Er überträgt keine Datei und provoziert keinen Speicherfehler. Ein erfolgreicher Empfang bestätigt nur diesen normalen Transportweg. Eine Ablehnung kann auf Filter oder andere Zugangsregeln hinweisen; sie beweist keinen Schutz vor PHP2Shell.

Wiederholungsmessung: Drei weitere Abrufe vergleichen Version und ausgewählte Einstellungen. Unterschiede zeigen wechselnde Messwerte; identische Antworten belegen weder die Prüfung aller Worker noch einen vollständigen Rollout.

Vorschau: So sieht die Auswertung des PHP-Checks aus

Drei Beispielergebnisse des PHP2Shell-Check-Tools: Grün meldet eine PHP-Version mit Sicherheitsupdate, Orange einzelne Schutzmaßnahmen ohne vollständigen Fix-Nachweis und Rot fehlenden Update-Nachweis. Darunter stehen PHP-Version, Betriebsart, Bewertungen beider Sicherheitslücken und empfohlene nächste Schritte.
PHP2Shell-Checks mit drei beispielhaften Ergebnissen: Grün, Orange und Rot.

Meroth IT-Service · remoteberater.de

PHP-Version prüfen oder Website vorübergehend offline nehmen?

Meroth IT-Service unterstützt Sie bei der Prüfung Ihrer PHP-Version und des bestätigten Patchstands sowie beim vorübergehenden Offlinenehmen Ihrer Website.

Remote-Unterstützung anfragen

Im kostenlosen Pre-Check klären Sie vorab, ob sich Ihr Anliegen per Remote-Beratung oder Fernwartung bearbeiten lässt. Ablauf, Voraussetzungen und Konditionen finden Sie auf der Angebotsseite.

Wie aus einer Webanfrage fremder Code im Serverprozess werden kann

PHP verarbeitet Teile der Anfrage bereits vor Ihrem Skript

Bei gewöhnlichen Formularübertragungen bereitet PHP Eingabedaten für das Skript auf. Formularfelder erscheinen beispielsweise in $_POST, Informationen über übertragene Dateien in $_FILES. Multipart ist das Format, das Browser unter anderem für Formulare mit Dateianhängen verwenden. Die Verarbeitung dieses Formats gehört zur Laufzeitumgebung; das eigentliche PHP-Skript arbeitet anschließend mit den vorbereiteten Daten.

Das lässt sich mit einem kleinen, lokalen Beispiel nachvollziehen. Speichern Sie die folgende vollständige Datei als anfrage-demo.php in einem neuen, ansonsten leeren Testverzeichnis. Sie zählt lediglich die obersten Einträge der Eingabearrays und gibt keine übermittelten Inhalte aus.

<?php
declare(strict_types=1);

header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store');

echo json_encode([
    'skript_erreicht' => true,
    'formularfelder_obere_ebene' => count($_POST),
    'dateifelder_obere_ebene' => count($_FILES),
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), PHP_EOL;

Starten Sie im Testverzeichnis mit einer bereits gepatchten PHP-Installation den lokalen Entwicklungsserver. Die Bindung an 127.0.0.1 beschränkt ihn auf den eigenen Rechner. Der eingebaute PHP-Server dient hier nur zur Demonstration der Eingabeverarbeitung und bildet weder Apache/mod_php noch PHP-FPM nach.

php -S 127.0.0.1:8080 -t .

Senden Sie aus einem zweiten Terminal diese kleine, normale Formularanfrage. Das Beispiel verwendet curl-Syntax für Bash; unter Windows muss tatsächlich das curl-Programm aufgerufen werden.

curl --silent --show-error --max-time 10 --form-string 'nachricht=Lokale Demonstration' http://127.0.0.1:8080/anfrage-demo.php

Die Antwort enthält skript_erreicht: true, einen Formularfeldeintrag und keine Datei. Obwohl das Skript keinen Multipart-Parser enthält, steht das Formularfeld schon bereit. Beenden Sie den Entwicklungsserver anschließend mit Strg+C. Diese Anfrage ist kein Exploit und kein Verwundbarkeitstest. Sie macht die Verarbeitungsebene sichtbar, an der die Sicherheitsprobleme relevant werden.

CVE-2026-109618: Ein Speicherabbruch hinterlässt unvollständige Strukturen

PHP kann beim Erreichen eines Speicherlimits die aktuelle Verarbeitung abrupt verlassen. Geschieht das während des Aufbaus interner Datenstrukturen, kann die Aufräumroutine anschließend ungültige Werte verwenden. Bei geeigneter Kontrolle des Speicherinhalts entsteht daraus Codeausführung. Das betrifft die native PHP-Engine, nicht eine vergessene Eingabeprüfung in einem Formular.

PHP2Shell, CVE-2026-109618: Eine präparierte Anfrage überschreitet während der PHP-Initialisierung das Speicherlimit. Der Aufräumcode verwendet unvollständig initialisierte Strukturen. Unter passenden Bedingungen ermöglicht das Codeausführung mit den Rechten des Webprozesses. Das Sicherheitsupdate sorgt für kontrollierte Fehlerbehandlung oder einen sicheren Prozessabbruch.
CVE-2026-109618 am Beispiel von Apache mit mod_php: Ein unterbrochener Strukturaufbau kann beim Aufräumen zu einem Speicherfehler führen. Codeausführung setzt geeignete Ausnutzungsbedingungen voraus. Vereinfachte Darstellung.

Denkfehler: „Die maximale Uploadgröße ist kleiner als das Speicherlimit, also reicht der Schutz.“ Aber: Übertragene Daten und ihre interne Darstellung benötigen nicht gleich viel Speicher. Eine Speicherüberschreitung allein beweist umgekehrt keinen Angriff. Sie ist lediglich eine mögliche Voraussetzung des beschriebenen Fehlers.

CVE-2026-109619: Eine Anfrage hinterlässt gefährliche Zustände für die nächste Anfrage

Bei der zweiten Lücke bleiben im Worker Verweise auf Daten einer abgeschlossenen Anfrage bestehen. Der zugehörige Speicher ist bereits freigegeben. Verwendet eine spätere Anfrage denselben Verweis vor der regulären Neuinitialisierung, entsteht ein Use-after-free: PHP greift auf Speicher zu, dessen bisherige Bedeutung nicht mehr gültig ist.

PHP2Shell, CVE-2026-109619: Nach Anfrage A bleibt im PHP-Worker ein Verweis auf freigegebenen Speicher bestehen. Anfrage B verwendet ihn vor dem Zurücksetzen. Bei passender Speicherbelegung ist Codeausführung möglich. Beide Anfragen müssen denselben Worker treffen. Das Sicherheitsupdate setzt betroffene interne Zustände korrekt zurück.
CVE-2026-109619: Ein veralteter Verweis überlebt das Ende einer Anfrage und wird bei einer späteren Anfrage im selben PHP-Worker verwendet. Die Ausnutzung erfordert passende Verarbeitungsschritte und Speicherbedingungen. Vereinfachte Darstellung.

Für diesen anfrageübergreifenden Angriffsweg müssen das Hinterlassen und die spätere Verwendung des Zustands zusammenpassen. Die beiden Anfragen müssen dabei denselben Worker erreichen. Ein bestätigter Weg nutzt den Session-Upload-Fortschritt. Unter PHP-FPM hängt er zusätzlich von einer geeigneten Operation während der Anwendungsausführung ab. Ein beliebiger Fehler oder Upload genügt deshalb nicht automatisch.

Drei konkrete Szenarien: Welche Schäden Betreiber verhindern müssen

WordPress-Shop: Der Angriff umgeht die Anmeldung und erreicht Datenbankzugänge

Stellen Sie sich einen kleinen Onlineshop vor: WordPress und Erweiterungen sind aktuell, das Administratorkonto nutzt MFA, der Server betreibt jedoch eine ungepatchte PHP-Version mit mod_php. Ein Angreifer erreicht mit einer passenden Anfrage die verwundbare PHP-Verarbeitung. Bei erfolgreicher Ausnutzung laufen seine Anweisungen mit den Rechten des Webprozesses. Die Anmeldung im Shop musste er dafür nicht überwinden.

Die wirtschaftliche Folge ergibt sich aus den Daten, die dieser Prozess regulär benötigt. WordPress speichert seine Datenbankverbindung üblicherweise in wp-config.php. Auch eine anderweitig bereitgestellte Zugangsinformation muss der Anwendung zur Nutzung zugänglich sein. Erreicht ein Angreifer die Rechte dieser Anwendung, können damit Kundendaten, Bestellungen und Benutzerinformationen in seinen Zugriff gelangen. Der konkrete Umfang hängt von den Datenbankrechten ab.

Das folgende eigenständige Beispiel einer Konfigurationsdatei enthält ausschließlich erfundene Werte. Es ist keine vollständige WordPress-Konfiguration und soll keine vorhandene wp-config.php ersetzen. Es verdeutlicht, welche Berechtigungskette eine Anwendung benötigt.

<?php
declare(strict_types=1);

// Ausschliesslich erfundene Demonstrationswerte.
return [
    'database_host' => '127.0.0.1',
    'database_name' => 'demo_shop',
    'database_user' => 'demo_shop_app',
    'database_password' => 'KEIN-ECHTES-PASSWORT',
];

Eine nur lokal erreichbare Datenbank verhindert diesen Folgeschritt nicht grundsätzlich: Der kompromittierte Webprozess läuft bereits auf dem System, von dem aus die Anwendung auf die Datenbank zugreifen darf. Ein starkes Datenbankpasswort schützt gegen Erraten, aber nicht gegen das Auslesen einer für den Prozess zugänglichen Konfiguration. Beschränkte Datenbankrechte begrenzen den Schaden; sie schließen die PHP-Lücke nicht.

Besitzt der Prozess außerdem Schreibrechte auf Website-Dateien, könnte der Angreifer Inhalte verändern oder eine Hintertür hinterlassen. Ein Shop kann dabei weiterhin Bestellungen annehmen. Eine normal aussehende Startseite belegt deshalb keine unveränderte Installation. Diese Folgeschritte sind mögliche Konsequenzen der Codeausführung, keine Behauptung, dass jeder erfolgreiche Angriff alle Schritte durchläuft.

Kundenportal mit PHP-FPM: Ein passender Fehlerablauf verbindet zwei Anfragen

Ein zweites Beispiel ist ein Kundenportal mit Dokumentenannahme oder Importfunktionen. Für das Szenario gilt ausdrücklich: Es existiert ein vom Angreifer erreichbarer Ablauf, der den im Advisory beschriebenen internen Zustand hinterlässt. Nach erfolgreichem Request-Start unterbricht ein fataler Fehler die Verarbeitung. Eine spätere Anfrage an denselben Worker verwendet den veralteten Zustand über einen passenden frühen Verarbeitungspfad.

Damit wäre die zusätzliche Voraussetzung des FPM-Szenarios erfüllt. Die bloße Existenz einer Importfunktion beweist diese Voraussetzung nicht. Auch ein Timeout allein belegt keine ausnutzbare Lücke. Die praktische Entscheidung bleibt trotzdem eindeutig: Betreiber sollten den PHP-Patch installieren, statt sich auf einen unvollständigen Ausschluss aller möglichen Anwendungspfade zu verlassen.

Die mögliche Auswirkung richtet sich nach den Portalrechten: Der Prozess könnte etwa auf hochgeladene Verträge, Rechnungen oder interne Dokumente zugreifen. Liegen mehrere Kundenbestände unter demselben Anwendungskonto und Datenbankzugang, kann der Schaden über das Konto eines einzelnen Portalnutzers hinausgehen. Ein mandantenfähiges Frontend garantiert noch keine Isolation gegenüber kompromittiertem Servercode.

Mehrere Websites in einem Hostingkonto: Eine alte Testinstallation erweitert den Schaden

Ein Hostingkonto enthält die produktive Website und eine vergessene Testkopie in einem anderen Verzeichnis. Beide PHP-Prozesse laufen unter derselben Betriebssystemkennung und können auf dieselben Projektdateien zugreifen. Wenn die Testkopie über eine anfällige Laufzeit kompromittiert wird, kann der Angreifer möglicherweise auch Dateien oder Zugangsdaten der produktiven Website erreichen.

Entscheidend sind die tatsächlichen Betriebssystem-, Datei- und Datenbankrechte. Eine andere Domain oder ein separates Verzeichnis erzeugt allein keine Sicherheitsgrenze. Getrennte Unix-Benutzer, passend konfigurierte Pools und restriktive Zugriffsrechte können die Reichweite begrenzen. Ein FPM-Pool ist jedoch nicht allein aufgrund seines Namens eine vollständige Isolation.

PHP2Shell bedeutet zunächst Codeausführung mit den Rechten des Webworkers. Root-Rechte, die Übernahme anderer Kundenkonten oder ein Ausbruch aus einem Container folgen daraus nicht automatisch. Für Ihre Website kann schon der reguläre Zugriff auf ihre Dateien und Datenbank einen erheblichen Schaden darstellen.

Warum Login-Schutz, WAF und Wartungsmodus das Update nicht ersetzen

MaßnahmeWas sie leistetGrenze bei PHP2Shell
MFA und starke PasswörterSchützen reguläre Anmeldevorgänge.Verhindern keinen Angriff, der ohne Anmeldung die PHP-Engine erreicht.
HTTPSSchützt den Transport zwischen Kommunikationspartnern.Auch eine präparierte Anfrage kann verschlüsselt übertragen werden.
Sicherheitsplugin im CMSKann Ereignisse und Angriffe auf Anwendungsebene erkennen oder blockieren.Ein Angriff vor dem Anwendungscode kann vor dem Start des Plugins greifen.
Vorgeschaltete WAFKann bekannte Angriffsmuster vor PHP blockieren.Regelabdeckung und Umgehungen bleiben relevant; der PHP-Fehler besteht weiter.
PHP-basierter WartungsmodusZeigt Besuchern eine Wartungsseite.Er lässt PHP weiterhin Anfragen verarbeiten.
Sperre vor PHPKann den Zugang zur gefährdeten Verarbeitung unterbinden.Muss alle relevanten Hosts, Pfade und direkten Ursprungszugänge erfassen.

Cloudflare berichtet bereits von beobachteten Angriffsversuchen und Anpassungen der Angriffsdaten. Der Anbieter empfiehlt trotz seiner WAF-Regeln ausdrücklich das PHP-Update. Diese Beobachtungen belegen Angriffsaktivität; sie liefern keine pauschale Aussage darüber, wie viele Websites erfolgreich kompromittiert wurden.

Auch disable_functions stellt keine verlässliche Grenze gegen native Codeausführung dar. Die PHP-Dokumentation warnt bereits grundsätzlich davor, diese Einstellung als ausreichende Sicherheitsmaßnahme zu betrachten. Eine Liste gesperrter PHP-Funktionen repariert keine fehlerhafte Speicherverwaltung.

Verwechseln Sie außerdem die interne Upload-Fortschrittsfunktion nicht mit einem sichtbaren Fortschrittsbalken Ihrer Website. PHP kann Upload-Informationen in Session-Daten verwalten. Ob Ihre Oberfläche diese Informationen anzeigt, beantwortet nicht die Frage, ob die Funktion in der Laufzeit aktiviert ist.

Meroth IT-Service · remoteberater.de

PHP-Version prüfen oder Website vorübergehend offline nehmen?

Meroth IT-Service unterstützt Sie bei der Prüfung Ihrer PHP-Version und des bestätigten Patchstands sowie beim vorübergehenden Offlinenehmen Ihrer Website.

Remote-Unterstützung anfragen

Im kostenlosen Pre-Check klären Sie vorab, ob sich Ihr Anliegen per Remote-Beratung oder Fernwartung bearbeiten lässt. Ablauf, Voraussetzungen und Konditionen finden Sie auf der Angebotsseite.

Die eingesetzte PHP-Version prüfen

Bei WordPress zuerst die Serverinformationen der Website lesen

Öffnen Sie im WordPress-Backend Werkzeuge → Website-Zustand → Bericht → Server; die Beschriftung kann je nach Sprache und Version leicht abweichen. Dort finden Sie Angaben zur PHP-Version und zur Serverumgebung. Notieren Sie die vollständige Version zusammen mit der Domain und dem Zeitpunkt der Prüfung.

Prüfen Sie jede eigenständige Installation. Eine Einstellung im Hostingpanel kann für eine Domain gelten, während eine Subdomain oder eine alte Testumgebung einen anderen PHP-Handler verwendet. Die Website-Zustandsanzeige ist eine Bestandsaufnahme und kein forensischer Nachweis, dass die Installation bereits vor dem Update unangetastet war.

Die Terminalversion kann von der Webversion abweichen

Mit Shell-Zugang liefern diese Befehle eine erste Bestandsaufnahme. Sie lesen den gefundenen PHP-Befehl, dessen Version und die für diesen Aufruf geladenen Konfigurationsdateien aus.

command -v php
php -v
php --ini
php -r 'echo "Version: ", PHP_VERSION, PHP_EOL, "SAPI: ", PHP_SAPI, PHP_EOL;'

Steht bei SAPI cli, haben Sie den Kommandozeileninterpreter geprüft. Das bestätigt nicht die Version eines parallel laufenden FPM-Pools oder Apache-Moduls. Selbst derselbe Versionszweig kann über unterschiedliche Pakete und Konfigurationen bereitstehen. Ordnen Sie die angefragte Domain dem zuständigen Dienst oder Pool zu.

Eine begrenzte Diagnosedatei zeigt die tatsächlich ausgeführte Laufzeit

Für eine eigene Anwendung ohne Systemübersicht können Sie die folgende vollständige Datei php-laufzeitcheck.php verwenden. Legen Sie sie für einen Webabruf ausschließlich in einen bereits auf Webserver- oder Proxyebene geschützten Diagnosebereich mit derselben PHP-Zuordnung wie die Anwendung. Entfernen Sie sie danach. Ein Aufruf über eine andere Domain oder einen anderen Handler würde die falsche Umgebung messen.

<?php
declare(strict_types=1);

if (PHP_SAPI !== 'cli') {
    header('Content-Type: application/json; charset=utf-8');
    header('Cache-Control: no-store, max-age=0');
    header('X-Content-Type-Options: nosniff');
}

$settings = [];
foreach ([
    'memory_limit',
    'post_max_size',
    'upload_max_filesize',
    'session.upload_progress.enabled',
    'fatal_error_backtraces',
] as $name) {
    $value = ini_get($name);
    $settings[$name] = $value === false ? null : $value;
}

echo json_encode([
    'php_version' => PHP_VERSION,
    'php_sapi' => PHP_SAPI,
    'settings' => $settings,
    'hinweis' => 'Bestandsaufnahme, kein Exploit- oder Backport-Nachweis.',
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), PHP_EOL;

Die Funktion ini_get() liefert Konfigurationswerte als Zeichenketten. Ein leerer Wert kann bei booleschen Einstellungen „aus“ bedeuten. null steht in diesem Beispiel für eine nicht verfügbare Einstellung. Die Ausgabe trifft bewusst keine automatische Aussage „sicher“ oder „verwundbar“: Für Backports benötigen Sie weiterhin den Paket- oder Anbieternachweis.

Bei mehreren Servern oder Containern hinter einem Loadbalancer reicht eine einzelne Antwort nicht aus. Kontrollieren Sie jeden Backend-Stand über die Verwaltung beziehungsweise das Deployment. Wiederholte öffentliche Aufrufe garantieren nicht, dass Sie sämtliche Instanzen erreichen.

Öffentliche HTTP-Header liefern höchstens einen Hinweis

Für Ihre eigene Domain können Sie mit einem normalen GET-Abruf die Antwortheader ansehen. Ersetzen Sie die Beispieldomain durch die zu prüfende Adresse. Der Befehl verwirft den Seiteninhalt und zeigt die Header; unter Unix-ähnlichen Systemen dient /dev/null als Verwerfungsziel.

curl --silent --show-error --max-time 15 \
  --dump-header - --output /dev/null \
  https://www.example.com/

Ein Header wie X-Powered-By: PHP/8.3.35 wäre ein Versionshinweis. Er beweist weder den Paket-Backportstand noch die Version aller Backends. Fehlt der Header, bleibt PHP trotzdem möglich. Server: nginx, Apache oder envoy identifiziert ebenfalls keine PHP-Version. Auch ein Fehlerstatus wie 503 belegt weder PHP2Shell noch eine vorsorgliche Abschaltung.

Das Update wirksam ausrollen und den laufenden Betrieb kontrollieren

Bei Shared Hosting zählt die Bestätigung für Ihre konkrete Laufzeit

Auf verwaltetem Webspace aktualisiert in der Regel der Hostinganbieter die PHP-Binärdateien. Sie können häufig den Versionszweig auswählen, aber nicht selbst dessen Sicherheitsbuild installieren. Fragen Sie gezielt, ob CVE-2026-109618 und CVE-2026-109619 in der PHP-Laufzeit Ihrer Domain einschließlich Subdomains und Testinstallationen behoben sind.

Eine brauchbare Rückmeldung nennt die korrigierte Version oder die Paketkennung eines dokumentierten Backports sowie den Zeitpunkt der Aktivierung. Lassen Sie bei Bedarf bestätigen, dass keine alten Worker mehr Anfragen bearbeiten. „Unsere Systeme sind aktuell“ ohne Bezug auf die betroffene Laufzeit beantwortet diese Punkte nicht.

Paketinstallation, Prozesswechsel und Funktionskontrolle gehören zusammen

  1. Bestand erfassen: Ordnen Sie Domains, PHP-Versionen, FPM-Pools, Apache-Module und Container einander zu. Berücksichtigen Sie nicht verlinkte, aber weiterhin erreichbare Anwendungen.
  2. Wiederherstellung vorbereiten: Sichern Sie Konfiguration und Anwendungsdaten. Ein Rollback darf eine ungepatchte Laufzeit nicht wieder öffentlich erreichbar machen.
  3. Passendes Sicherheitsupdate installieren: Verwenden Sie das freigegebene Paket Ihres Anbieters oder ein korrigiertes Upstream-Release. Aktualisieren Sie zusammengehörige PHP-Komponenten konsistent.
  4. Alte Prozesse ersetzen: Stellen Sie über den vorgesehenen Dienstneustart oder ein kontrolliertes Deployment sicher, dass sämtliche Worker die korrigierten Binärdateien verwenden. Allein der Austausch einer Datei auf dem Datenträger genügt nicht.
  5. Weblaufzeit nachmessen: Kontrollieren Sie die Version im tatsächlichen Webkontext und bei jedem Backend. Ein aktuelles php -v ist dafür allein nicht ausreichend.
  6. Funktionen prüfen: Testen Sie Anmeldung, Formulare, Uploads und die geschäftskritischen Abläufe. Verwenden Sie für Bestellungen oder Zahlungen dafür vorgesehene Testverfahren.
  7. Patchnachweis festhalten: Dokumentieren Sie Domain, Paket beziehungsweise Image, Versionsstand, Aktivierungszeitpunkt und Prüfergebnis.

Ein pauschaler Installationsbefehl wäre hier irreführend: Paketnamen, Dienstnamen und Bezugsquellen unterscheiden sich zwischen Distributionen, Hostingpanels und selbst kompilierten Installationen. Übernehmen Sie deshalb die Aktualisierungsanweisung für genau die Umgebung, die Ihre Website tatsächlich ausführt.

Bei Containern muss das korrigierte Image auch laufen

Ein Update des Hostsystems ersetzt die PHP-Laufzeit in einem Container nicht. Das folgende Compose-Beispiel setzt voraus, dass Ihr Dienst tatsächlich php heißt und dessen image:-Eintrag bereits auf ein vom Anbieter bestätigtes korrigiertes Image verweist. Führen Sie die Befehle im passenden Compose-Projekt aus; das Neuerstellen kann aktive Anfragen unterbrechen.

docker compose pull php
docker compose up -d --no-deps --force-recreate php
docker compose exec -T php php -v

pull lädt das konfigurierte Image, startet aber noch keinen neuen Container. up ersetzt hier den Dienstcontainer. Die letzte Zeile kontrolliert den CLI-Interpreter im Container; die Webprüfung bleibt zusätzlich erforderlich. Bei festgelegten alten Tags oder Digests müssen Sie zuerst die Referenz ändern. Bei selbst gebauten Images aktualisieren Sie das Basisimage, bauen die Anwendung neu und rollen das neue Ergebnis aus.

Temporäre Einstellungen reduzieren einzelne Angriffswege, schließen aber nicht die Lücken

Das PHP-Projekt nennt session.upload_progress.enabled=0 und unter PHP 8.5 fatal_error_backtraces=0 als begrenzte Maßnahmen. Die Administration muss die Einstellungen vor der kritischen Verarbeitung wirksam setzen und sämtliche betroffenen Worker neu starten. Ein späteres ini_set() genügt dafür nicht; bei PHP-FPM greift auch .user.ini für den frühen Session-Pfad zu spät. Das Ausblenden von Warnungen verhindert den fehlerhaften Speicherzugriff ebenfalls nicht.

Für die OOM-Lücke nennt PHP außerdem ein administrativ durchgesetztes memory_limit=-1. Das entfernt den gezielt erreichbaren PHP-Speichergrenzwert, beseitigt aber nicht alle möglichen Speicheranforderungsfehler und nimmt eine Ressourcengrenze weg. Ändern Sie diesen Wert nicht isoliert auf einem produktiven System. Die Administration muss zusätzlich die Ressourcen außerhalb von PHP begrenzen und die Betriebsfolgen prüfen. RLIMIT_AS und RLIMIT_DATA eignen sich laut Hersteller nicht als Ersatz, weil sie den problematischen Allokationsfehler auslösen können. Keine dieser Einstellungen ersetzt das vollständige Update. Wenn ein zeitnaher Patch nicht möglich ist, empfiehlt CERT-EU, die Isolation der betroffenen Anwendungen vom öffentlichen Netz zu prüfen.

Bei Angriffsverdacht reicht das PHP-Update allein nicht aus

Ein Patch beseitigt den zugrunde liegenden Fehler, entfernt aber keine bereits abgelegten Dateien und macht einen möglichen Datenabfluss nicht rückgängig. Trennen Sie deshalb zwei Aufgaben: die weitere Ausnutzung verhindern und klären, ob bereits ein Sicherheitsvorfall vorliegt.

Auffällige Speicherfehler, Worker-Abstürze oder HTTP-500-Antworten sind Untersuchungsanlässe, aber für sich keine Beweise für PHP2Shell. Umgekehrt schließen unauffällige Logs einen Angriff nicht aus. Stellen Sie zeitliche Zusammenhänge zwischen Webserver-, Proxy-, PHP- und Anwendungsprotokollen her; berücksichtigen Sie Zeitzonen und die Aufbewahrungsdauer.

  • Begrenzen Sie bei konkretem Angriffsverdacht umgehend die Erreichbarkeit der betroffenen Instanz. Sichern Sie parallel Protokolle und relevante Systemzustände, bevor Bereinigung, Neustarts oder Rotation Spuren überschreiben. Stimmen Sie die Sicherung flüchtiger Daten mit Fachleuten ab, ohne eine notwendige Eindämmung aufzuschieben.
  • Vergleichen Sie Dateien mit einer vertrauenswürdigen Ausgangsversion. Untersuchen Sie auch Uploadverzeichnisse, geplante Aufgaben, Konfigurationen und Datenbankänderungen.
  • Prüfen Sie neue Administratorkonten und veränderte Integrationen. Ein Angreifer kann Zugangsmöglichkeiten außerhalb der ursprünglich ausgenutzten PHP-Funktion hinterlassen.
  • Ersetzen Sie möglicherweise offengelegte Geheimnisse koordiniert aus einer sauberen Umgebung. Dazu können Datenbankzugänge, API-Schlüssel und anwendungsbezogene Sitzungsschlüssel gehören.
  • Stellen Sie bei bestätigter Kompromittierung einen vertrauenswürdigen, gepatchten Zustand wieder her. Übernehmen Sie verdächtige Dateien nicht ungeprüft aus einem alten Backup.

Für WordPress kann eine Prüfung der Core-Dateien einen Teil der Untersuchung unterstützen. Führen Sie sie mit einem vertrauenswürdigen WP-CLI in einer isolierten Untersuchungsumgebung auf einer gesicherten Kopie aus. Starten Sie aus einem sauberen Arbeitsverzeichnis außerhalb dieser Kopie. Prüfen Sie auch die dort und in übergeordneten Verzeichnissen geladenen wp-cli.yml/wp-cli.local.yml sowie die globale WP-CLI-Konfiguration: Einträge wie require oder exec können zusätzlichen PHP-Code ausführen. --skip-packages unterbindet lediglich das Laden installierter WP-CLI-Pakete. Ersetzen Sie den Beispielpfad durch den tatsächlichen Pfad der gesicherten Kopie.

wp core verify-checksums --path=/pfad/zur/gesicherten-wordpress-kopie --include-root --skip-packages

Der Befehl vergleicht WordPress-Core-Dateien mit offiziellen Prüfsummen und warnt mit --include-root zusätzlich vor bestimmten fremden Einträgen im Wurzelverzeichnis. Er untersucht nicht vollständig Plugins, Themes, Uploads, Datenbankinhalte oder das Betriebssystem. Ein erfolgreiches Ergebnis bestätigt daher nur den geprüften Umfang und ist kein allgemeiner Freispruch für die Website.

20 Fragen zur Sicherheitslücke

PHP2Shell: Antworten für Websitebetreiber und Administratoren

Welche Websites benötigen ein Update? Was leisten Teilmaßnahmen? Wie prüfen Sie Hoster-Auskünfte, und was tun Sie bei einem Angriffsverdacht? Die folgenden Antworten erklären die technischen Voraussetzungen und die konkreten nächsten Schritte.

Was ist PHP2Shell, und wie dringend muss ich als Websitebetreiber handeln?

PHP2Shell bezeichnet zwei kritische Sicherheitslücken in der PHP-Laufzeit: CVE-2026-109618 und CVE-2026-109619. Öffentlich erreichbare, ungepatchte PHP-Installationen erfordern ein dringendes Sicherheitsupdate. PHP führt auf dem Server unter anderem WordPress, Shops und Kundenportale aus. Bei den bestätigten Angriffen benötigt der Angreifer weder ein Benutzerkonto noch die Mitwirkung eines Besuchers.

Die Fehler betreffen den Umgang mit internem Speicher: Eine Schwachstelle hinterlässt nach einem Speicherabbruch unvollständig vorbereitete Daten. Die andere lässt Verweise auf bereits freigegebenen Speicher über das Ende einer Anfrage hinaus bestehen. Daraus können Datenoffenlegung und fremde Codeausführung entstehen. Beide CVEs erreichen 9,2 von 10 Punkten nach CVSS 4.0. Diese Bewertung beschreibt die Schwere, nicht die Wahrscheinlichkeit eines erfolgreichen Angriffs auf Ihre konkrete Website.1

Ermitteln Sie jetzt den Patchstand der tatsächlich verwendeten Web-PHP-Instanz und veranlassen Sie die Korrektur beider CVEs. Warten Sie bei einem ungeklärten, öffentlich erreichbaren System nicht auf das nächste reguläre Wartungsfenster. Falls der Fix kurzfristig nicht zur Verfügung steht, braucht die Website eine wirksame Zugangsbeschränkung vor der PHP-Verarbeitung. Ein bereits vollständig gepatchtes System erfordert wegen dieser Meldung keine vorsorgliche Abschaltung; ein möglicher früherer Angriff bleibt eine gesonderte Prüfaufgabe.

Ist meine Website auch mit aktuellem WordPress, wenigen Besuchern oder ohne Shop gefährdet?

Ja, sofern die Website eine betroffene PHP-Laufzeit verwendet. Ein aktuelles CMS und eine kleine Website schließen PHP2Shell nicht aus. WordPress-, Plugin- und Theme-Updates ändern den Anwendungscode. Das PHP-Sicherheitsupdate ersetzt beziehungsweise korrigiert den Interpreter darunter. Beide Wartungsaufgaben gehören deshalb getrennt in Ihre Prüfung.

Besucherzahl, Unternehmensgröße und die Bekanntheit Ihrer Domain entscheiden nicht darüber, ob PHP eine präparierte Anfrage verarbeitet. Auch eine Vereinsseite, ein Blog oder eine kaum genutzte Testinstallation kann öffentlich erreichbar sein. Fehlende Kundenkonten oder Bestelldaten begrenzen allenfalls bestimmte mögliche Schäden: Angreifer könnten beispielsweise Inhalte manipulieren, Weiterleitungen einbauen oder die Website für weitere missbräuchliche Aktivitäten verwenden.

Erstellen Sie daher eine Liste aller PHP-Anwendungen in Ihrem Hostingkonto: Hauptdomain, Subdomains, alte Projektordner, Staging, Webmail und zusätzliche Verwaltungsoberflächen. Bei Software, die PHP mitliefert, zählt das Update des jeweiligen Produkts; ein Update des Betriebssystem-PHP erreicht dessen eigene Laufzeit nicht zwangsläufig.2

Eine ausschließlich statische Website ohne erreichbare PHP-Verarbeitung bietet diese serverseitige Angriffsfläche nicht. Ein WordPress-Cache macht eine Installation jedoch nicht automatisch statisch: Anmeldung, Formulare, APIs oder direkte PHP-Dateien können weiterhin den Interpreter erreichen. Entscheidend ist die tatsächliche Verarbeitung der erreichbaren Anfragen.

Was können Angreifer konkret erreichen – auch ohne Root-Rechte oder freigeschaltete Shell-Funktionen?

Ein erfolgreicher Angriff kann Code mit den Rechten des PHP-Webprozesses ausführen. Root-Rechte entstehen dadurch nicht automatisch; für einen erheblichen Schaden reichen die normalen Anwendungsrechte häufig aus. Welche Daten und Systeme erreichbar sind, bestimmen insbesondere Betriebssystemrechte, Datenbankberechtigungen, eingebundene Verzeichnisse und verfügbare Zugangsschlüssel. Die Forschung zeigt außerdem die Offenlegung von Prozessspeicher ohne erreichte Codeausführung. Fehlende Dateiveränderungen schließen deshalb einen Datenabfluss nicht aus.7

  • Daten lesen: beispielsweise lesbare Konfigurationsdateien, Kundendaten aus erreichbaren Datenbanken oder Zugangsdaten und Tokens, die die Anwendung verwendet.
  • Inhalte und Abläufe verändern: etwa beschreibbare PHP-Dateien, Shop-Inhalte, Formulare oder Datenbankeinträge. Bei einer manipulierten Zahlungsseite drohen auch Schäden für Besucher.
  • Zugriff aufrechterhalten: etwa durch eine zusätzliche Datei oder ein angelegtes Anwendungskonto, sofern die vorhandenen Rechte dies erlauben.
  • Verfügbarkeit stören: durch Prozessabstürze, Ressourcenverbrauch oder Manipulation der Anwendung.

Eine Shell ist dafür keine zwingende Voraussetzung. Die Sperre einzelner PHP-Funktionen wie exec() oder shell_exec() repariert keine Speicherfehler im Interpreter. Auch open_basedir ersetzt keine belastbare Isolation auf Betriebssystemebene. Behandeln Sie solche Einstellungen nicht als Nachweis, dass PHP2Shell keinen relevanten Schaden verursachen kann.3

Umgekehrt belegt eine erfolgreiche Codeausführung im Webprozess noch keine Übernahme des gesamten Hostsystems oder sämtlicher Kunden des Hosters. Dafür braucht der Angreifer weitere Zugriffsrechte, Fehlkonfigurationen oder Schwachstellen. Prüfen Sie den konkret erreichbaren Daten- und Berechtigungsumfang, statt entweder den gesamten Server pauschal abzuschreiben oder fehlende Root-Rechte als Entwarnung zu werten.

Welche PHP-Versionen beheben beide Lücken, und was gilt für PHP 8.1 oder älter?

Die ersten vollständigen Korrekturen des PHP-Projekts stehen in diesen Releases bereit:

  • PHP 8.2: ab 8.2.35
  • PHP 8.3: ab 8.3.36
  • PHP 8.4: ab 8.4.27
  • PHP 8.5: ab 8.5.12

Verwenden Sie mindestens den korrigierten Stand Ihres Zweigs oder dessen neueres Sicherheitsrelease. Ein Wechsel von PHP 8.3 auf 8.5 ist für diese beiden Korrekturen nicht zwingend erforderlich: Ein gepflegtes, vollständig gepatchtes 8.3-Paket erfüllt die Aufgabe ebenfalls. Ein Wechsel auf einen anderen, aber weiterhin ungepatchten Zweig löst sie dagegen nicht. Die bloße Bezeichnung „PHP 8“ reicht als Nachweis nicht aus.1

PHP 8.1 und ältere Zweige erhalten keine regulären Sicherheitsreleases mehr vom PHP-Projekt. Einige Distributoren und Anbieter mit Langzeitpflege liefern eigene Backports. Das PHP-Team hat wegen der Schwere außerdem minimale Quellcode-Backports für 7.4, 8.0 und 8.1 bereitgestellt. Das ist weder ein fertiges Hostingupdate noch eine Wiederaufnahme der regulären Pflege. Ein Anbieter muss solche Korrekturen fachgerecht integrieren, ausrollen und für sein Paket bestätigen.2

Wenn Ihre Altanwendung keinen unterstützten Zweig verträgt, benötigen Sie kurzfristig einen nachweislich korrigierten Anbieter-Build und parallel einen Migrationsplan. Ohne einen solchen Fix sollte die alte Laufzeit nicht unbeschränkt öffentlich erreichbar bleiben. Ein Backport für PHP2Shell beantwortet außerdem noch nicht, wie der Anbieter andere Sicherheitslücken dieser Altversion behandelt.

Im Hosting-Panel steht nur „PHP 8.5“. Wie ermittle ich den tatsächlichen Patchstand?

„PHP 8.5“ bezeichnet nur den Versionszweig. Die Anzeige unterscheidet die ungepatchte Version 8.5.9 nicht von der korrigierten Version 8.5.12. Der Hoster kann Sicherheitsupdates innerhalb des Zweigs einspielen, ohne den Namen der Auswahl im Kundenmenü zu ändern. Umgekehrt belegt die unveränderte Auswahl keinen aktuellen Patchstand.

Lesen Sie die vollständige Version aus einer tatsächlich über Ihre Domain ausgeführten PHP-Anfrage. In WordPress finden Sie die Serverinformationen unter Werkzeuge → Website-Zustand → Bericht → Server; je nach Übersetzung heißt der Informationsreiter auch „Info“. Notieren Sie Versionsnummer, Datum und betroffene Domain. Bei anderen Anwendungen verwenden Sie deren geschützte Systeminformationen oder lassen sich die Angaben vom zuständigen Administrator geben. Veröffentlichen Sie dafür keinen uneingeschränkt erreichbaren phpinfo()-Bericht.4

php -v im Terminal zeigt die Version des dort aufgerufenen Kommandozeilenprogramms. Der Webserver kann ein anderes PHP-Paket oder einen anderen FPM-Pool verwenden. Auch Subdomains und Verzeichnisse können abweichende Zuweisungen besitzen. Prüfen Sie deshalb jede eigenständige Installation und lassen Sie bei mehreren Backends alle Instanzen erfassen.

Eine vollständige Versionsnummer ordnet den regulären PHP-Release ein. Bei einem Anbieter-Backport brauchen Sie zusätzlich dessen Paketnachweis. Ein ausgeblendeter HTTP-Versionsheader sagt dagegen weder „sicher“ noch „verwundbar“ aus; er entfernt nur eine öffentlich sichtbare Information.

Mein Hoster meldet einen Backport, aber PHP zeigt weiter eine ältere Version. Welcher Nachweis genügt?

Eine ältere PHP-Versionsnummer kann zu einem vollständig korrigierten Anbieterpaket gehören. Bei einem Backport übernimmt der Anbieter die Sicherheitskorrekturen in seinen bestehenden Versionsstand. Linux-Distributionen nutzen dieses Vorgehen, um Sicherheitsfehler zu beheben und andere Verhaltensänderungen möglichst klein zu halten. Die ursprüngliche Upstream-Versionsnummer allein bildet den Korrekturstand dann nicht vollständig ab.5

Für eine belastbare Bestätigung müssen drei Angaben zusammenpassen: das Sicherheitsbulletin des Anbieters, die konkrete Paket- oder Buildkennung und die tatsächlich laufende Instanz Ihrer Website. Bitten Sie den Hoster deshalb um eine Antwort auf diese Punkte:

  • Behebt das eingesetzte Paket CVE-2026-109618 und CVE-2026-109619 vollständig?
  • Welche Paket- oder Buildversion enthält die Korrekturen, und welcher Anbieterhinweis dokumentiert sie?
  • Welche Domains, PHP-Pools und Backend-Server umfasst der abgeschlossene Rollout?
  • Seit wann laufen dort die korrigierten Prozesse, und hat der Hoster alle alten Worker ersetzt?

Eine nachvollziehbare Anbieterbestätigung mit diesem Bezug kann einen Backport belegen, auch wenn die kurze PHP-Versionskennung unverändert bleibt. Ein beliebiger Versionszusatz, ein allgemeines „alle Systeme aktuell“ oder ein Verweis auf aktive Firewall-Regeln reicht dafür nicht. Ebenso wenig sollten Sie einen dokumentierten Backport allein wegen einer älteren Upstream-Nummer als ungepatcht abweisen.

Bewahren Sie die Auskunft zusammen mit Domain, Zeitpunkt und Paketkennung auf. Wenn der Anbieter nur eine der beiden CVEs oder lediglich einzelne Angriffswege nennt, bleibt die vollständige Behebung offen. Lassen Sie genau diese Lücke in der Aussage klären.

Bin ich mit nginx, PHP-FPM, LiteSpeed, Windows oder einem Docker-Container geschützt?

Keine dieser Bezeichnungen liefert für sich eine Entwarnung. Entscheidend sind die verwendete PHP-Laufzeit und der vollständige Fix. nginx verarbeitet PHP normalerweise nicht selbst, sondern übergibt entsprechende Anfragen beispielsweise an PHP-FPM. Ein aktueller nginx vor einem ungepatchten PHP-FPM repariert dessen Sicherheitslücken nicht.

Die technische Einbindung beeinflusst allerdings die Angriffsvoraussetzungen. Apache mit mod_php gilt als besonders kritisch. PHP-FPM beendet einen Worker, wenn bereits der Start der Anfrage fehlschlägt; dadurch überlebt ein bestimmter früher Fehlerablauf dort nicht. Die Herstelleranalyse bestätigt dennoch einen FPM-Angriffsweg nach erfolgreichem Anfragestart, der eine geeignete Anwendungsoperation voraussetzt. „Dieser mod_php-Angriff funktioniert bei uns nicht“ bedeutet deshalb nicht „PHP2Shell betrifft uns nicht“.1

Auch andere Webeinbindungen, darunter LiteSpeed, FrankenPHP und PHP-CGI, gehören in die Bestandsaufnahme. Das Betriebssystem allein belegt ebenfalls keinen Fix. Fordern Sie für Windows- oder Linux-Pakete den passenden Herstellernachweis an, statt einen Wechsel der Serverplattform als Ersatz für das PHP-Update zu behandeln.

Ein Container kann den erreichbaren Bereich begrenzen, enthält aber weiterhin seine eigene PHP-Laufzeit. Ein Update des Hosts ersetzt diese nicht automatisch. Aktualisieren Sie das passende Image und die daraus gestarteten Container. Prüfen Sie zusätzlich eingebundene Verzeichnisse, Secrets und Datenbankrechte: Genau diese Ressourcen kann auch ein kompromittierter Prozess innerhalb des Containers erreichen, soweit seine Rechte es erlauben.

Meine Website hat kein Uploadformular und verwendet keine PHP-Sessions. Kann sie trotzdem betroffen sein?

Ja. Ein fehlendes Uploadformular und der Verzicht auf eigene Session-Aufrufe schließen PHP2Shell nicht aus. Ein Formular ist nur eine Bedienoberfläche für reguläre Besucher. Ein Angreifer kann HTTP-Anfragen selbst erzeugen und an einen erreichbaren PHP-Endpunkt senden, ohne ein entsprechendes Formular auf Ihrer Website zu finden.

PHP übernimmt Teile der Eingabeverarbeitung bereits vor dem eigentlichen Anwendungsskript. Deshalb verhindert beispielsweise eine Prüfung im Skript, die nur bestimmte Methoden zulässt, nicht zwangsläufig die davorliegende Verarbeitung. Eine später ausgegebene Fehlermeldung oder Weiterleitung sagt nichts darüber aus, welche Arbeit PHP vorher erledigt hat.

Die PHP-Funktion für den Upload-Fortschritt kann außerdem Session-Verarbeitung auslösen, obwohl Ihre Anwendung selbst kein session_start() aufruft. Ob eine Datei letztlich dauerhaft im Uploadordner landet, ist dabei eine andere Frage als die Verarbeitung der eingehenden Daten.3

Wenn Sie keine Uploads benötigen, kann die Administration entsprechende Anfragen bereits am Webserver oder vorgeschalteten Proxy ablehnen und unnötige Funktionen abschalten. Das reduziert bestimmte erreichbare Verarbeitungswege. Es beweist jedoch keine vollständige Korrektur beider CVEs. Prüfen Sie dabei auch APIs, Kontaktformulare und Webhooks, damit eine pauschale Sperre regulärer POST-Anfragen nicht unbemerkt wichtige Geschäftsabläufe unterbricht. Die verlässliche Behebung bleibt der korrigierte PHP-Build.

Helfen starke Passwörter, MFA, HTTPS, ein Sicherheitsplugin oder ein geschützter Adminbereich?

Diese Maßnahmen schützen wichtige andere Ebenen, beheben PHP2Shell aber nicht. Die bestätigten Angriffswege benötigen keine Anmeldung an WordPress oder einer anderen Webanwendung. Deshalb verhindert auch ein starkes Administratorpasswort mit Mehrfaktorauthentifizierung nicht, dass eine öffentliche Anfrage zuvor die verwundbare PHP-Laufzeit erreicht.

HTTPS verschlüsselt die Verbindung. Es prüft nicht, ob der Inhalt einer entschlüsselten Anfrage einen Fehler im PHP-Interpreter auslöst. Ein WordPress-Sicherheitsplugin arbeitet seinerseits als PHP-Anwendung und kann für Verarbeitungsschritte vor seinem Start zu spät kommen. Das Verschieben oder Sperren von wp-login.php schützt zudem nicht automatisch die übrigen PHP-Endpunkte.

Anders einzuordnen ist eine vollständige Zugangssperre, die Webserver, Reverse Proxy oder Firewall vor der Übergabe an PHP durchsetzen: beispielsweise eine eng begrenzte IP-Freigabe oder eine vorgeschaltete Authentifizierung. Sie kann unbekannten Internetnutzern die Erreichbarkeit nehmen. Dafür muss sie sämtliche betroffenen Pfade und Zugänge erfassen, einschließlich Subdomains und direkter Zugriffe auf den Ursprungsserver. Eine in PHP programmierte Passwortabfrage erfüllt diese Voraussetzung gerade nicht.

Behalten Sie MFA, HTTPS und den regulären Anwendungsschutz bei. Veranlassen Sie das PHP-Update zusätzlich. Falls Sie eine vorgeschaltete Sperre als Übergang einsetzen, dokumentieren Sie ihren Umfang und prüfen Sie, dass unerlaubte Anfragen PHP tatsächlich nicht mehr erreichen. Die Sperre begrenzt den Zugang; sie korrigiert den Interpreter nicht.

Meine Website nutzt Cloudflare oder eine andere WAF. Kann ich das PHP-Update verschieben?

Eine aktive, passend konfigurierte WAF ist eine zusätzliche Schutzschicht, aber kein Grund, das PHP-Sicherheitsupdate aufzuschieben. Cloudflare beschreibt Schutzregeln gegen PHP2Shell und empfiehlt seinen Kunden ausdrücklich trotzdem das PHP-Update. Ein CDN-Vertrag oder die Nutzung eines DNS-Dienstes allein belegt noch nicht, dass der gesamte relevante Verkehr diese Regeln durchläuft.6

Prüfen Sie in der tatsächlich eingesetzten Konfiguration, ob der Proxy aktiv ist, die vorgesehenen Regeln im blockierenden Modus arbeiten und keine Ausnahmen betroffene URLs ausnehmen. Der Ursprungsserver darf öffentlich erreichbare PHP-Anfragen nicht an der WAF vorbei annehmen. Berücksichtigen Sie dafür alternative Hostnamen, direkte Zugänge und weitere Backend-Server. Lassen Sie den Hoster diese Absicherung bestätigen, wenn Sie die Netzkonfiguration nicht selbst verwalten.

Unterscheiden Sie außerdem, was eine Schutzregel blockiert. Eine abgewiesene Anfrage kann den Origin vollständig verfehlen. Eine Regel, die erst die Serverantwort erkennt und zurückhält, trifft ihre Entscheidung dagegen nach einer Verarbeitung am Origin. Ein Eintrag „blockiert“ beweist deshalb ohne Kenntnis des Regeltyps weder eine erfolgreiche Kompromittierung noch deren Ausschluss. Werten Sie relevante Ereignisse zusammen mit den Origin-Protokollen aus.

Halten Sie wirksame Filter während des Updates aktiv und prüfen Sie mögliche Fehlalarme bei Formularen, Zahlungen und Uploads. Dokumentieren Sie anschließend den behobenen PHP-Patchstand gesondert. Die Firewall beantwortet die Frage nach gefiltertem Verkehr; das Update beantwortet die Frage nach den Fehlern in PHP.

Der Hoster hat nur Teilmaßnahmen umgesetzt. Was bewirken sie, und welche Risiken bleiben?

Teilmaßnahmen können einzelne Angriffswege unterbrechen. Die erheblichen Risiken durch andere Varianten bleiben jedoch bestehen, solange der vollständige Fix fehlt. Eine ausgeschaltete Funktion ist eine konkrete Verbesserung für den betroffenen Weg; daraus lässt sich weder eine Prozentzahl der Risikoreduktion noch eine allgemeine Freigabe für den öffentlichen Betrieb ableiten.

  • session.upload_progress.enabled=0: Diese Einstellung unterbindet die bestätigten frühen Session-Verarbeitungspfade. Sie repariert andere fehlerhafte interne Zustände nicht.
  • fatal_error_backtraces=0 unter PHP 8.5: Dies nimmt dem bestätigten Backtrace-Angriffsweg eine Voraussetzung. Andere Fehler- und Erweiterungszustände bleiben ein eigenes Thema.
  • Deaktivierter OPcache: Ein Angriff, der dessen fehlerhaften gemeinsamen Zustand benötigt, verliert diese Voraussetzung. Daraus folgt kein Schutz vor den übrigen Varianten. Die Abschaltung kann außerdem Last und Antwortzeiten erhöhen.
  • Begrenzte Anfragen: Größen- und Strukturgrenzen am Proxy oder Webserver können belastende Eingaben früher abweisen. Ein kleines post_max_size allein erfasst nicht jeden problematischen Fall.
  • memory_limit=-1: Diese offizielle Übergangsmaßnahme beseitigt den gezielt erreichbaren Abbruch am PHP-Speicherlimit. Sie muss verhindern, dass Anwendungscode oder abweichende Einstellungen ein endliches Limit erneut aktivieren. Eine tatsächliche fehlgeschlagene Speicherzuteilung bleibt möglich. Gleichzeitig entfällt eine Ressourcengrenze pro Skript. Die Administration muss deshalb Kapazität und geeignete Container- oder cgroup-Grenzen berücksichtigen; RLIMIT_AS und RLIMIT_DATA eignen sich dafür laut Hersteller nicht.

Für die frühen Session- und Backtrace-Maßnahmen zählen administrativ gesetzte Werte und der Austausch aller Worker. Ein späteres ini_set() im Anwendungsskript genügt nicht; auf FPM-.user.ini sollten Sie für diese frühen Schutzwirkungen ebenfalls nicht vertrauen. Die Unterdrückung von Fehlermeldungen durch display_errors=0 oder error_reporting verhindert den zugrunde liegenden Zugriff auf fehlerhaften Zustand nicht.7

Fordern Sie deshalb neben der Liste der aktiven Teilmaßnahmen einen verbindlichen Plan für das vollständige Update an. Lassen Sie Wirkung, Geltungsbereich und Betriebsfolgen prüfen. Übernehmen Sie insbesondere Speicheränderungen nicht ungeprüft in ein produktives Shared-Hosting- oder Shopsystem.

Wann sollte ich die Website vorübergehend offline nehmen, und wie mache ich das wirksam?

Wenn Ihre öffentlich erreichbare PHP-Laufzeit ungepatcht ist und kurzfristig kein bestätigter Fix bereitsteht, sollten Sie den öffentlichen Zugriff bis zur Behebung sperren oder eng beschränken. Bei einem ungeklärten Patchstand und sensiblen Kunden-, Zahlungs- oder Zugangsdaten ist eine vorläufige Beschränkung ebenfalls die belastbarere Entscheidung als eine unbelegte Entwarnung. CERT-EU empfiehlt, bei fehlender unmittelbarer Patchmöglichkeit die Isolation öffentlich erreichbarer Anwendungen zu prüfen.2

Wirksam ist eine Maßnahme, die vor PHP greift: beispielsweise eine Sperre im Webserver oder Reverse Proxy, eine Netzfreigabe nur für die Administration oder eine statische Ersatzseite ohne Weiterleitung an die verwundbare Laufzeit. Für eine vorübergehende Wartungsantwort eignet sich ein HTTP-Status 503; die konkrete Serverkonfiguration muss sicherstellen, dass auch Fehlerseiten und direkte PHP-Aufrufe nicht doch PHP ausführen.

Ein WordPress-Wartungsplugin, eine versteckte Startseite oder das Entfernen einzelner Links reicht dafür nicht. Auch eine reine DNS-Änderung blockiert bestehende Direktzugänge nicht zuverlässig. Erfassen Sie Subdomains, APIs, Webhooks, alternative Hostnamen und Zugänge zum Ursprungsserver. Beim Shop müssen Sie zusätzlich verhindern, dass Bestellungen oder Zahlungsrückmeldungen unbemerkt verloren gehen; koordinieren Sie die Unterbrechung mit den zuständigen Diensten.

Geben Sie den Zugriff wieder frei, sobald alle relevanten Instanzen den Fix ausführen und die wichtigen Anwendungsfunktionen arbeiten. Bei konkreten Angriffsspuren gehört zuvor auch die Vorfallbehandlung dazu. Eine pauschale Abschaltung sämtlicher bereits gepatchter Websites ist dagegen nicht erforderlich.

Wer muss das Update durchführen, und was tue ich, wenn der Hoster nicht rechtzeitig reagiert?

Die zuständige Stelle richtet sich danach, wer die PHP-Laufzeit technisch verwaltet. Als Websitebetreiber sollten Sie die Zuständigkeit und den Abschluss aktiv klären. Ein Wartungsvertrag für WordPress umfasst nicht automatisch die PHP-Pakete des Hosters; umgekehrt umfasst ein Serverupdate nicht automatisch die Wartung aller Anwendungen.

  • Shared Hosting und verwaltete PHP-Plattformen: Der Hoster stellt die Laufzeit bereit. Sie können häufig den Zweig auswählen, aber keine eigenen Sicherheitskorrekturen in dessen Binärpakete einbauen.
  • Eigener VPS oder dedizierter Server: Ohne ausdrücklich vereinbarte Administration liegt die Umsetzung regelmäßig bei Ihnen oder Ihrem beauftragten Administrator. „Server beim Hoster“ bedeutet nicht automatisch „Softwarepflege durch den Hoster“.
  • Container und mitgelieferte Laufzeiten: Der Verantwortliche für Image beziehungsweise Produktupdate muss die korrigierte Version bereitstellen; der Betreiber muss deren tatsächlichen Einsatz veranlassen und prüfen.

Eröffnen Sie beim zuständigen Support ein dringendes Sicherheitsticket mit beiden CVE-Nummern, den betroffenen Domains und den ermittelten PHP-Versionen. Fordern Sie einen Zeitpunkt für den vollständigen Rollout und eine Auskunft zu den bis dahin wirksamen Maßnahmen. Eine unverbindliche Zusage ohne Termin oder eine Antwort ausschließlich zu WordPress löst die Laufzeitfrage nicht.

Wenn der Anbieter keinen zeitnahen Fix liefern kann, klären Sie eine vorübergehende Zugangssperre oder den Wechsel auf eine nachweislich korrigierte Laufzeit. Ein kurzfristiger Umzug kann helfen, benötigt aber eine Prüfung von Datenkonsistenz, Konfiguration und Zugangsdaten. Kopieren Sie bei einem Kompromittierungsverdacht nicht einfach den gesamten möglicherweise manipulierten Bestand auf einen neuen Server.

Wie aktualisiere ich PHP, ohne Shop, Plugins oder ältere Anwendungen unnötig zu gefährden?

Bevorzugen Sie kurzfristig den vollständigen Sicherheitsfix innerhalb des bereits verwendeten, unterstützten PHP-Zweigs. Ein Patchupdate von 8.5.9 auf 8.5.12 ist eine andere Änderung als ein Wechsel von 7.4 auf 8.5. Ein größerer Versionssprung kann zusätzliche Anpassungen an Anwendung, Erweiterungen und Konfiguration verlangen. Auch ein Patchupdate verdient einen Funktionscheck; vollständige Kompatibilität lässt sich nicht allein aus der Versionsnummer ableiten.

Sichern Sie vor der Änderung Dateien, Datenbank und relevante Konfiguration. Bewahren Sie die Sicherung außerhalb des öffentlich erreichbaren Webverzeichnisses auf und klären Sie die Wiederherstellung. Für Shops und Portale muss der Sicherungsstand zusammenpassen: Neue Bestellungen, Zahlungen und Uploads dürfen bei einer Rücksicherung nicht widersprüchliche Datenstände erzeugen. Halten Sie daher einen gezielten Wartungs- und Rückfallplan bereit.

Prüfen Sie nach Möglichkeit auf einer abgeschirmten Testinstanz die geschäftskritischen Funktionen: Anmeldung, Formulare, Checkout, Zahlungsrückmeldungen, E-Mail-Versand, Uploads sowie zeitgesteuerte Aufgaben. Vergleichen Sie auch benötigte PHP-Erweiterungen und Einstellungen. Ein erfolgreicher Aufruf der Startseite testet diese Abläufe nicht. Bei langer Testdauer sollten Sie den ungepatchten Produktivbetrieb inzwischen wirksam beschränken.

Falls ein Fehler auftritt, untersuchen Sie zuerst die konkrete Ursache und halten Sie die Anwendung geschützt. Ein dauerhafter Rücksprung auf eine öffentlich erreichbare, verwundbare Laufzeit ist keine tragfähige Fehlerbehebung. Für eine Altanwendung kommen ein bestätigter Anbieter-Backport, eine beschleunigte Anpassung oder eine vorübergehende Isolation infrage. Planen Sie den Versionswechsel anschließend so, dass laufende Sicherheitsupdates wieder verlässlich möglich sind.

Das Paket ist aktualisiert. Woran erkenne ich, dass der Fix wirklich auf allen Instanzen läuft?

Die Updateaufgabe endet erst, wenn die korrigierte Laufzeit alle relevanten Webanfragen verarbeitet. Eine erfolgreiche Paketinstallation allein genügt nicht. Bereits laufende Prozesse können weiterhin den alten Programmstand verwenden. Bei PHP-FPM betrifft das die entsprechenden Pools und Worker, bei mod_php die Prozesse, die das PHP-Modul geladen haben.

Die Administration muss den vorgesehenen Neustart oder kontrollierten Prozesswechsel durchführen und prüfen, dass keine alten Worker übrig bleiben. Ein Reload zählt nur dann als Abschluss, wenn er tatsächlich die nötigen Prozesse ersetzt hat. Das Leeren des WordPress-Caches, ein CDN-Purge oder ein bloßer OPcache-Reset ersetzt keine ungepatchte PHP-Binärdatei im laufenden Prozess.

Bei Containern ist das Herunterladen eines neuen Images ebenfalls nur ein Zwischenschritt: docker compose pull startet daraus keine neuen Container. Die Bereitstellung muss die laufenden Instanzen ersetzen. Prüfen Sie auch die Vorlagen für automatische Skalierung und Neustarts, damit später keine alte Image-Version zurückkehrt.8

Für den Abschluss brauchen Sie eine Zuordnung aus Domain beziehungsweise Anwendung, Backend oder Pool, Paket-/Imagekennung und Zeitpunkt des Prozesswechsels. Kontrollieren Sie anschließend die Laufzeit über echte Webanfragen und führen Sie den Funktionscheck durch. Ein einzelner erfolgreicher Abruf kann hinter einem Loadbalancer nur einen Server treffen; selbst mehrere identische Antworten beweisen nicht, dass alle anderen Instanzen denselben Stand verwenden. Der Rollout-Nachweis der Administration ergänzt deshalb die Laufzeitmessung. Vorherige Kompromittierungen und andere Schwachstellen bleiben getrennte Prüfaufgaben.

Kann eine ungepatchte Testseite meine anderen Websites oder fremde Hostingkunden gefährden?

Eine weitere Website kann betroffen sein, wenn der kompromittierte PHP-Prozess auf deren Dateien, Daten oder Zugangsschlüssel zugreifen darf. Eine getrennte Domain ist noch keine Sicherheitsgrenze. In einem gemeinsamen Hostingkonto laufen mehrere Installationen häufig mit denselben Dateirechten oder verwenden Zugangsdaten, die mehr als eine Datenbank beziehungsweise Anwendung erreichen.

Beispiel: Eine alte Testinstallation verwendet ungepatchtes PHP und besitzt Schreibrechte auf das Verzeichnis des produktiven Shops. Ein Angreifer könnte über die Testseite Shop-Dateien verändern, obwohl der Shop selbst bereits eine korrigierte PHP-Laufzeit nutzt. Ebenso können lesbare Konfigurationsdateien den Zugriff auf weitere Datenbanken eröffnen. Das zusätzliche Risiko entsteht hier aus den gemeinsamen Berechtigungen, nicht aus einer automatischen Ausbreitung von PHP2Shell auf jede Nachbarseite.

Erfassen Sie deshalb alle Anwendungen im Konto und überprüfen Sie getrennte Betriebssystembenutzer, Dateirechte, Datenbankkonten, gemeinsam eingebundene Volumes und Secrets. Ein separater FPM-Pool allein belegt keine ausreichende Trennung, wenn beide Pools mit denselben Rechten auf dieselben Daten zugreifen. Stillgelegte Projekte sollten ihre öffentliche Erreichbarkeit und nicht mehr benötigte Berechtigungen verlieren.

Für andere Kunden beim selben Hoster gilt: Ein gemeinsamer physischer Server beweist keine gemeinsame Betroffenheit durch einen erfolgreichen Angriff auf ein einzelnes Konto. Wirksame Mandantentrennung kann den Schaden begrenzen. Lassen Sie den Hoster bei einem Vorfall die tatsächlichen Grenzen untersuchen, statt aus einem Treffer pauschal auf sämtliche Kunden zu schließen. Die allgemeine Updatepflicht für deren eigene betroffene PHP-Laufzeiten bleibt davon unabhängig.

Laufen bereits Angriffe, und wie erkenne ich, ob meine Website schon kompromittiert wurde?

Cloudflare berichtet am 21. Oktober 2026 über beobachteten Angriffsverkehr gegen PHP2Shell. Das belegt eine reale Bedrohung, aber keinen erfolgreichen Angriff auf Ihre Website. Für Ihren eigenen Befund müssen Sie drei Stufen unterscheiden: eine verwundbare Laufzeit, einen Angriffsversuch und nachgewiesene unbefugte Aktivitäten. Eine ältere Versionsnummer begründet zunächst Prüfbedarf. Erst der Abgleich mit dem Paket- und Backportstand klärt die technische Betroffenheit; einen Angriff beweist auch eine bestätigte Verwundbarkeit nicht.6

Sichern und korrelieren Sie die verfügbaren Webserver-, Proxy-, WAF-, PHP- und Systemprotokolle. Relevante Untersuchungsansätze sind ungewöhnliche Anfragefolgen zusammen mit Speicherfehlern, gehäufte Prozessabstürze, unerklärliche Änderungen an Dateien oder Konten sowie auffällige ausgehende Verbindungen. Jeder dieser Hinweise kann auch andere Ursachen haben. Eine Meldung „Allowed memory size exhausted“, ein HTTP-Fehler 500 oder ein WAF-Treffer beweist für sich weder PHP2Shell noch eine erfolgreiche Übernahme.

Prüfen Sie zusätzlich Anwendungscode, Datenbankinhalte, Administratorkonten, geplante Aufgaben und Konfiguration gegen vertrauenswürdige Vergleichsstände. Bei WordPress kann eine Prüfsummenkontrolle Abweichungen an offiziellen Core-Dateien erkennen. Sie bewertet damit aber weder sämtliche Plugins und Uploads noch Datenbankinhalte oder reine Speicherzugriffe. Auch ein unauffälliger Malware-Scan schließt einen früheren Datenabfluss nicht aus.9

Betrachten Sie den gesamten plausiblen Expositionszeitraum und lassen Sie Protokolle beim Hoster sichern, bevor ihre Aufbewahrungsfrist endet. Die Veröffentlichung einer Lücke markiert nicht zwingend den ersten möglichen Angriff. Wenn Belege fehlen, sollte der Abschlussbericht das präzise sagen: „In den verfügbaren Daten keine Hinweise gefunden“ ist belastbarer als die unbegründete Aussage „Es gab keinen Angriff“.

Entfernt das PHP-Update auch Schadsoftware, und was muss ich bei konkretem Angriffsverdacht tun?

Nein. Das Update schließt die PHP-Fehler, entfernt aber keine zuvor angelegten Zugänge, manipulierten Dateien oder Datenbankänderungen. Ein bereits kompromittiertes System benötigt zusätzlich eine geordnete Vorfallbehandlung. Beginnen Sie nicht damit, einzelne verdächtige Dateien blind zu löschen und anschließend den Betrieb für bereinigt zu erklären.

  1. Zugriff und Schaden begrenzen: Isolieren Sie die betroffene Anwendung beziehungsweise Instanz möglichst vor PHP. Beziehen Sie Hoster und verantwortliche Administration ein und berücksichtigen Sie erreichbare Nachbarsysteme.
  2. Spuren sichern: Bewahren Sie Logs, relevante Datenstände und eine Zeitleiste auf. Stimmen Sie bei ernsthaftem Verdacht die Sicherung flüchtiger Informationen vor Neustarts mit Fachleuten ab. Verschieben Sie eine notwendige Eindämmung nicht, nur um eine perfekte Beweissicherung abzuwarten.
  3. Umfang bestimmen: Untersuchen Sie Einstieg, Veränderungen, erreichbare Geheimnisse und mögliche Folgezugriffe. Ein gefundener Schadcode kann nur ein Teil des Vorfalls sein.
  4. Vertrauenswürdigen Zustand herstellen: Bauen Sie betroffene Komponenten aus sauberen Quellen neu auf oder stellen Sie einen geprüften Stand wieder her. Kontrollieren Sie auch Datenbank, Konten, Uploads, Konfiguration und geplante Aufgaben. Schließen Sie den ursprünglichen Zugang vor der erneuten Freigabe.
  5. Zugänge erneuern und Betrieb kontrollieren: Widerrufen Sie betroffene Tokens und Sessions, ersetzen Sie gefährdete Schlüssel und überwachen Sie das wiederhergestellte System.

Ein Backup ist nur dann hilfreich, wenn sein Zustand und seine Herkunft belastbar sind. Ein vermeintlich „frühes“ Backup kann bereits Manipulationen enthalten. Die Wiederherstellung auf dieselbe ungepatchte Laufzeit öffnet zudem den ursprünglichen Angriffsweg erneut. Trennen Sie daher Wiederherstellung, PHP-Korrektur und Ursachenanalyse als überprüfbare Aufgaben.9

Muss ich Passwörter, Datenbankzugänge, API-Schlüssel und Kundenzugänge austauschen?

Ein nachgewiesener oder begründet vermuteter unbefugter Zugriff erfordert die Prüfung und Erneuerung der dabei erreichbaren Geheimnisse. Eine nur festgestellte alte PHP-Version beweist dagegen noch keinen Passwortdiebstahl. Entscheidend ist, was der betroffene Prozess lesen, aus dem Speicher offenlegen oder über vorhandene Rechte erreichen konnte.

Prüfen Sie insbesondere Datenbankkennwörter, SMTP-Zugänge, Zahlungs- und sonstige API-Schlüssel, Cloud- oder Speichertokens, Anwendungspasswörter und Signaturschlüssel. Erfassen Sie auch Secrets in Umgebungsvariablen, eingebundenen Dateien und anderen Installationen desselben Kontos. Ändern Sie wiederverwendete Zugangsdaten auch an den weiteren betroffenen Stellen. Ein Angreifer kann einen entwendeten Schlüssel nach dem PHP-Update weiterhin außerhalb Ihres Webservers benutzen.

Führen Sie den Austausch von einer vertrauenswürdigen Verwaltungsumgebung aus durch. Sperren oder widerrufen Sie gefährdete Zugänge kurzfristig, wenn weiterer Missbrauch droht. Hinterlegen Sie die neuen Geheimnisse anschließend nur in einer bereinigten und gepatchten Umgebung; sonst kann ein noch aktiver Angreifer sie erneut erlangen. Stimmen Sie die Reihenfolge mit den abhängigen Diensten ab, damit beispielsweise Datenbank- und Zahlungszugänge nach dem Wechsel zusammenpassen.

Bei WordPress betrifft die Prüfung neben Administratorpasswörtern auch aktive Sitzungen, Anwendungspasswörter und die Schlüssel beziehungsweise Salts für Anmeldecookies. Für Kundenkonten zählt, ob Kontodaten, Passwort-Hashes oder aktive Sitzungen betroffen sein können. Hashes sind keine Klartextpasswörter, können aber je nach Verfahren und Passwortstärke Offline-Angriffe erlauben. Wenn Angreifer solche Anmeldedaten erlangt haben oder Sie deren Zugriff nach einer bestätigten Übernahme nicht belastbar eingrenzen können, setzen Sie die betroffenen Passwörter zurück und widerrufen Sie die Sitzungen. Informieren Sie Kunden über die nötigen Schritte und mögliche Risiken wiederverwendeter Kennwörter. Ein isolierter Wechsel des eigenen Adminpassworts reicht bei umfassender Kompromittierung nicht.

Muss ich einen PHP2Shell-Vorfall der Datenschutzaufsicht oder meinen Kunden melden?

Eine verwundbare PHP-Version allein löst noch keine Datenpannenmeldung aus. Sobald eine Verletzung des Schutzes personenbezogener Daten bekannt wird, müssen Sie deren Risiken und die Meldepflichten prüfen. Dazu zählen nicht nur gestohlene Kundendaten, sondern auch unbefugte Veränderungen oder ein sicherheitsbedingter Verlust ihrer Verfügbarkeit. Beziehen Sie die zuständige Datenschutzverantwortung früh ein.

Nach Artikel 33 DSGVO meldet der Verantwortliche eine solche Verletzung der zuständigen Aufsichtsbehörde unverzüglich und möglichst innerhalb von 72 Stunden nach Bekanntwerden, es sei denn, sie führt voraussichtlich nicht zu einem Risiko für die Rechte und Freiheiten betroffener Personen. Die Frist beginnt nicht erst mit einem fertigen Forensikbericht. Wenn noch Angaben fehlen, erlaubt die DSGVO eine schrittweise Ergänzung ohne unangemessene weitere Verzögerung. Dokumentieren Sie auch eine begründete Entscheidung gegen eine Meldung.

Artikel 34 verlangt grundsätzlich zusätzlich die unverzügliche Benachrichtigung betroffener Personen, wenn voraussichtlich ein hohes Risiko für ihre Rechte und Freiheiten besteht; die dort geregelten Ausnahmen müssen im konkreten Fall greifen. Ein allgemeiner Hinweis „Wir haben PHP aktualisiert“ ersetzt eine erforderliche Benachrichtigung nicht. Diese sollte verständlich erklären, was geschehen ist, welche Folgen drohen, was Sie unternehmen, welche Schritte Betroffene ergreifen können und wer Auskunft gibt.10

Ein Hoster als Auftragsverarbeiter muss dem Verantwortlichen bekannt gewordene Datenschutzverletzungen unverzüglich melden. Seine technische Untersuchung nimmt Ihnen die eigene Bewertung nicht ab. Prüfen Sie bei einem tatsächlichen Vorfall außerdem vertragliche und gegebenenfalls branchenspezifische Meldepflichten. Eine rechtliche Einzelfallprüfung muss den konkreten Sachverhalt berücksichtigen; die bloße Bezeichnung „PHP2Shell“ entscheidet weder automatisch für noch gegen eine Meldung.

Fachlich geprüft am 22. Oktober 2026. Die hochgestellten Ziffern führen zu den Grundlagen der jeweiligen Antwort.

Quellen zu den FAQ

Herstellerangaben bilden die Grundlage für Fehlerbild und Korrekturen. Die praktischen Abläufe erläutern deren Umsetzung im Websitebetrieb; einen individuellen Befund liefern erst die Daten der jeweiligen Installation.

  1. Hersteller: Lücken und vollständige Korrekturen. PHP-Sicherheitsmeldung vom 21. Oktober 2026; technische Herstelleranalysen zu CVE-2026-109618 und CVE-2026-109619. Grundlage für Fehlerbild, Schweregrad, Webeinbindungen und Release-Grenzen.
  2. Operative Empfehlungen und ältere Laufzeiten. CERT-EU, Advisory 2026-018 und NCSC-NL: PHP2Shell. Hinweise zu Dringlichkeit, Isolation, mitgelieferten Laufzeiten und Backports für nicht mehr regulär gepflegte Zweige.
  3. PHP-Funktionen und Grenzen von Konfigurationssperren. PHP-Handbuch zu Session-Upload-Fortschritt und zentralen INI-Einstellungen, insbesondere disable_functions und open_basedir.
  4. Versionsabfrage im Webkontext. WordPress: Website-Zustand und PHP-Handbuch: Kommandozeilenoptionen.
  5. Nachweis von Sicherheits-Backports. Debian Security FAQ: Versionsnummern und zurückportierte Sicherheitskorrekturen. Die Aussage zu einem konkreten Hostingpaket muss zusätzlich dessen Anbieter belegen.
  6. WAF-Schutz und beobachteter Angriffsverkehr. Cloudflare: PHP2Shell-Schutzmaßnahmen, 21. Oktober 2026; ergänzend Funktionsweise und Grenzen der Antwortfilterung. Primärbericht des WAF-Anbieters; seine Beobachtungen belegen keinen Angriff auf eine bestimmte Website.
  7. Forschungsbefunde und Grenzen der Teilmaßnahmen. Herstellerempfehlungen in der PHP-Sicherheitsmeldung und den unter 1 genannten Advisories; Wiz Research: technische Analyse zu Speicheroffenlegung und OPcache. Die Bewertung der Betriebsfolgen erläutert die praktische Umsetzung.
  8. Aktivierung aktualisierter Pakete und Container. Debian Security FAQ: Updates und laufende Prozesse; Docker-Dokumentation zu Compose pull und Compose up.
  9. Vorfallbehandlung und Grenzen einzelner Prüfungen. BSI: Erste Hilfe bei einem schweren IT-Sicherheitsvorfall; WordPress-Dokumentation zu Core-Prüfsummen und Sicherheitsmaßnahmen. Die Handlungsschritte übertragen diese Grundsätze auf den Betrieb einer PHP-Website.
  10. Datenschutzrechtliche Meldung und Benachrichtigung. DSGVO, insbesondere Artikel 4 Nummer 12 sowie Artikel 33 und 34; ergänzend Hessischer Datenschutzbeauftragter: FAQ, Abschnitt Datenpannen.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Es tut uns leid, dass der Beitrag für dich nicht hilfreich war!

Lasse uns diesen Beitrag verbessern!

Wie können wir diesen Beitrag verbessern?

Werbung

FRITZ!Box 6890 (LTE- oder DSL-Modem, bis 300 MBit/s, WLAN AC+N bis 1.733 (5 GHz) und 800 (2,4 GHz) MBit/s, 4 x Gigabit-LAN), geeignet für Deutschlandℹ︎
Kein Angebot verfügbar.
UGREEN Nexode USB C Ladegerät 65W, 4-Port, GaN Netzteil, Mehrfach Charger | Laptop Schnellladegerät unterstützt PPS 45W kompatibel mit MacBook Pro/Air, HP Laptop, iPad Serien, iPhone 17, Galaxy S26ℹ︎
Ersparnis 19%
UVP**: € 35,99
€ 28,99
Auf Lager
Preise inkl. MwSt., zzgl. Versandkosten
Fritz!Box 6820 LTE (LTE (4G) und UMTS (3G), WLAN N bis 450 MBit/s, 1 x Gigabit-LAN, Internationale Version)ℹ︎
€ 84,99
Auf Lager
Preise inkl. MwSt., zzgl. Versandkosten
TP-Link TL-SG108 8-Port Gigabit Netzwerk Switch (Plug-and-Play, 8* RJ-45 LAN s, Metallgehäuse, IGMP-Snooping, unmanaged, lüfterlos) blau metallicℹ︎
Ersparnis 30%
UVP**: € 29,90
€ 20,98
Auf Lager
Preise inkl. MwSt., zzgl. Versandkosten
€ 20,98
Preise inkl. MwSt., zzgl. Versandkosten
€ 20,98
Preise inkl. MwSt., zzgl. Versandkosten
UGREEN Nexode 65W USB C Ladegerät, 3-Port, GaN Netzteil, PPS Charger 60W | kompakter Netzteil, Laptop Schnellladegerät, kompatibel mit MacBook Air/Neo, iPhone 17-8, iPads, Schwarz, 2x USB-C+1x USB-Aℹ︎
Ersparnis 43%
UVP**: € 34,99
€ 19,99
Auf Lager
Preise inkl. MwSt., zzgl. Versandkosten
€ 36,46
Preise inkl. MwSt., zzgl. Versandkosten
HP 302 Schwarz, Original Druckerpatrone | Tinte für HP DeskJet 1100, 2100, 2200, 3600, 3800, 4600, HP ENVY 4500, HP OfficeJet 3800, ~170 Seiten (F6U66AE)ℹ︎
Kein Angebot verfügbar.
Anker Nano 65W USB C Ladegerät, 3-Port PPS Schnellladegerät, iPad Ladegerät | Netzteil USB C, Schnellladen für MacBook Pro, Dell XPS, iPhone 17/16/15 Serie, Galaxy, iPad Pro, Pixelℹ︎
Ersparnis 44%
UVP**: € 45,99
€ 25,76
Auf Lager
Preise inkl. MwSt., zzgl. Versandkosten
€ 29,89
Preise inkl. MwSt., zzgl. Versandkosten
NETGEAR LAN Switch 8 Port, Managed Gigabit Netzwerk Switch GS108E | Plug-und-Play, Leiser Betrieb, Desktop/Wandmontageℹ︎
Ersparnis 17%
UVP**: € 41,99
€ 34,84
Auf Lager
Preise inkl. MwSt., zzgl. Versandkosten
€ 34,84
Preise inkl. MwSt., zzgl. Versandkosten
€ 34,84
Preise inkl. MwSt., zzgl. Versandkosten
TP-Link Powerline Adapter Triple Set TL-PA7017P KIT(1000Mbit/s Homeplug AV2, mit Steckdose, 2 Gigabit Ports, Plug&Play, kompatibel mit Allen Powerline Adaptern, ideal für Streaming, energiesparend)ℹ︎
Ersparnis 10%
UVP**: € 99,80
€ 89,67
Auf Lager
Preise inkl. MwSt., zzgl. Versandkosten
Anker 140W USB C Ladegerät, Laptop Ladegerät, 4-Port Multi-Geräte Netzteil | Smart Display und Multi-Geräte Schnellladen mit Touch-Steuerung, für MacBook, iPhone 17/16/15 Serie, Galaxy, Pixelℹ︎
Ersparnis 22%
UVP**: € 89,99
€ 69,77
Auf Lager
Preise inkl. MwSt., zzgl. Versandkosten
Lenovo IdeaPad Slim 5i Laptop | 14" OLED WUXGA Display | Intel Core i7-13620H | 16GB RAM | 512GB SSD | Intel UHD Grafik | Windows 11 Home | QWERTZ | Luna Grau | 3 Monate Premium Careℹ︎
Kein Angebot verfügbar.
HP, Druckerpatrone, Hewlett-Packard 302XL/304XL Black Original Ink Crtg, 302XL/304XL (BK)ℹ︎
€ 36,07
Preise inkl. MwSt., zzgl. Versandkosten
€ 31,99
Preise inkl. MwSt., zzgl. Versandkosten
Ersparnis 2%
UVP**: € 38,47
€ 37,89
Preise inkl. MwSt., zzgl. Versandkosten
ℹ︎ Werbung / Affiliate-Links: Wenn Sie auf einen dieser Links klicken und einkaufen, erhalte ich eine Provision. Für Sie verändert sich der Preis dadurch nicht. Zuletzt aktualisiert am 22. Oktober 2026 um 13:50. Die hier gezeigten Preise können sich zwischenzeitlich auf der Seite des Verkäufers geändert haben. Alle Angaben ohne Gewähr.
(**) UVP: Unverbindliche Preisempfehlung

Preise inkl. MwSt., zzgl. Versandkosten
Nach oben scrollen