Skip to main content
ratgeber / sicherheit

PHP2Shell: Was jetzt zu tun ist.

Zwei kritische Lücken im PHP-Kern, CVE-2026-109618 und CVE-2026-109619, erlauben Angriffe auf Websites ohne Login. Hier steht alles, was bisher bekannt ist: wer betroffen ist, welche Versionen sicher sind, wie du WordPress, deinen Server und Plesk absicherst und woran du einen Angriff erkennst. Erstfassung: 21. Oktober 2026, abends.

[ einfach erklärt ]

Kein Hosting bei mir? Kein IT‑Nerd?

Hier ist alles, was du wissen musst →
[ updates ]
22.10.2026 / 11:45

BSI-Warnung, ein erster Angriffsversuch schon am 17. Oktober, unabhängige Bestätigung des Exploits und Abschaltungen in Deutschland. Zu den neuen Erkenntnissen →

21.10.2026 / 23:45

Neue Erkenntnisse zur Vollständigkeit des Patches, zu öffentlichen Exploits, zur Ausnutzung und zur Erkennung. Zu den neuen Erkenntnissen →

Mit Hilfe von KI erstellt, von mir kontrolliert und bearbeitet.

das wichtigste in kürze

Die Lücken stecken im PHP-Kern selbst, nicht in WordPress, Shopware oder einem Plugin. Zusammen heißen sie „PHP2Shell“. Beide sind vom PHP-Sicherheitsteam mit CVSS 9.2 von 10 als kritisch bewertet. Angreifer können ohne Login per Remote Code Execution (RCE) fremden Code auf dem Server ausführen und per Memory Leak Arbeitsspeicher auslesen, in dem Passwörter, Tokens und API-Keys liegen können. Betroffen ist laut PHP jede PHP-Installation, die HTTP-Requests beantwortet: PHP-FPM, Apache mit mod_php, php-cgi, FrankenPHP und LiteSpeed. Der fehlerhafte Code reicht bis PHP 5.4 aus dem Jahr 2012 zurück. Behoben in PHP 8.5.12, 8.4.27, 8.3.36 und 8.2.35, veröffentlicht am 21. Oktober 2026 um 14:00 UTC. Für 7.4 bis 8.1 gibt es vom PHP-Team nur einen Minimal-Patch als Source, für ältere Versionen gar nichts. Distributionen und Anbieter liefern aber Backports. Es gibt Angriffsversuche, laut Amazon schon seit dem 17. Oktober. Das BSI warnt mit Stufe 3 / Orange. Nur das PHP-Update hilft, danach müssen alle PHP-Prozesse neu starten. Ein WordPress-Update, Sicherheits-Plugins oder der Wartungsmodus schützen nicht, weil der Angriff abläuft, bevor WordPress überhaupt startet. Auf Plesk-Servern zeigt der Updater die PHP-Updates nicht immer an. Bei mir waren diese zwei Befehle auf der Konsole nötig:
apt update
apt upgrade

Quellen: PHP-Advisory, Wiz, Sansec, Cloudflare, The Hacker News, Meow Apps, Amazon, BSI

update: neue erkenntnisse

Erster Angriffsversuch schon am 17. Oktober: Amazon Threat Intelligence hat im Honeypot-Netz MadPot einen PHP2Shell-Exploit-Versuch vom 17. Oktober gefunden, vier Tage vor der Veröffentlichung. Er kam über einen Anonymisierungsdienst, woher der Angreifer die Details hatte, ist unklar. Am 21. Oktober folgten ab 02:00 UTC weitere Versuche mit unterschiedlichen Payloads, laut Amazon von mehreren Akteuren. Amazons Fazit: „PHP2Shell is now being broadly exploited in the wild.“ Amazon rät, Logs ab dem 17. Oktober zu prüfen und nach POST-Requests mit PHP_SESSION_UPLOAD_PROGRESS zu suchen. BSI-Warnung: Das BSI warnt mit Kritikalität 3 / Orange (BITS-H 2026-297981-1132, Version 1.1 vom 21. Oktober): „Maßnahmen müssen unverzüglich ergriffen werden.“ Weil kein Workaround vollständig schützt, rät das BSI, einen Webserver bis zum Patch vom Internet zu trennen, wenn du nicht sofort aktualisieren kannst. Zusätzlich empfiehlt es SELinux oder AppArmor. Berichte über Angriffe in sozialen Medien konnte das BSI zu diesem Zeitpunkt nicht verifizieren. Unabhängig bestätigt: Das RUS-CERT der Universität Stuttgart schreibt: „Wir konnten einen Exploit erfolgreich an einem Testsystem verifizieren.“ Zu den Workarounds: „Die Mitigations reichen nicht aus, um eine öffentlich erreichbare PHP-Anwendung zu betreiben.“ Erfolgreiche Einbrüche sind weiter nicht öffentlich belegt. Die CISA hatte nach eigener Aussage keine Ausnutzung beobachtet (NBC News), im KEV-Katalog fehlen beide CVEs auch am 22. Oktober (Rescana). Die PHP Foundation fand unter den nach dem Leak verbreiteten PoCs zum Zeitpunkt der Veröffentlichung keinen funktionierenden Exploit (Tenable). Inzwischen gibt es aber funktionierende PoCs, siehe unten. Am Update ändert das nichts. Richtigstellung der Gerüchte: Ein Beitrag auf daubois.dev, nach eigener Aussage aus dem PHP Security Team, ordnet die Meldungen nach dem Leak ein: „the panic was right about how bad this is and wrong about most of the details“. Offiziell gilt CVSS 9.2, nicht 10.0. Der meistgenannte Tipp session.upload_progress.enabled = 0 betrifft nur CVE-2026-109619, und der wichtigste Workaround memory_limit = -1 fehlte in fast allen Berichten. Abschaltungen in Deutschland: Die Charité nahm ihre Website vorsorglich vom Netz, ausdrücklich ohne Cyberangriff, Online-Termine waren nicht buchbar. Laut dpa folgten unter anderem die Stadt Mainz, die Ruhr-Universität Bochum, die Stadt Dresden und die Landesregierungen von Baden-Württemberg, Bayern, Hessen und Thüringen. heise nennt außerdem Teile von berlin.de, Einschränkungen an der FU Berlin, die Onlinewache der Berliner Polizei und Behörden in Niedersachsen. Erste Seiten in Norddeutschland sind laut heise wieder online. Weitere Distributionen: Laut heise haben inzwischen auch SUSE und Slackware gepatchte Pakete veröffentlicht. Ist der Patch vollständig? Datadog Security Labs hält den Fix für den bekannten Exploit für vollständig, das Muster dahinter aber für riskant: Auch in PHP 8.5.12 erhöht das Einfügen in eine Hashtable den Zähler, bevor der Key alloziert ist. Datadog erwartet weitere ähnliche Bugs, besonders in alten Versionen, die nur den Minimal-Patch bekommen haben. Unbestätigte Behauptungen: Auf X kursiert ein Screenshot, laut dem drei Angriffswege auch auf PHP 8.5.12 noch funktionieren, darunter ein Use-after-free beim Deserialisieren. Der Screenshot bestätigt selbst, dass beide CVEs behoben sind, und einer der Wege braucht zusätzlich eine LFI-Lücke in der Anwendung. Weder das PHP-Team noch ein Hersteller hat das bisher bestätigt. Am Update ändert das nichts: Es bleibt Pflicht. Öffentliche Proof-of-Concepts: Seit dem Morgen des 21. Oktober liegen öffentliche PoCs auf GitHub, etwa ikow/php2shell-poc mit mehreren Chains und einem Docker-Lab. Einige Chains brauchen zusätzliche Bedingungen wie eine LFI-Lücke oder ein Gadget in der Anwendung (Cybersecurity News). Die Hürde für Angreifer sinkt damit weiter. Ausnutzung: Datadog berichtet von „multiple reports of active exploitation in the wild“ und von breit angelegten, ungezielten Scans. Huntress hatte zunächst keine Ausnutzung beobachtet (SecurityWeek). Im KEV-Katalog der CISA stehen beide CVEs weiterhin nicht (watchTowr). Erkennung: Ein erfolgreicher Exploit liefert laut Datadog HTTP 200 und muss den Worker nicht abstürzen lassen. Verdächtig sind übergroße Formularfelder, im Test rund 3,5 MB. Eine WAF übersieht Angriffe, wenn sie große Bodies abschneidet. Der stärkste Hinweis ist ein Shell-Prozess unter dem Webserver-Prozess. Nebenwirkung des Updates: Überschreitet ein Request das neue Hard Limit, beendet PHP den Worker sofort mit _exit(137) statt sauber aufzuräumen (Datadog).

