Am 21. Oktober 2026 hat das PHP-Projekt eine PHP Sicherheitslücke mit der höchsten Dringlichkeitsstufe geschlossen. Die beiden Fehler, zusammen PHP2Shell genannt, erlauben es einem Angreifer, ohne Login Code auf einem Webserver auszuführen. Betroffen sind nicht nur einzelne Plugins oder Frameworks, sondern die PHP-Laufzeit selbst, auf der WordPress, Laravel, Shops und unzählige Individualprojekte laufen.
In diesem Artikel erklären wir, was genau passiert ist, welche Folgeprobleme sich daraus ergeben und wie du deine Server absicherst. Alle Angaben stammen aus den Originalquellen, die wir am Ende verlinkt haben. Wo Quellen sich widersprechen oder etwas noch unklar ist, schreiben wir das ausdrücklich dazu.
Was ist passiert? Die PHP Sicherheitslücke PHP2Shell im Überblick
Das PHP-Team hat am 21. Oktober 2026 die Versionen 8.5.12, 8.4.27, 8.3.36 und 8.2.35 veröffentlicht. Sie schließen zwei kritische Schwachstellen, die unauthentifizierte Remote Code Execution (RCE) ermöglichen. Vorab hatte das Team am 20. Oktober angekündigt, dass ein Sicherheitsupdate mit zwei Lücken mit je CVSS v4.0 9.2 (kritisch) folgt.
- CVE-2026-109618: Speicherkorruption bei Out-of-Memory-Fehlern (RCE via OOM corruption)
- CVE-2026-109619: Verwendung von veralteten globalen Zuständen nach Freigabe des Speichers (RCE via stale global state)
Laut PHP-Projekt sind alle PHP-Installationen gefährdet, die Webanfragen beantworten. Dazu gehören PHP-FPM, Apache mit mod_php, php-cgi, FrankenPHP und LiteSpeed. Das Projekt sieht das höchste Risiko bei mod_php, weil ein Angriff dort greifen kann, bevor überhaupt Anwendungscode läuft.
CVE-2026-109618: Speicherfehler bei zu wenig Arbeitsspeicher
Wenn PHP während der Verarbeitung einer Anfrage keinen Speicher mehr bekommt, bricht es die Verarbeitung ab. Dabei können interne Daten der Anfrage nur teilweise initialisiert sein. Die Bereinigung nach der Anfrage behandelt diese ungültigen Daten dann als gültig.
Die Unit-42-Analyse von Palo Alto Networks beschreibt den Mechanismus so: Die Fehlerbehandlung über longjmp() lässt den Speicher der Anfrage unvollständig initialisiert, wodurch Angreifer RCE über gezielt ausgelöste Speicherknappheit erreichen können. Die Anfragen dafür können nach Angaben des PHP-Projekts mehrteilige Formulare oder Datei-Uploads sein. Sie können den Speicher erschöpfen, auch wenn ihre Größe unter den konfigurierten Limits liegt.
CVE-2026-109619: Veralteter Zustand zwischen zwei Anfragen
PHP kann denselben Prozess nacheinander für mehrere Anfragen nutzen. Bricht eine Anfrage mit einem fatalen Fehler oder einem Timeout ab, wird der interne Zustand unter Umständen nicht vollständig aufgeräumt. Eine spätere Anfrage, die derselbe Worker bearbeitet, kann dann auf Speicher zugreifen, der bereits freigegeben wurde.
Das PHP-Projekt bestätigt Angriffspfade über Session-Upload-Fortschritt und über die Fehler-Backtraces von PHP 8.5. Ein Teil der Pfade betrifft mod_php, ein anderer PHP-FPM. Der Upload-Fortschritt ist standardmäßig aktiv und kann als früher Verbraucher des veralteten Zustands wirken.
Warum die PHP Sicherheitslücke eine Kettenreaktion auslöst
Eine kritische Lücke im Kern einer Sprache ist selten ein Einzelfall. Bei PHP2Shell entstehen mehrere Folgeprobleme gleichzeitig. Jedes davon erhöht das Risiko, wenn man nicht rechtzeitig handelt.
Öffentliche Proofs of Concept und Exploit-Versuche
Die Lage ist widersprüchlich, und genau das macht sie gefährlich. Rapid7 schreibt am 22. Oktober, dass mehrere öffentliche Proof-of-Concept-Exploits existieren. Jeder funktioniere aber nur für eine bestimmte Kombination aus Betriebssystem, PHP-Version und Webserver. Rapid7 hat bisher keine Ausnutzung in freier Wildbahn beobachtet, aber mehrere Berichte über Angriffsversuche. Das Unternehmen warnt, dass sich die Technik schnell verbessern kann.
Die neuseeländische Cyberbehörde NCSC meldet dagegen, dass ihr Berichte über aktive Ausnutzung vorliegen. Die Aussage ist also nicht eindeutig geklärt. Für dich ändert das nichts an der Handlung: Der Schluss, den alle Quellen teilen, lautet, dass man ohne Verzögerung patchen muss.
Unterschiedliche Patch-Stände bei Distributionen
Linux-Distributionen und LTS-Anbieter haben die Fixes teilweise vorab eingespielt, teilweise mit eigenen Paketversionen. Das bedeutet: Die Versionsnummer allein sagt nicht immer, ob ein System geschützt ist. Ein Debian- oder Ubuntu-Paket mit älterer Versionsnummer kann den Fix enthalten, ein selbst kompiliertes PHP 8.2.34 dagegen nicht.
Das PHP-Projekt weist außerdem darauf hin, dass das Repository rpms.remirepo.net am Tag der Veröffentlichung keine Updates hatte. Wer dieses Repository nutzt, sollte auf Distributionspakete wechseln oder selbst kompilieren, um Updates sofort einspielen zu können.
Für Red Hat Enterprise Linux 6 und 7 zeigt sich ein weiteres Problem: Laut einer Mitteilung auf oss-sec vom 22. Oktober listet Red Hat die PHP-Pakete noch als „under investigation“. Dort wurde ein inoffizieller Backport für PHP 5.4 und 5.3 veröffentlicht. Er ist nicht vom Hersteller bestätigt und sollte nicht ungeprüft in Produktion gehen.
Veraltete PHP-Zweige ohne Zukunft
PHP 8.1 und ältere Versionen erhalten vom PHP-Projekt keine regulären Updates mehr. Das PHP-Team hat für 7.4, 8.0 und 8.1 nur minimale Backports bereitgestellt, vor allem für Nutzer, die selbst kompilieren. PHP 8.2 erreicht laut PHP-Projekt am 31. Dezember 2026 das Lebensende und erhält danach keine Sicherheitsfixes mehr.
Amazon Web Services stuft die Lage in seiner Sicherheitsmeldung entsprechend ein: Für End-of-Life-Laufzeiten 5.4 bis 8.1 gebe es keinen geplanten Fix. Dort ist eine Migration auf einen unterstützten Zweig nötig.
Die große Angriffsfläche im Internet
Palo Alto Networks meldet, dass Cortex Xpanse über 22,6 Millionen exponierte Instanzen identifiziert hat, die potenziell für CVE-2026-109618 oder CVE-2026-109619 anfällig sind. Diese Zahl ist eine Telemetrie-Schätzung, zeigt aber die Dimension: PHP ist auf einem großen Teil des Webs im Einsatz.
Warum WAF und Sicherheits-Plugins nicht reichen
Die Lücken liegen im Interpreter, also vor dem Anwendungscode. Ein WordPress-Sicherheitsplugin oder eine Firewall auf Anwendungsebene startet erst, nachdem die verwundbare Stelle schon gelaufen ist. Das bestätigen auch mehrere Sicherheitsanbieter. Ein aktualisiertes CMS oder Framework schließt die Lücke daher nicht, nur ein aktualisiertes PHP tut es.
Die Vorgeschichte: weitere PHP-Lücken 2026
PHP2Shell ist nicht die einzige Sicherheitsmeldung des Jahres. Wer heute einen Server prüft, sollte auch die älteren Lücken im Blick haben, weil sie dieselben Versionszweige betreffen.
- CVE-2026-6735 (10. Mai 2026): XSS über die Seite des PHP-FPM-Status. Betroffen sind PHP 8.2 vor 8.2.31, 8.3 vor 8.3.31, 8.4 vor 8.4.21 und 8.5 vor 8.5.6. Die Seite ist nicht für das öffentliche Internet gedacht.
- CVE-2026-7261 (10. Mai 2026): Use-after-free im SoapServer bei Session-Persistenz nach einem SOAP-Fehler. Gefahr: Speicherkorruption, Informationspreisgabe oder Absturz.
- CVE-2026-14355 (Juli 2026): Pufferüberlauf im AES-WRAP-PAD der OpenSSL-Erweiterung. Angriffe auf Anwendungen, die diesen Algorithmus nutzen, können Heap-Metadaten beschädigen.
- CVE-2026-17543 (30. Juli 2026): SQL-Injection in ext-pgsql durch falsches Escaping von Backslashes. Der CVE-Eintrag bewertet sie mit CVSS 4.0 8.1 (hoch). Betroffen sind 8.2 vor 8.2.33, 8.3 vor 8.3.33, 8.4 vor 8.4.24 und 8.5 vor 8.5.9.
- CVE-2026-17544 (30. Juli 2026): Out-of-bounds-Schreibzugriff in
bccomp()durch manipulierte Eingaben. Betroffen sind 8.4 vor 8.4.24 und 8.5 vor 8.5.9.
Das Muster ist klar: PHP-Lücken treten 2026 in mehreren Wellen auf. Wer nur einmal im Jahr aktualisiert, ist fast immer verwundbar.
Folgen im Ökosystem: Frameworks und Bibliotheken
Neben dem Interpreter gibt es Lücken in Bibliotheken, die PHP-Anwendungen direkt betreffen. Ein Beispiel aus Januar 2026 zeigt, wie Deserialisierung Angreifern RCE ermöglicht: In Laravel Reverb bis Version 1.6.3 übergibt die Skalierung über Redis Daten ohne Einschränkung an unserialize(). Die NVD bewertet das mit 9.8 (kritisch). Als Workaround empfiehlt die Meldung ein starkes Redis-Passwort, einen rein privaten Zugriff oder die Option REVERB_SCALING_ENABLED=false, wenn nur ein Reverb-Knoten läuft.
Die Lehre daraus ist einfach: Dein Code kann sicher sein, und trotzdem kann eine Abhängigkeit oder der Interpreter eine Tür öffnen. Deshalb gehören PHP-Version, Abhängigkeiten und Serverkonfiguration zusammen geprüft.
Für Agenturen und Teams, die viele Kundenprojekte betreuen, bedeutet das eine einfache Regel: Jede Website braucht eine dokumentierte PHP-Version, einen Verantwortlichen für Updates und einen Überblick über alle Abhängigkeiten. Eine Liste aller Server mit Version und Hoster ist in einer Notlage Gold wert, weil sie den Zeitraum bis zum Patch deutlich verkürzt. Genau diese Übersicht fehlt in vielen kleinen Teams, und sie lässt sich mit wenigen Minuten pro Woche pflegen.
So erhöhst du die Sicherheit: Schritt für Schritt
Die folgenden Schritte richten sich nach den Empfehlungen des PHP-Projekts, von Rapid7 und dem SOC-Hinweis von Prime Infoserv. Sie sind in der Reihenfolge gedacht, in der man sie abarbeitet.
Schritt 1: Version und Herkunft des PHP-Pakets prüfen
Führe auf dem Server php -v aus. Vergleiche die Version mit der folgenden Tabelle. Prüfe außerdem, ob dein Paket vom Distributionsanbieter stammt, denn dann zählt die Paketversion mit Backport-Hinweis.
| PHP-Zweig | Mindestversion mit Fix | Status |
|---|---|---|
| 8.5 | 8.5.12 | Gefixt am 21. Oktober 2026 |
| 8.4 | 8.4.27 | Gefixt am 21. Oktober 2026 |
| 8.3 | 8.3.36 | Gefixt am 21. Oktober 2026 |
| 8.2 | 8.2.35 | Gefixt, Lebensende 31. Dezember 2026 |
| 8.1 und älter | Keine reguläre Version | Vendor-Fix oder Migration nötig |
Schritt 2: Patchen und alle Worker neu starten
Ein Update ist erst wirksam, wenn die laufenden Prozesse neu gestartet wurden. Das gilt für PHP-FPM, Apache und andere Laufzeiten. Laufende Worker behalten die alte Binärdatei, bis sie neu starten. Ein Fix-Paket allein schützt also noch nicht. Ein Beispiel aus der GitHub-Diskussion zum Backport für PHP 7.4 beschreibt genau dieses Problem: Die laufenden Worker nutzen weiterhin das alte Binary, bis PHP-FPM neu geladen oder neu gestartet wird.
Starte deshalb den PHP-Dienst gezielt neu (zum Beispiel systemctl restart php8.3-fpm, der Dienstname hängt von deiner Distribution ab) und prüfe danach mit php -v und dem Dienststatus, ob alles läuft. Wenn du mehrere PHP-Versionen parallel betreibst, starte jede Version einzeln neu.
Schritt 3: Übergangsmaßnahmen, wenn sofortiges Patchen nicht geht
Wenn du nicht sofort aktualisieren kannst, reduziert das die Angriffsfläche. Ersetzt wird der Patch dadurch nicht. Das PHP-Projekt empfiehlt diese Maßnahmen:
- Speicherlimit aufheben:
memory_limit=-1möglichst überphp_admin_valueim FPM-Pool oder in der Apache-Konfiguration setzen, damit Anwendungen es nicht zurücksetzen. Danach alle Worker neu starten. - Upload-Größe begrenzen: Ohne Datei-Uploads
post_max_size = 8M, mit Uploadspost_max_size = 32M.upload_max_filesizemuss kleiner sein alspost_max_size. - Upload-Fortschritt abschalten:
session.upload_progress.enabled=0in derphp.inioder im FPM-Pool, dann alle Worker neu starten. Eine Einstellung perini_set()oder.user.inikommt zu spät. - Fehler-Backtraces aus (nur PHP 8.5):
fatal_error_backtraces=0und Worker neu starten. - Eingaben am Proxy begrenzen: Maximale Anfragegröße, Anzahl der Eingabefelder, Multipart-Teile und Verschachtelungstiefe am Webserver oder Reverse Proxy festlegen, auch für Anfragen ohne Content-Length.
Achtung: Das Aufheben des Speicherlimits macht den Server gegenüber Speicherlecks empfindlicher. Setze Container- oder cgroup-Grenzen nur so, dass nur der betroffene Worker beendet wird. RLIMIT_AS oder RLIMIT_DATA dürfen laut PHP-Projekt nicht als Ersatz dienen, weil sie den verwundbaren Fehlerpfad auslösen können.
Schritt 4: Zugriff einschränken, wo es möglich ist
Interne Verwaltungsoberflächen, Admin-Bereiche und Statusseiten gehören nicht ins offene Internet. Setze sie hinter ein VPN oder eine IP-Allowlist. Eine Website, die öffentlich sein muss, lässt sich nicht so schützen, deshalb ist das Patchen dort der wichtigste Schritt.
Schritt 5: Logs prüfen, auch rückwirkend
Mehrere Quellen berichten, dass Angriffsversuche schon vor dem Patch beobachtet wurden. Ein Blogbeitrag auf DEV Community rät, Logs bis zurück zum 17. Oktober zu prüfen. Das ist ein Hinweis aus zweiter Hand. Wichtig ist die Aussage des SOC-Hinweises von Prime Infoserv: Ein fehlender Alarm beweist nicht, dass nichts passiert ist. Suche gezielt nach ungewöhnlichen Anfragen mit sehr großen Multipart-Bodys, unerwarteten Fatal Errors und plötzlichen Worker-Abstürzen.
Falls du Spuren findest, behandle den Server als kompromittiert. Setze Zugangsdaten zurück, prüfe Cron-Jobs, neue Dateien und ausgehende Verbindungen.
Schritt 6: Hosting-Anbieter und Paketquellen klären
Wenn du bei einem Hoster bist, frage schriftlich nach der Paketversion, die den Fix für CVE-2026-109618 und CVE-2026-109619 enthält. Verlass dich nicht auf eine allgemeine Aussage, dass „alles gepatcht“ ist. Bei älteren Zweigen gilt das Gleiche: Nur ein Anbieter, der beide CVEs ausdrücklich nennt, kann die Lage bestätigen.
Eine hilfreiche Nachfrage an den Hoster lautet: „Welche PHP-Version läuft auf meinem Server, enthält sie den Fix für CVE-2026-109618 und CVE-2026-109619, und wurden die PHP-Worker danach neu gestartet?“ Die dritte Frage wird oft vergessen, ist aber entscheidend. Bei geteilten Hostings musst du zudem prüfen, ob der Anbieter die Worker selbst neu startet oder ob du das über das Control Panel selbst tun musst.
Schritt 7: Dauerhafte Härtung
Die PHP2Shell-Lücken zeigen, warum du mehr tun solltest als einmal zu patchen:
- Unterstützte Versionen nutzen: Plane den Umstieg, bevor eine Version ausläuft. Der offizielle Überblick steht auf php.net unter „Supported Versions“.
- Automatische Sicherheitsupdates: Aktiviere sie für Betriebssystem und PHP-Paket, wo dein Setup das zulässt.
- Least Privilege: Der Webserver-Benutzer braucht nur Schreibrechte auf die Ordner, die er wirklich benötigt. Ein kompromittierter Worker mit wenig Rechten richtet weniger Schaden an.
- Abhängigkeiten aktuell halten: Prüfe Composer-Pakete regelmäßig auf bekannte Lücken, zum Beispiel mit
composer audit. - Gefährliche Funktionen sperren: In
disable_functionsnur sperren, was du wirklich nicht brauchst. Teste danach gründlich, denn eine zu harte Sperre bricht Anwendungen. - Fehlerausgaben im Produktivbetrieb verbergen: Detaillierte Fehlermeldungen helfen Angreifern. Protokolliere Fehler stattdessen intern.
- Geheimnisse nicht im Code speichern: API-Schlüssel und Passwörter gehören in Umgebungsvariablen oder einen Secrets-Manager.
Checkliste: PHP Sicherheitslücke in 10 Minuten prüfen
- Version prüfen:
php -vzeigt 8.5.12, 8.4.27, 8.3.36 oder 8.2.35 oder neuer. - Paketquelle prüfen: Stammt das PHP-Paket von deiner Distribution oder deinem Hoster, und ist der Fix dort bestätigt?
- Worker neu gestartet: Nach dem Update laufen keine alten PHP-Prozesse mehr.
- Upload-Fortschritt aus: Wenn du nicht sofort patchen kannst, ist die Einstellung gesetzt und wirksam.
- Erreichbarkeit: Admin-Bereiche und Statusseiten sind nicht öffentlich erreichbar.
- Logs: Auffällige Anfragen und Worker-Abstürze seit dem 17. Oktober geprüft.
- Abhängigkeiten:
composer auditist ohne kritische Treffer. - Lebensende: Du weißt, bis wann deine PHP-Version unterstützt wird.
- Backups: Ein aktuelles, getestetes Backup liegt außerhalb des Servers.
- Verantwortliche: Eine Person ist benannt, die Updates überwacht.
FAQ: PHP Sicherheitslücke PHP2Shell
Bin ich betroffen, wenn ich nur statische Seiten habe?
Das hängt davon ab, ob PHP überhaupt Webanfragen beantwortet. Wenn PHP auf dem Server läuft und Anfragen verarbeitet, ist es verwundbar, unabhängig davon, ob deine Seite Uploads anbietet.
Hilft ein Update meines CMS, zum Beispiel WordPress?
Nein. Die Lücken liegen im PHP-Interpreter. Du musst die PHP-Version aktualisieren.
Reicht die Änderung der Konfiguration statt eines Updates?
Nein. Das PHP-Projekt sagt ausdrücklich, dass Übergangsmaßnahmen keinen Schutz bieten. Ein Update ist die einzige vollständige Lösung.
Ich nutze PHP 8.1. Was nun?
PHP 8.1 erhält keine regulären Updates mehr. Nutze einen Vendor-Fix mit bestätigter Abdeckung oder migriere auf einen unterstützten Zweig.
Ist meine Website kompromittiert, wenn ich keine Auffälligkeiten sehe?
Nicht zwingend, aber das lässt sich nicht sicher ausschließen. Fehlende Alarme sind kein Beweis für Sicherheit, deshalb ist die Log-Prüfung wichtig.
Fazit
Die PHP Sicherheitslücke PHP2Shell ist eine der ernstesten Meldungen des Jahres. Sie betrifft die Laufzeit selbst, erfordert keinen Login und hat einen Kreis von Folgeproblemen erzeugt: unklare Exploit-Lage, uneinheitliche Backports, Lebensende älterer Zweige und eine große Angriffsfläche im Netz. Die Lösung ist klar, aber sie verlangt Handeln: PHP auf eine gepatchte Version bringen, Worker neu starten, Logs prüfen und Zugriffe einschränken.
Wer seine Website auf einem Baukasten oder einer Plattform betreibt, sollte beim Anbieter nachfragen, welche PHP-Version im Einsatz ist und wie schnell Sicherheitsupdates eingespielt werden. Wer eigene Server betreibt, hat die Verantwortung direkt auf dem Tisch.
Quellen
- PHP.net: Security advisory – Critical remote code execution vulnerabilities (21.10.2026)
- PHP.net: News Archive 2026
- PHP Mailing Liste: Upcoming Critical PHP Security Release (20.10.2026)
- CVE-2026-17543 (CVE.org) und CVE-2026-17544 (CVE.org)
- CVE-2026-7261 (CVE.org)
- CVE-2026-14355 (NIST NVD) und CVE-2026-6735 (NIST NVD)
- Rapid7: CVE-2026-109618 und CVE-2026-109619 – Critical Unauthenticated RCE in PHP
- Palo Alto Networks Unit 42: Threat Brief zu CVE-2026-109618 und CVE-2026-109619
- NCSC Neuseeland: Alert zu CVE-2026-109618 und CVE-2026-109619
- AWS Security Bulletin 2026-143-AWS
- php-src Issue #24527: Backport für PHP 7.4
- oss-sec: Inoffizieller Backport für PHP 5.4 und 5.3
- PHP: Supported Versions
Weiterlesen: KI-Website Kosten 2026 · Website mit KI erstellen · KI Agenten erstellen