Quellen: Datadog Security Labs, Cybersecurity News, ikow/php2shell-poc, SecurityWeek, watchTowr-FAQ, X-Post mit dem Screenshot, Amazon Threat Intelligence, BSI, RUS-CERT, daubois.dev, NBC News, Rescana, Tenable, heise, it-daily, Berliner Zeitung, Tagesspiegel (dpa)

was ist php2shell?

PHP ist die Programmiersprache hinter rund 70 Prozent aller Websites, darunter WordPress, WooCommerce, Shopware, Drupal, Joomla, TYPO3 und Nextcloud. „PHP2Shell“ ist der Sammelname für zwei CVE-Nummern, die zusammen vier Memory-Corruption-Bugs im PHP-Core abdecken. Der Name kommt vom Exploit-Skript „php2shell“, mit dem die Forschenden ihre Exploits demonstriert haben.

Merkmal CVE-2026-109618 CVE-2026-109619
Titel bei PHP CVE-2026-109618: RCE via OOM corruption CVE-2026-109619: RCE via stale global state
Kurz gesagt CVE-2026-109618: Ein Out-of-Memory-Fehler (OOM) unterbricht PHP per longjmp mitten in der Initialisierung eines Requests, der Cleanup arbeitet danach mit halb initialisierten Daten. CVE-2026-109619: Globaler State eines Requests überlebt dessen Ende (Stale Global State). Ein späterer Request im selben Prozess greift auf bereits freigegebenen Speicher zu (Use-after-free).
CVSS CVE-2026-109618: CVSS v4.0 9.2, kritisch CVE-2026-109619: CVSS v4.0 9.2, kritisch
CWE CVE-2026-109618: CWE-416, 755, 824, 1325, 1419 CVE-2026-109619: CWE-416, 755, 824, 1325, 1419

Der CVSS-Vektor lautet bei beiden AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H. Übersetzt: Attack Vector Network, keine Privileges und keine User Interaction nötig, volle Auswirkung auf Confidentiality, Integrity und Availability. Die „Attack Complexity: High“ heißt nach meiner Lesart, dass ein Angriff auf Build, Speicher und Timing abgestimmt werden muss. Das passt zum PHP-Advisory, laut dem die Zuverlässigkeit von Build, Extensions und Memory-Allocator abhängt. Das bremst Angreifer, schützt aber nicht: Funktionierende Exploits sind demonstriert.

Anfangs kursierte ein CVSS-Score von 10.0, unter anderem von watchTowr. Offiziell vergibt das PHP-Team 9.2. Und nicht verwechseln: „WP2Shell“ ist eine andere Lücke in WordPress selbst, die ein normales WordPress-Update behebt. PHP2Shell kann nur dein Hoster oder Server-Admin beheben.

Quellen: php2shell.com, Wiz, beide GitHub-Advisories des PHP-Teams, The Hacker News, Meow Apps

chronologie

Die Bug-Klasse ist seit über 20 Jahren bekannt und galt lange als praktisch nicht ausnutzbar. So kam es zum Emergency-Release. Alle Zeiten in UTC.

Datum Ereignis Quelle
2004 Stefan Esser beschreibt die erste Remote-Schwachstelle rund um PHPs Speichergrenze memory_limit. Calif
2020 PHP-Bug #78876 wird gemeldet. Calif
2024 Beim ersten externen Security-Audit seit Jahren (Quarkslab, organisiert über OSTIF, finanziert von der Sovereign Tech Agency) findet ein Core-Developer erste Anzeichen des Bugs hinter CVE-2026-109618. Andere Probleme haben Vorrang, konkurrierende Fix-Ansätze lassen die Arbeit über Monate stocken. Die PHP Foundation nennt das selbst ein „strukturelles Versagen“. PHP Foundation
30. Juli 2026 Calif beginnt sein PHP-Audit im Rahmen von OpenAIs Programm „Patch the Planet“. PHP Foundation
1. Aug. 2026 Ryan Austin von Calif findet mehrere RCE-Wege. Calif, Sansec
11. Aug. 2026 Calif meldet den ersten Bug an PHP, OpenAI meldet am selben Tag dieselbe Ursache. Der Fix wird oberste Priorität. Calif, PHP Foundation
14./15. Aug. 2026 Calif übergibt einen funktionierenden Exploit, PHP bestätigt ihn. Calif
19.–21. Aug. 2026 Wiz Research findet die Bugs unabhängig davon und demonstriert Exploits gegen Drupal und WordPress. Am 21. meldet Calif den zweiten Bug. Wiz, Calif
24. Aug. 2026 Wiz meldet weitere Angriffsvektoren an PHP. Wiz, PHP Foundation
18. Sep. 2026 OpenAI meldet weitere Angriffsvektoren. PHP Foundation
21. Sep. 2026 Laut Wiz bestätigt PHP die Meldungen und startet den koordinierten Fix. Die PHP Foundation nennt dieses Datum nicht. Wiz
20. Okt., ca. 15:00 Die CVE-Nummern kursieren öffentlich, ein Beitrag auf Hacker News kündigt das Disclosure für den 22. Oktober an. watchTowr bestätigt auf X, dass die Lücken echt sind. PHP Foundation, SOCRadar
20. Okt., 19:30 PHP kündigt das Update für den 21. Oktober um 14:00 UTC an, einen Tag früher als geplant. CERT-EU, das Notfallteam der EU-Institutionen, gibt ein Advisory heraus. php.net, SOCRadar
20. Okt., ca. 20:00 Calif veröffentlicht versehentlich ein Video seines funktionierenden Exploits. PHP Foundation
21. Okt., 03:02 Cloudflare schaltet WAF-Regeln für alle Kunden standardmäßig scharf. Cloudflare
21. Okt., 07:41 Chainguard veröffentlicht vorzeitig gepatchte Images und bricht damit das Embargo, rund sechs Stunden vor dem Update. Aus solchen Images lässt sich der Patch grundsätzlich per Patch-Diffing ablesen. PHP Foundation
21. Okt., 07:43 Cloudflare meldet erste Exploit-Versuche. Sansec
21. Okt., 14:00 PHP veröffentlicht 8.5.12, 8.4.27, 8.3.36 und 8.2.35. Calif, Wiz, OpenAI und PHP veröffentlichen die Details (Disclosure). php.net
21. Okt., 14:19 watchTowr meldet aktive Exploit-Versuche auf beide Lücken. Um 11:26 UTC hatte watchTowr noch keine gesehen. The Hacker News

technischer hintergrund

Wer nur wissen will, was zu tun ist, springt weiter zu den Abschnitten für Website-Betreiber und Admins.

Das gemeinsame Grundproblem

PHP arbeitet mit sogenannten Workern: Ein Prozess beantwortet nacheinander viele Requests und räumt dazwischen den Speicher auf. Läuft ein Request in einen Fatal Error, typischerweise das Überschreiten von memory_limit oder einen Timeout, bricht PHP die laufende Operation per longjmp hart ab. Passiert das im falschen Moment, bleiben halb fertige Datenstrukturen oder Pointer auf bereits freigegebenen Speicher zurück, und der nächste Request behandelt diesen Speicher als gültig. Fachleute nennen das „Use-after-free“.

Entscheidend: Alle bekannten Auslöser stecken im Parsing von multipart/form-data, also Formularen und Datei-Uploads. PHP verarbeitet diese Daten, bevor der Code deiner Website läuft. Deshalb ist eine Seite auch dann angreifbar, wenn ihr eigener Code fehlerfrei ist.

Quellen: beide GitHub-Advisories des PHP-Teams, Wiz, Sansec

CVE-2026-109618: OOM-Corruption mitten in der Initialisierung

Laut PHP ist Speicher eines Requests manchmal schon erreichbar, bevor er fertig initialisiert ist. Schlägt genau dann irgendeine Allocation fehl, verlässt PHP den Vorgang per longjmp, und beim Request-Shutdown wird mit ungültigen Daten gearbeitet. Calif beschreibt ein Beispiel: Eine Hashtable erhöht ihren Zähler, bevor der neue Eintrag fertig ist. Kommt dazwischen der OOM, verarbeitet der Cleanup einen halb fertigen Eintrag.

Angreifer lösen den OOM gezielt aus, etwa mit Multipart-Requests ohne brauchbare Content-Length, die an der Größenprüfung vorbeikommen, mit beliebig vielen Headern pro Part, mit leeren File-Feldern, die nicht gegen das Upload-Limit zählen, und mit verschachtelten Array-Feldnamen, die den Aufwand vervielfachen.

Dazu kommt ein Memory Leak wie bei Heartbleed: Ein Stale Pointer auf die Session-ID kann einen abgebrochenen Request überleben. Ein späterer Request bekommt dann im PHPSESSID-Cookie Inhalte aus fremdem Speicher zurück, auch wenn die Website gar keine Sessions nutzt.

Zur Zuordnung: Wiz und Sansec rechnen das Memory Leak und den Bug im Session Upload Progress CVE-2026-109618 zu. Das PHP-Advisory führt den Session Upload Progress unter CVE-2026-109619. Ich halte mich bei den Beschreibungen an die offiziellen PHP-Texte.

Bestätigt ist laut PHP Remote Code Execution mit den Rechten des Webserver-Benutzers, ohne Login, getestet gegen Apache mit mod_php in der Default-Konfiguration. mod_php räumt auch nach einem fehlgeschlagenen Request-Startup auf und ist dadurch angreifbar, bevor irgendein Website-Code läuft. PHP-FPM beendet den Prozess in diesem Fall, ist laut Quellcode-Analyse aber nach einem normalen Startup trotzdem anfällig. Für FrankenPHP und LiteSpeed gilt das laut PHP vermutlich ähnlich.

Quellen: GHSA-w8hw-w9fx-j79w, Calif, Wiz, Sansec

CVE-2026-109619: Stale Global State aus dem vorherigen Request

Bestimmter globaler State, etwa zu Error-Handling, Sessions oder Extensions, überlebt den Request, der ihn erzeugt hat. Für einen Exploit braucht es zwei Requests an denselben Prozess: einen, der den State durch einen Fatal Error zurücklässt, und einen zweiten, der ihn benutzt, bevor er zurückgesetzt wird.

Fatal Error Backtraces in PHP 8.5: Ist fatal_error_backtraces aktiv, wird dieser State nicht zurückgesetzt. Das ist laut PHP der stärkste Fall und Grundlage des bestätigten Exploits. Session Upload Progress: Ein OOM während des Uploads lässt Session-State zurück. Bestätigt für mod_php und PHP-FPM. OPcache: Laut Wiz geraten nach einem OOM der prozesslokale Cache und der Shared-Memory-Cache aus dem Takt, ein anderer Prozess liest dann Daten als falschen Typ (Type Confusion).

Mehrere Worker und regelmäßige Restarts der Prozesse senken die Erfolgsquote, beseitigen das Risiko aber nicht.

Quellen: GHSA-6wmf-4rv5-p3rp, Wiz, JFrog

Was das Update ändert

Ein OOM bricht PHP nicht mehr per longjmp mitten in einer Operation ab. Stattdessen gibt es ein Soft Limit, an dem PHP am nächsten sicheren Punkt stoppt, und ein Hard Limit, an dem sich der Prozess sofort mit _exit(137) beendet. Persistenter State wird beim Request-Shutdown zurückgesetzt. Eine Nebenwirkung: Wird das Hard Limit erreicht, laufen keine Shutdown-Funktionen mehr. Wer darüber Logging oder Cleanup erledigt, sollte das wissen.

Quellen: GHSA-w8hw-w9fx-j79w, JFrog, php2shell.com, Datadog

betroffene versionen

PHP-Branch verwundbar sicher ab Support
PHP 8.5 verwundbar: unter 8.5.12 sicher ab 8.5.12 aktiver Support bis 31.12.2027
PHP 8.4 verwundbar: unter 8.4.27 sicher ab 8.4.27 aktiver Support bis 31.12.2026
PHP 8.3 verwundbar: unter 8.3.36 sicher ab 8.3.36 Security-Support bis 31.12.2027
PHP 8.2 verwundbar: unter 8.2.35 sicher ab 8.2.35 Security-Support bis 31.12.2026
PHP 8.1, 8.0, 7.4 verwundbar: alle Versionen Minimal-Patch als Source vom PHP-Team, gepatchte Pakete von Distributionen, Sury, Plesk und cPanel Support beendet
PHP 7.3 bis 5.4 verwundbar: alle Versionen kein Patch von PHP, aber Backports von Sury (kostenlos), Ubuntu Pro, AlmaLinux und kommerziellen Anbietern wie Zend oder TuxCare Support beendet

Wichtig bei Paketen aus Linux-Distributionen: Debian, Ubuntu und andere backporten Fixes oft, ohne die Versionsnummer zu ändern. php -v zeigt dann eine alte Nummer, obwohl das Paket sicher ist. Prüf in dem Fall den Changelog des Pakets.

Wichtig bei 7.4, 8.0 und 8.1: Das PHP-Team hat dafür keinen vollständigen Fix veröffentlicht, sondern laut Commit eine „Minimal mitigation for EOL version“. Sie deckt beide CVEs ab, schaltet aber Session Upload Progress fest ab, egal was in der php.ini steht. Sury nutzt diesen Patch, das habe ich im Quellpaket für 7.4 nachgesehen. Für künftige Lücken gibt es in diesen Zweigen keine Garantie, plan also den Umstieg auf 8.3 oder neuer.

Quellen: GitHub-Advisories des PHP-Teams, SOCRadar (Support-Daten), php.net, Calif, The Hacker News, Commit des Minimal-Patches, deb.sury.org #145

Server-Varianten (SAPIs)

Apache mit mod_php höchstes Risiko: ein einziger Request ohne Login genügt, bevor Website-Code läuft
PHP-FPM (nginx, Apache, Caddy) betroffen, CVE-2026-109619 erreichte auch hier RCE
php-cgi, FrankenPHP, LiteSpeed betroffen
PHP-CLI für Cronjobs und Skripte in den Advisories nicht genannt, weil kein Webzugang. Meine Empfehlung: trotzdem mit aktualisieren

Die Voraussetzungen sind in der Standardeinstellung erfüllt: Session Upload Progress ist per Default aktiv, und praktisch jede Website nimmt Formulardaten an.

Quellen: php.net, Calif, Upwind, JFrog

Betroffene Anwendungen

Weil die Lücke in PHP steckt, ist jede PHP-Anwendung betroffen. Vorgeführt wurden Angriffe ohne Login auf WordPress 7.1.2, Drupal 11.4.3, Joomla 6.1.4, MediaWiki 1.46.2, Roundcube 1.7.4, Magento 2.4.9, phpMyAdmin 5.2.3, Nextcloud 35.0.1, Laravel 13.11, Symfony 8.1 und WHMCS. Das sind nur Beispiele. Shopware, WooCommerce, TYPO3, Contao und Eigenentwicklungen sind genauso betroffen.

Vergiss die versteckten Installationen nicht: Appliances und Admin-Oberflächen mit Embedded PHP, Windows-Programme mit mitgeliefertem PHP, Control-Panels, alte Testseiten und Subdomains. Laut einer Shodan-Auswertung laufen rund 884.000 öffentlich erreichbare Server mit PHP 8.1 oder älter, also ohne offizielles Update.

Quellen: Calif, Sansec, php2shell.com, NCSC-NL, SOCRadar (Zahlen von Mallory.ai), Vincent Schmalbach

stand bei hostern und anbietern

Momentaufnahme vom 21. Oktober 2026. Prüf immer die aktuelle Seite deines Anbieters.

Linux-Distributionen

Ubuntu: gepatcht laut USN-8948-1 und USN-8948-2. Ohne Abo für 22.04 (php8.1 8.1.2-1ubuntu2.28) und 24.04 (php8.3 8.3.6-0ubuntu0.24.04.13). Für 20.04 (php7.4), 18.04 (php7.2), 16.04 (php7.0) und 14.04 (php5) gibt es den Patch nur über Ubuntu Pro (ESM) (Ubuntu-CVE-Seite). Debian 12 (php8.2 8.2.35-1~deb12u1) und Debian 13 (php8.4 8.4.27-1~deb13u1) sind über die Security-Repositories gepatcht (Debian Security Tracker). Debian 11 mit PHP 7.4 bekommt keinen kostenlosen Patch, Debian LTS endete am 31. August 2026 (ma.ttias.be). Einen Patch über Freexians kostenpflichtiges ELTS habe ich bis zum Abend nicht gefunden. packages.sury.org (Ondřej Surý) hat am 21. Oktober für Debian 12 und 13 gepatchte Pakete auch für alle End-of-Life-Zweige von 5.6 bis 8.1 veröffentlicht, kostenlos. Ich habe die Pakete geprüft: Bei 5.6, 7.4 und 8.1 nennt das Changelog beide CVEs. ARM-Builds kommen verzögert, für Ubuntu 16.04 gibt es nichts (Issue #145). In 5.6 bis 7.1 fehlt noch das Multipart-Limit aus CVE-2023-0662, Surý hat ein Update angekündigt (Issue #146). Das Launchpad-PPA für Ubuntu zeigte zunächst noch 8.3.35 und 8.4.26 (Vincent Schmalbach). Remi: rpms.remirepo.net hatte am 21. Oktober keine Updates, PHP rät zu Paketen der Distribution (php.net). Laut ma.ttias.be patcht Remi 7.4, 8.0 und 8.1 weiter, aber ohne Zusage. Red Hat und AlmaLinux: Red Hat hatte zunächst nur den Stream php:7.4 auf RHEL 8 gepatcht. AlmaLinux hat zusätzlich 7.2, 7.3, 8.0, 8.1 und die neueren Streams selbst gepatcht, außer 7.4 aber vorerst nur im Testing-Repository. Patches für Streams nach dem RHEL-Lebensende sind laut AlmaLinux künftig nicht garantiert. SUSE und Slackware: haben laut heise am 22. Oktober nachgezogen. cPanel: EasyApache 4 (Version 25.91) bringt 8.2.35 bis 8.5.12 und gepatchte ea-php74, ea-php80 und ea-php81. Ältere Zweige deckt das nicht ab (NCSC-NL). CloudLinux: gepatchte alt-php 7.4 und 8.0 auf den meisten Plattformen, 8.1 auf einigen. alt-php 5.2 bis 7.3 waren am Abend noch im Test (CloudLinux). Plesk hat unten einen eigenen Abschnitt. Kommerzielle Anbieter: Zend meldet laut ma.ttias.be gepatchte LTS-Builds für 7.2 bis 8.1. TuxCare testet laut InMotion Hosting Pakete für seinen Extended Lifecycle Support. Eine eigene Meldung von Zend oder TuxCare habe ich nicht gefunden.

Community-Patches

Auf GitHub gibt es Community-Repositories mit eigenen Patches für alte Versionen, etwa Anton-Barinov/php2shell-patches für PHP 5.6 bis 8.1. Nach eigener Angabe kombiniert es offizielle und Community-Backports und lässt Uploads samt Fortschrittsbalken funktionieren. Das PHP-Team steht nicht dahinter, und ich habe den Code nicht geprüft. Meine Empfehlung: nur als letzter Ausweg, wenn es weder Pakete der Distribution noch einen Anbieter gibt, und nur nach eigenem Code-Review. Auf GitHub kursieren zu PHP2Shell auch gefälschte Exploits mit Schadcode (JFrog), führ also nichts ungeprüft aus.

Hoster

Die meisten großen Hoster spielen Patches oder WAF-Regeln ein, darunter Cloudways, DreamHost, Kinsta, SiteGround, WP Engine, OVHcloud, Pantheon und Rocket.net. Bei GoDaddy-VPS musst du PHP selbst aktualisieren (Meow Apps). Bei Shared Hosting gilt: Frag nach, ob die sichere Version für jede deiner Domains aktiv ist. Ein Versionswechsel im Kundenmenü beweist das nicht (Vincent Schmalbach).

Google Cloud

Google Cloud selbst ist nicht verwundbar, PHP-Anwendungen der Kunden schon. App Engine Standard mit PHP 8.2 oder neuer wird automatisch aktualisiert, App Engine Flexible nicht. Cloud Run wird automatisch aktualisiert, wenn Automatic Base Image Updates aktiv sind, sonst musst du neu builden und neu deployen. Bei GKE und eigenen Container-Images ebenfalls neu builden und ausrollen. PHP 8.1 und älter bleiben verwundbar (Google Cloud, Bulletin GCP-2026-070).

Cloudflare und andere Schutzdienste

Cloudflare hat seit 21. Oktober, 03:02 UTC, WAF-Regeln gegen die bekannten Angriffsvektoren aktiv, auch im Free-Plan ohne eigenes Zutun. Bezahlkunden sollen prüfen, dass das Managed Ruleset auf Block statt nur auf Log steht. Angreifer haben ihre Requests bereits angepasst, um die Regeln zu umgehen (Cloudflare). Akamai, AWS, Fastly, Imperva, Microsoft und Vercel haben ebenfalls Schutzmaßnahmen veröffentlicht (Wiz). Eine WAF ersetzt das Update nicht: Ist dein Server zusätzlich direkt über seine IP-Adresse erreichbar, läuft der Angriff an ihr vorbei.

Docker

Ein neues Image nur zu pullen reicht nicht. Bau deine Images auf dem gepatchten Base-Image neu und erstell die Container neu (Meow Apps). FrankenPHP braucht eine neue FrankenPHP-Version, Laravel Vapor die gepatchte Runtime plus neues Deployment (Vincent Schmalbach).

Quellen: Meow Apps, Vincent Schmalbach, php.net, Google Cloud, Cloudflare, Wiz, Ubuntu, Debian Security Tracker, deb.sury.org #145, deb.sury.org #146, AlmaLinux, CloudLinux, NCSC-NL, ma.ttias.be, InMotion Hosting, Anton-Barinov/php2shell-patches, heise

wird die lücke schon ausgenutzt?

Ja, es gibt Angriffsversuche. Bestätigte erfolgreiche Einbrüche waren bis zum Abend des 21. Oktober nicht öffentlich dokumentiert.

Amazon fand den ersten Angriffsversuch schon am 17. Oktober, vier Tage vor der Veröffentlichung, und spricht inzwischen von breiter Ausnutzung, siehe Update. Cloudflare sah Angriffe auf Kunden, nachdem die Lücke vorzeitig bekannt geworden war, laut Sansec erstmals um 07:43 UTC und damit vor dem Update. Cloudflare-Technikchef Dane Knecht: „We are seeing early attacks emerging and are updating mitigations as new vectors show up.“ watchTowr meldete um 14:19 UTC aktive Angriffsversuche auf beide Lücken, beobachtet über eigene Honeypots. Aikido und Patchstack berichten von Angriffen bzw. mehreren Vorfällen, ohne technische Details. Im Known-Exploited-Vulnerabilities-Katalog (KEV) der US-Behörde CISA standen beide CVEs auch am 22. Oktober noch nicht (Rescana). Der Sicherheitsforscher Kevin Beaumont rechnet mit einer Welle von Vorfällen: „one of the biggest vulns in years“.

Vorsicht vor gefälschten Exploits: JFrog berichtet von angeblichen Test-Exploits auf GitHub mit verstecktem Code. Wer „mal eben testen“ will, führt im Zweifel fremden Code auf dem eigenen Rechner aus. Seit dem 21. Oktober gibt es aber auch echte öffentliche PoCs, siehe Update.

Zum Vergleich: Bei der letzten großen PHP-Lücke, CVE-2024-4577 im Juni 2024, sah Akamai Angriffsversuche innerhalb von 24 Stunden nach der Veröffentlichung.

Quellen: Cloudflare, Sansec, The Hacker News, watchTowr, SOCRadar, Help Net Security, JFrog, Cybersecurity News, Amazon Threat Intelligence, Rescana

was website-betreiber jetzt tun sollten

Du hast eine WordPress-Seite, einen Shop oder eine andere PHP-Website und kümmerst dich nicht selbst um den Server? Dann gehst du so vor:

PHP-Version nachsehen: In WordPress unter Werkzeuge, Website-Zustand, Bericht, Server. Steht dort 8.2.35, 8.3.36, 8.4.27, 8.5.12 oder höher, ist das ein gutes Zeichen. Eine niedrigere Nummer heißt nicht zwingend „verwundbar“, weil viele Hoster Patches als Backport ohne neue Versionsnummer einspielen. Beim Hoster nachfragen, zum Beispiel so: „Ist auf dem Server meiner Domain der PHP-Fix für CVE-2026-109618 und CVE-2026-109619 installiert, und sind die PHP-Prozesse neu gestartet? Welche PHP-Version läuft dort?“ Läuft noch PHP 8.1 oder älter: Backup anlegen, Plugins und Theme aktualisieren, auf PHP 8.3 oder 8.4 wechseln und die wichtigsten Seiten testen, also Startseite, Kontaktformular, Warenkorb und Kasse. Nutzt du Cloudflare, prüf, dass die WAF aktiv ist. Das ist eine zusätzliche Hürde, kein Ersatz. Nach Spuren suchen: unbekannte Admin-Konten, Plugins, die du nicht installiert hast, PHP-Dateien im Ordner wp-content/uploads, fremde Seiten bei der Google-Suche site:deinedomain.de und Warnungen in der Search Console. Bei Verdacht: Hoster informieren, sauberes Backup einspielen und alle Passwörter und API-Keys wechseln.

Ein Update von WordPress, Plugins oder Theme behebt PHP2Shell nicht. Das muss auf dem Server passieren.

Quellen: Meow Apps, php.net

was server-admins jetzt tun sollten

1. Bestandsaufnahme

Erfasse jede PHP-Installation, öffentlich erreichbare zuerst: Pakete der Distribution, mehrere PHP-Versionen nebeneinander, Docker-Images, Control-Panels, gebündelte PHP-Binaries, Staging- und Testsysteme und alte Subdomains. Das britische NCSC nennt diese Bestandsaufnahme als ersten Schritt. Die Schleife unten ist meine Ergänzung.

# Installierte PHP-Zweige (Debian/Ubuntu)
ls /etc/php

# Versionen aller PHP-Programme
for b in /usr/bin/php* /usr/sbin/php-fpm*; do [ -x "$b" ] && echo "$b: $($b -v 2>/dev/null | head -1)"; done

2. Logs sichern

Kopier vor dem Update die Logs von Webserver und PHP ab dem 20. Oktober 2026 weg. Updates und Log-Rotation können sie sonst löschen.

3. Aktualisieren

sudo apt update
apt-cache policy php8.3-fpm      # installiert und verfügbar vergleichen
apt-mark showhold                 # gesperrte Pakete blockieren Updates still
sudo apt upgrade

# Ist die Korrektur im Paket? Änderungsprotokoll prüfen
zcat /usr/share/doc/php8.3-fpm/changelog.Debian.gz | head -20

Aktualisier alle installierten PHP-Versionen, nicht nur die gerade genutzte. Update-Buttons in Control-Panels installieren nur, was das eingestellte Repository anbietet. Wer selbst kompiliert, findet die Quellen auf php.net und die Minimal-Patches für 7.4, 8.0 und 8.1 auf GitHub.

4. Alles neu starten

Ein installiertes Paket schützt erst, wenn die alten Prozesse beendet sind.

sudo systemctl restart php8.3-fpm    # je PHP-Version
sudo systemctl restart apache2       # bei mod_php

# Prozesse, die noch das alte Programm nutzen
ls -l /proc/*/exe 2>/dev/null | grep -i 'php.*deleted'

Auch Queue-Worker, Laravel Horizon, Octane und Scheduler neu starten. Leg zum Prüfen keine öffentliche phpinfo()-Seite an.

5. Nach dem Update aufräumen

Workarounds wie den Multipart-Block oder memory_limit = -1 zurücknehmen und Uploads und Formulare testen. memory_limit, post_max_size und max_input_nesting_level wieder sinnvoll begrenzen. session.upload_progress.enabled = 0 dauerhaft ausgeschaltet lassen, wenn du die Funktion nicht brauchst. Das empfiehlt PHP auch nach dem Update.

Quellen: Vincent Schmalbach, UK NCSC, php2shell.com, php.net, GHSA-6wmf-4rv5-p3rp

plesk: so kommt das update wirklich an

Plesk ist bei kleinen Agenturen und Hostern weit verbreitet, und gerade hier gab es am 21. Oktober Verwirrung.

Meine Erfahrung: Auf meinem Plesk-Server unter Linux zeigte der Plesk-Updater keine Updates an. Erst diese zwei Befehle auf der Konsole haben die korrigierten PHP-Pakete installiert:

apt update
apt upgrade

Damit bin ich nicht allein. Im Plesk-Forum berichten mehrere Admins dasselbe: „In some cases, users won't see the update on their GUI.“ Andere sahen die Updates dagegen im Updater. Verlass dich also nicht auf die GUI, sondern prüf die installierte Version auf der Konsole.

Drei PHP-Baustellen auf einem Plesk-Server

Die PHP-Versionen von Plesk (Pakete plesk-php82, plesk-php83 und so weiter, installiert unter /opt/plesk/php/). Damit laufen meist deine Websites. Das PHP deiner Linux-Distribution, falls es als PHP-Version für Domains aktiviert ist. sw-engine, das PHP, mit dem das Plesk-Panel selbst läuft.

Stand bei Plesk am 21. Oktober

PHP 8.2 bis 8.5 unter Linux gepatcht: 8.2.35, 8.3.36, 8.4.27, 8.5.12
PHP 7.4 bis 8.1 unter Linux gepatchte Pakete seit 21. Oktober im Plesk-Repository, etwa 7.4.33-debian.12.261021.1344 (eigene Prüfung)
PHP unter Windows in Arbeit
PHP 5.6, 7.2 und 7.3 Verweis auf den kostenpflichtigen Langzeit-Support von TuxCare
sw-engine (Panel) Patch für Plesk Obsidian 18.0.80 und 18.0.81 angekündigt, laut Support-Artikel 18.0.80#11 und 18.0.81#4

Nach dem Update der Website-PHP-Versionen zeigten Ausgaben im Forum für sw-engine weiterhin PHP 8.4.24 oder 8.4.25. Das Panel war also zunächst noch nicht abgesichert, obwohl die Websites es schon waren. Den Plesk-Support-Artikel konnte ich nur über ein Suchmaschinen-Snippet lesen, prüf den aktuellen Stand deshalb direkt dort.

Schritt für Schritt unter Debian oder Ubuntu

Erst den Plesk-Installer anstoßen, dann die Repositories aktualisieren. Diese Reihenfolge hat im Forum mehreren Admins geholfen. Laut Plesk spielt das Plesk-Update außerdem fehlende GPG-Keys ein.

sudo plesk installer update
sudo apt update
sudo apt upgrade

# Meldet der Installer "BUSY: Update operation was locked"
sudo plesk installer stop
sudo plesk installer update

Erscheint bei apt update der Fehler NO_PUBKEY für die Plesk-PHP-Quellen, half im Forum, den GPG-Key von Plesk neu einzuspielen. Das ist ein Community-Workaround, kein offizieller Plesk-Weg:

sudo cp /etc/apt/keyrings/plesk.gpg /etc/apt/keyrings/plesk.gpg.bak
curl -fsSL https://autoinstall.plesk.com/plesk.gpg | gpg --dearmor | sudo tee /etc/apt/keyrings/plesk.gpg > /dev/null
sudo apt update
sudo apt upgrade

Danach die installierten Versionen prüfen. Erwartet werden 8.2.35, 8.3.36, 8.4.27 oder 8.5.12 und neuer:

for p in /opt/plesk/php/*/bin/php; do echo "$p: $($p -v | head -1)"; done
apt policy plesk-php83-fpm

Dann die PHP-Dienste neu starten. Die Dienstnamen entsprechen dem Plesk-Standard, das ist meine Ergänzung:

sudo systemctl restart plesk-php83-fpm
sudo systemctl restart plesk-php84-fpm
sudo systemctl restart apache2
Panel absichern: Sobald der sw-engine-Patch da ist, Plesk aktualisieren. Bis dahin empfehle ich, den Zugang zum Panel auf Port 8443 auf bekannte IP-Adressen zu beschränken. Übergangsweise Session Upload Progress serverweit abschalten: session.upload_progress.enabled = 0 in der php.ini unter /opt/plesk/php/8.3/etc/ (je Version) setzen und die Dienste neu starten. Laut PHP muss die Einstellung greifen, bevor ein Request verarbeitet wird, darum nicht auf .user.ini verlassen. Domains prüfen: Unter Werkzeuge & Einstellungen, PHP-Einstellungen siehst du die installierten Versionen, bei jeder Domain die verwendete. Domains auf PHP 8.1 oder älter jetzt umstellen und testen.

Quellen: Plesk-Forum, Seite 3, Plesk-Forum, Seite 4, Plesk-Support-Artikel, php.net, Plesk-Repository

workarounds, falls du nicht sofort aktualisieren kannst

Laut PHP gibt es keinen vollständigen Workaround über die Konfiguration. Alle folgenden Maßnahmen schließen nur einzelne Angriffsvektoren. Das britische NCSC rät: Wenn du weder aktualisieren noch die Mitigations schnell genug umsetzen kannst, erwäge, das System vom Netz zu nehmen. CERT-EU rät, betroffene Anwendungen bis zum Update vom öffentlichen Netz abzuschotten. Das BSI rät ebenso zur Trennung vom Internet, und laut RUS-CERT reichen die Mitigations nicht, um eine öffentlich erreichbare PHP-Anwendung zu betreiben.

Gegen CVE-2026-109618

; php.ini
memory_limit = -1

; PHP-FPM-Pool, von Anwendungen nicht überschreibbar
php_admin_value[memory_limit] = -1

; kleine Obergrenzen für Formulardaten
post_max_size = 8M         ; ohne Datei-Uploads
; post_max_size = 32M      ; mit Datei-Uploads
upload_max_filesize = 2M   ; muss unter post_max_size liegen

Achtung: Mit memory_limit = -1 kann ein einzelner Request den ganzen RAM belegen. PHP empfiehlt als Grenze ein Container- oder cgroup-Limit. Auf keinen Fall RLIMIT_AS oder RLIMIT_DATA verwenden, die lösen genau den verwundbaren Fall aus. Zusätzlich sollte der Webserver Body-Größe, Anzahl der Felder, Multipart-Parts und Header begrenzen, auch für Requests ohne Content-Length.

Gegen CVE-2026-109619

session.upload_progress.enabled = 0
fatal_error_backtraces = 0   ; nur PHP 8.5

; im PHP-FPM-Pool fest verankern
php_admin_flag[session.upload_progress.enabled] = off

Setz das in der php.ini, im FPM-Pool oder in der Server-Konfiguration und starte danach alle PHP-Prozesse neu. Verlass dich nicht auf ini_set() oder .user.ini, die greifen laut PHP zu spät. Entfern außerdem ungültige oder veraltete PHP-Einstellungen, die bei jedem Request Warnungen erzeugen. Bei PHP-FPM hilft pm.max_requests = 1, weil dann kein Prozess zwei Requests bedient. Das kostet aber deutlich Performance.

Bei Shared Hosting ohne Root-Zugang schlagen Vincent Schmalbach und das Tool php-fix eine .user.ini vor. PHP rät ausdrücklich davon ab, sich darauf zu verlassen. Meine Empfehlung: als Notbehelf besser als nichts, aber den Hoster zum Update drängen.

Die harte Variante: Multipart-Requests blocken

Alle bekannten Auslöser sind Requests mit dem Content-Type multipart/form-data. Wer sie am Webserver abweist, blockiert die bekannten Angriffsvektoren. Die Nebenwirkung: Datei-Uploads funktionieren nicht mehr, also etwa die WordPress-Mediathek, und je nach Plugin auch manche Kontaktformulare. Normale Seiten, Logins und APIs laufen weiter.

# nginx: /etc/nginx/conf.d/block-multipart.conf
map $http_content_type $block_multipart {
    default       0;
    ~*multipart   1;
}
# in jedem server-Block, der an PHP weitergibt
if ($block_multipart) { return 444; }

# Apache 2.4
<If "req('Content-Type') =~ /multipart/i">
    Require all denied
</If>

# Caddy und FrankenPHP
@multipart header_regexp Content-Type (?i)multipart
respond @multipart 403

# LiteSpeed (.htaccess, oberhalb des WordPress-Blocks)
RewriteEngine On
RewriteCond %{HTTP:Content-Type} multipart [NC]
RewriteRule ^ - [F]

Testen, auch direkt gegen die IP-Adresse des Servers, und die Sperre nach dem Update wieder entfernen:

curl -sS -o /dev/null -w '%{http_code}\n' -X PUT -F test=1 https://deinedomain.de/index.php
curl -sS -o /dev/null -w '%{http_code}\n' -X PUT -F test=1 --resolve deinedomain.de:443:SERVER-IP https://deinedomain.de/index.php

Weitere Möglichkeiten: nicht benötigte Testseiten sofort abschalten, Tools wie phpMyAdmin auf die eigene IP-Adresse beschränken, im Notfall PHP stoppen und eine statische Wartungsseite ausliefern. Der Wartungsmodus von WordPress reicht dafür nicht.

Quellen: php.net, GHSA-w8hw-w9fx-j79w, GHSA-6wmf-4rv5-p3rp, UK NCSC, SOCRadar, Vincent Schmalbach, Sansec, php-fix, BSI, RUS-CERT

was nicht schützt

Updates von WordPress, Plugins oder Theme. Die Lücke steckt in PHP. Sicherheits-Plugins wie Wordfence, auch im Modus „Extended Protection“, sowie Login- und Formularprüfungen. Sie laufen erst, nachdem PHP den Request schon verarbeitet hat. Der Wartungsmodus von WordPress, Laravel oder Magento. file_uploads = Off und enable_post_data_reading = Off. PHP liest die Daten trotzdem oder die Formulare gehen kaputt. disable_functions sowie das Ausblenden von Fehlermeldungen über error_reporting oder display_errors. Eine WAF oder ein CDN, wenn der Server zusätzlich direkt erreichbar ist. session.upload_progress.enabled = 0 allein. Das hilft laut The Hacker News nicht gegen CVE-2026-109618 und laut JFrog nicht gegen die Varianten über OPcache und Fatal Error Backtraces.

Quellen: Vincent Schmalbach, Meow Apps, Sansec, php.net, The Hacker News, JFrog

woran du einen angriff erkennst

Hinweise auf Angriffsversuche

Ungewöhnliche Multipart-Requests, gefolgt von „Allowed memory size exhausted“-Fehlern oder wiederholten Antworten mit Statuscode 500. Auffällig große oder fehlerhafte PHPSESSID-Cookies in den Antworten, ein Hinweis auf das Memory Leak. Unerklärliche Crashes (Segfaults) oder Restarts von PHP-Prozessen. POST-Requests mit dem Feld PHP_SESSION_UPLOAD_PROGRESS vor einem File-Part. Der Feldname lässt sich ändern, und PHP parst auch malformed Requests. Eine einfache Textsuche kann Versuche übersehen. Hinter einem Proxy fallen gescheiterte Versuche meist als Fehler 502 auf. Ein erfolgreicher Exploit liefert dagegen oft schlicht HTTP 200 und lässt den Worker nicht abstürzen. Statuscodes und Abstürze sind also kein verlässlicher Beleg, ein Shell-Prozess unter dem Webserver schon eher (Datadog).

Laut Wiz finden sich im Application-Log kaum Spuren, weil alles darunter passiert. Diese Hinweise beweisen keinen Angriff, und ihr Fehlen beweist keine Sicherheit. Ein erster Blick in die Logs, meine Ergänzung, Pfade je nach System anpassen:

grep -E "Allowed memory size|SIGSEGV|exited on signal" /var/log/php*-fpm.log
grep -i "multipart" /var/log/nginx/access.log | awk '$9 ~ /^5/'

Hinweise auf einen erfolgreichen Einbruch

Prüf rückwirkend ab etwa 20. Oktober 2026, 15:00 UTC. Ab da kursierten die CVE-Nummern öffentlich.

PHP-Prozesse, die Shells oder Download-Tools wie curl und wget starten. Dafür lohnt sich ein Alert. Geänderte Dateien, zum Beispiel mit find /var/www -type f -newermt '2026-10-17 00:00 UTC'. Amazon rät, ab dem 17. Oktober zu suchen. Caches und Logs erzeugen dabei viele False Positives. Neue oder geänderte .user.ini-Dateien, auto_prepend_file-Einträge, Cronjobs und systemd-Services. Neue SSH-Keys, neue Admin- oder Systemkonten, Web-Shells und PHP-Dateien in Upload-Ordnern. Unerwartete ausgehende Verbindungen des PHP-Benutzers.

Findest du etwas: Server isolieren, Logs sichern, neu aufsetzen statt flicken und alle Secrets rotieren, die der PHP-Benutzer lesen konnte, also Datenbank-Passwörter, API-Keys und App-Keys. Wegen des Memory Leaks kann das nach meiner Einschätzung auch ohne Code Execution sinnvoll sein, wenn Angriffsversuche sichtbar waren. Zum Prüfen gibt es Community-Tools wie php2shell-guard und php2shell-triage. Lies den Code, bevor du sie einsetzt.

Quellen: Wiz, php2shell.com, Upwind, Vincent Schmalbach, SOCRadar, PHP Foundation, Datadog, Amazon Threat Intelligence

die rolle der ki

PHP2Shell ist einer der ersten Fälle, in denen KI-Modelle entscheidend geholfen haben, eine seit Jahrzehnten bekannte, aber als zu aufwendig geltende Bug-Klasse in einen funktionierenden Exploit zu verwandeln. Laut Wiz lag der nötige Aufwand früher nahe an der Grenze dessen, was Menschen praktisch leisten können.

Wiz nutzte nach eigenen Angaben Wiz Atlas, Gemini 4 Argon und GPT-5.6 Sol. Ein einzelner Forscher habe in etwa einer Woche geschafft, wofür früher ein Team Monate gebraucht hätte. Google hebt hervor, dass Gemini 4 Argon bei Fund, Exploit-Entwicklung, Detection und Validierung des Patches beteiligt war. Calif fand die Lücken in OpenAIs Programm „Patch the Planet“. Entscheidend sei gewesen, die Vorgeschichte des Ziels zu kennen und die KI gezielt auf alten Code anzusetzen. Von selbst fänden aktuelle Modelle solche Ansätze nicht zuverlässig.

Meine Einschätzung: Die Zeit zwischen „theoretisch problematisch“ und „ausnutzbar“ schrumpft. Regelmäßige Updates werden damit noch wichtiger.

Quellen: Help Net Security, Wiz, Google Cloud, Calif, The Hacker News

auswirkungen weltweit

Viele Organisationen haben Dienste vorsorglich abgeschaltet, nicht wegen bestätigter Einbrüche.

Niederlande: MijnOverheid, DigiD, die Website der Zweiten Kammer, das nationale Cybersicherheitszentrum und mehrere Bildungssysteme, außerdem die Polizeigewerkschaft ACP, der Apothekerverband KNMP, der Verkehrsbetrieb EBS und die Küstenwache. Belgien: unter anderem die Schulplattform Smartschool, Websites von Roularta und DPG Media, das Krankenhaus AZ Monica, Websites der flämischen Regierung, das flämische Parlament und das Außenministerium. Deutschland: die Charité, die Städte Mainz und Dresden, die Ruhr-Universität Bochum, Teile von berlin.de und Landesportale unter anderem in Baden-Württemberg, Bayern, Hessen, Thüringen und Niedersachsen. Frankreich und Finnland: Regierungsportale gingen vorsorglich vom Netz. BambooHR schaltete seinen Dienst in den USA, Kanada und Irland ab, mit Folgen für Gehaltsabrechnungen. Die Wikimedia Foundation nahm viele unterstützende Dienste offline, darunter Toolforge und Cloud VPS. Japan: Notfallwartung unter anderem bei Kodomon, beim Spiel Shadowverse: Worlds Beyond und bei Sakura Rental Server. 4chan, Something Awful und der Lesezeichendienst Pinboard gingen offline. Censys zählte knapp 55 Millionen Websites mit PHP (NBC News).

Der Sicherheitsforscher Hal Pomeranz warnt vor dem langen Nachlauf: „So many embedded installations out there that will never be patched.“

Quellen: The Hacker News, Brussels Times, Global Banking & Finance Review, Wikimedia, ITmedia, Help Net Security, NBC News, heise, it-daily, Tagesspiegel (dpa)

häufige fragen

Bin ich betroffen, wenn ich WordPress nutze?

Ja, solange das PHP auf deinem Server nicht aktualisiert ist. Die Lücke hängt nicht von der Anwendung ab, das gilt genauso für Shopware, Joomla oder TYPO3.

Reicht es, WordPress zu aktualisieren?

Nein. Dein Hoster oder Server-Admin muss PHP aktualisieren und die PHP-Prozesse neu starten.

Braucht ein Angreifer Zugangsdaten?

Nein. Die vorgeführten Angriffe funktionieren ohne Login.

Meine PHP-Version zeigt eine alte Nummer. Bin ich verwundbar?

Nicht zwingend. Linux-Distributionen backporten Fixes oft, ohne die Nummer zu ändern. Frag deinen Hoster oder prüf den Changelog des Pakets.

Der Plesk-Updater zeigt nichts an. Bin ich sicher?

Nicht unbedingt. Prüf die Version auf der Konsole und führ gegebenenfalls diese Befehle aus, wie oben im Plesk-Abschnitt beschrieben:

plesk installer update
apt update
apt upgrade

Schützt mich Cloudflare?

Es senkt das Risiko, ersetzt aber kein Update. Angreifer passen ihre Requests bereits an, und ist dein Server direkt über seine IP erreichbar, läuft der Angriff an Cloudflare vorbei.

Ich nutze noch PHP 7.4 oder 8.1. Was nun?

Frag deinen Hoster nach gepatchten Paketen. Es gibt sie unter anderem von Sury, Plesk, cPanel, AlmaLinux und Ubuntu (teils nur mit Ubuntu Pro), siehe den Abschnitt zu Hostern und Anbietern. Für diese Zweige gibt es nur den Minimal-Patch, der Session Upload Progress abschaltet. Plan deshalb den Umstieg auf PHP 8.3 oder 8.4. PHP 8.2 bekommt nur noch bis Ende 2026 Security-Updates.

Quellen: php2shell.com, Meow Apps, The Hacker News, Cloudflare, Plesk-Forum, SOCRadar

fazit

PHP2Shell gehört zu den schwersten Lücken, die PHP je hatte: aus der Ferne, ohne Login, vor jedem Website-Code und in der Default-Konfiguration ausnutzbar. Der Patch ist da, er wirkt aber nur, wenn sie auf jedem PHP-Server eingespielt wird und alle PHP-Prozesse neu starten. Auf Plesk-Servern solltest du dich dabei nicht auf den Updater verlassen, sondern auf der Konsole nachprüfen.

Du bist unsicher, ob deine Website betroffen ist? Einen ersten Eindruck gibt der kostenlose Website-Check. Gern prüfe ich PHP-Version, Hosting und Spuren eines Angriffs für dich und kümmere mich mit deinem Hoster um das Update, schreib mir einfach. Mehr zu Pflege und Betrieb findest du unter Websites und Shops.

alle quellen

Alle Quellen abgerufen am 21. und 22. Oktober 2026.

nächster schritt

Erzähl mir, was du vorhast.

Erstgespräch, 30 Minuten, kostenlos. Danach weißt du, was dein Vorhaben kostet und wie lange es dauert.

Erstgespräch anfragen