Auf einem Ubuntu-24.04-Server zeigt php -v vor und nach dem Fix dieselbe Version. Das übliche Schnellprüfen sagt Ihnen deshalb nichts. Unser kostenloser Check liest dort nach, wo die Antwort steht.
Online-Check
Eine einzige normale Seitenanfrage, ausgewertet werden nur die Antwortkopfzeilen — dasselbe, was jeder Browserbesuch überträgt. Kein Angriff, keine Anmeldung, keine Veränderung an Ihrem Server.
Die Lage
php2shell ist der Sammelname für die beiden PHP-Lücken CVE-2026-109618 und CVE-2026-109619, veröffentlicht am 21. Oktober 2026; beide erlauben Codeausführung aus der Ferne ohne Anmeldung, betroffen ist jede öffentlich erreichbare PHP-Installation.
Gepatcht sind die Upstream-Versionen 8.5.12, 8.4.27, 8.3.36 und 8.2.35; für PHP 7.4 bis 8.1 gibt es keine Releases, sondern nur Quell-Backports, die die Distributionen einbauen.
php -v beweist dabei nichts, weil Debian, Ubuntu und die RHEL-Derivate den Fix zurückportieren und die Versionsnummer stehen lassen — entscheidend ist die Paketversion, bei Containern das Image.
Am Abend des 20. Oktober wurden erste Details öffentlich, am 21. Oktober veröffentlichte das PHP-Team die Patches. Seitdem gilt: Wer PHP öffentlich erreichbar betreibt, muss heute nachsehen, nicht nächste Woche.
CVE-2026-109618 trifft die Speicherverwaltung. Erreicht PHP das memory_limit, bricht es den Request per longjmp() ab und lässt Speicherstrukturen halb initialisiert zurück. Beim Aufräumen liest PHP diese Reste, es kommt zu Speicherkorruption. Ein präparierter Multipart-Upload oder tief verschachtelte Felder genügen als Auslöser.
CVE-2026-109619 sitzt in der Fehlerbehandlung. Hier braucht der Angreifer mindestens zwei Requests: Der erste bringt die Fehlerbehandlung aus dem Tritt, der zweite nutzt das aus. Nicht jeder Fatal Error ist dafür geeignet.
Der Haken für Angreifer: Es kann Tausende bis Zehntausende Requests dauern. Für Automaten ist das kein Hindernis. In einer Demo von Calif lief ein Systembefehl auf einem Laravel-Server nach 38 Sekunden.
Versucht wird es laufend. Amazon hat am 17. Oktober einen Ausnutzungsversuch in seinem MadPot-Honeypot gesehen, vier Tage vor der Veröffentlichung, und meldet seitdem breit gestreute Versuche. watchTowr hat beide Lücken nachgebaut und sieht ebenfalls Versuche, Cloudflare meldet Angriffe auf seine Kunden. Wer Logs hat, sieht ab dem 17. Oktober nach, nicht erst ab dem 21.
Was bis heute, dem 25. Oktober, niemand belegt: einen durchgedrungenen Angriff. Keine Webshell, kein bestätigter Einbruch, kein Datenabfluss. Sansec schreibt, die öffentlich kursierenden Exploits funktionierten gegen eine Standardinstallation nicht, Dataminr meldet keine bekannten Kompromittierungen. Im KEV-Katalog der CISA (Fassung 2026.10.23, 1.756 Einträge) stehen beide CVEs nicht. Das ist kein Grund zu warten — es ist der Grund, warum Sie jetzt noch in Ruhe patchen können statt im Vorfall.
Betroffen sind Apache mod_php, PHP-FPM, LSAPI und FrankenPHP - aber nicht gleich stark, und das entscheidet, womit Sie anfangen. Bei der ersten Lücke ist der vollständige Exploit gegen mod_php belegt; PHP-FPM beendet den Worker, wenn der Request-Start scheitert, und entgeht dieser Kette. Bei der zweiten Lücke hilft das nicht: Über den Session-Pfad ist die Codeausführung laut Advisory gegen mod_php und gegen FPM validiert. FrankenPHP gilt nach Quellenanalyse als wahrscheinlich betroffen, bei LSAPI steht die Prüfung aus. Wer FPM fährt, hat also etwas Luft bei der einen Lücke und keine bei der anderen. Red Hat schreibt dazu, Codeausführung über FPM sei in der Praxis schwierig, weil der Worker beim fehlgeschlagenen Start abbricht, und stuft mod_php mit Standardkonfiguration als höheres Risiko ein.
Ablauf
Die beiden Lücken lagen seit dem 1. August bei PHP auf dem Tisch. Geplant war ein Notfall-Release für Donnerstag, den 22. Oktober. Dann sind die Details vorher geleakt, der Patch kam einen Tag früher — und die ersten Ausnutzungsversuche lagen schon vier Tage davor. Alles hier ist datiert und belegt; Uhrzeiten in UTC.
1. August
Ryan Austin von Calif findet mehrere Wege, über PHP fremden Code auszuführen — ohne Anmeldung, allein über ganz normale Anfragen an den Webserver.
Quelle: Sansec
11. August
Calif meldet die erste Lücke, die koordinierte Offenlegung beginnt. Sophos bestätigt diesen Tag als Eingang der ersten Meldung.
Quelle: Sansec, Sophos
24. August
Wiz Research meldet unabhängig: Sagi Tzadik, Shir Tamari, Nir Ohfeld, Tomer Schwartz. Zwei Teams auf denselben Fehlern heißt, dass sie auffindbar waren.
Quelle: Sansec
Anfang Okt.
Cloudflare entwickelt WAF-Regeln, während die Lücken noch geheim sind.
Quelle: Cloudflare
17. Oktober
Amazon sieht in seinem MadPot-Honeypot einen Ausnutzungsversuch — vier Tage vor dem Patch. Öffentlich ist zu diesem Zeitpunkt nichts bekannt.
Quelle: Amazon
20. Oktober
Details tauchen öffentlich auf, ein Beitrag bei Hacker News wird gelöscht, Screenshots laufen weiter. watchTowr baut die Codeausführung nach. PHP zieht das Release um einen Tag vor, von Donnerstag auf Mittwoch. Wer geleakt hat, ist bis heute unbekannt.
Quelle: Sansec, watchTowr, TuxCare
03:02UTC
Die Managed-Regeln greifen automatisch, im kostenlosen Tarif wie in den bezahlten — 10 Stunden und 58 Minuten vor dem Patch. Eine Lücke bleibt: Wer session.upload_progress.name umbenannt hat, fällt nicht darunter.
Quelle: Cloudflare
05:21UTC
Kunden mit Frontier Virtual Patching bekommen Threat ID 543004 — zwei Stunden und 19 Minuten nach Cloudflare, immer noch vor der Veröffentlichung.
Quelle: Palo Alto
07:43UTC
Cloudflare sieht Angriffsverkehr gegen eigene Kunden, über sechs Stunden vor dem Patch. Die Angreifer verändern die Nutzlast, um die Regeln zu umgehen.
Quelle: Sansec, Cloudflare
14:00UTC
PHP veröffentlicht 8.5.12, 8.4.27, 8.3.36 und 8.2.35 und legt die Lücken offen. Für 8.1 und älter gibt es kein Upstream-Release — dort hängt alles an den Backports der Distributionen.
Quelle: php.net
abends
Debian liefert DLA-4848-1, AlmaLinux patcht um 21:15 alle Streams auf 8, 9 und 10 — auch 7.2, 7.3 und 8.0, deren Versionsnummern dabei stehen bleiben. Genau deshalb taugt eine Versionsnummer nicht als Nachweis.
Quelle: Debian, AlmaLinux
22. Oktober
Sansec stellt fest: Die öffentlich kursierenden Exploits laufen gegen eine Standardinstallation nicht. Versucht wird es weiter, nur nicht in der erwarteten Breite.
Quelle: Sansec
23. Oktober
php.net empfiehlt, session.upload_progress.enabled=0 zu setzen und stehen zu lassen — auch auf gepatchten Systemen. Dahinter steckt CVE-2026-115560, der Fix kommt erst mit dem nächsten regulären Release.
Quelle: php.net, The Register
25. Oktoberheute
Niemand hat bisher einen durchgedrungenen Angriff belegt: keine Webshell, kein bestätigter Einbruch, kein Datenabfluss. Im KEV-Katalog der CISA (Fassung 2026.10.23) stehen beide CVEs nicht. Wenn Ihre Logs weiter zurückreichen als der 21. Oktober, fangen Sie beim 17. an.
Quelle: CISA, Sansec, php.net
Mit Beleg: Cloudflare hat als Erster einen Zeitstempel veröffentlicht — 03:02 UTC, knapp elf Stunden vor dem Patch, und das auch für kostenlose Zonen. Palo Alto folgte um 05:21 UTC mit einer Signatur für seine Firewalls. Cloudflare selbst spricht von „etwa neun Stunden“; die Differenz kommt daher, dass sie bis zur Advisory auf GitHub rechnen, nicht bis zum Release um 14:00.
Dass sie überhaupt die Ersten waren, lässt sich daraus nicht folgern. Imperva hatte die Details vorab unter Embargo und konnte seinen Schutz vor der Veröffentlichung prüfen, nennt aber keine Uhrzeit. AWS und Akamai haben virtuelle Patches ausgeliefert, ohne einen Zeitpunkt zu nennen. Belegbar ist nur: Cloudflares Schutz stand vor den Angriffen, die Cloudflare dann selbst gemeldet hat.
Die Versionsfalle
php -v hier nichts beweistUbuntu 24.04 meldet PHP 8.3.6. Vor dem Fix und nach dem Fix. Canonical portiert Sicherheitspatches zurück und lässt die Versionsnummer stehen. Gepatcht ist erst das Paket 8.3.6-0ubuntu0.24.04.13, und das weiß nur die Paketdatenbank.
Dasselbe Problem von der anderen Seite: Ihr WordPress-Container bringt sein eigenes PHP mit, das apt nie zu sehen bekommt. Er kann veraltet sein, während der Host sauber aussieht. Die offiziellen Images sind nachgezogen: php:8.3.36-* seit dem 21.10. abends, wordpress:latest erst seit dem Morgen des 22.10. Wer nicht neu zieht, fährt weiter 8.3.35, bei wordpress:latest als mod_php.
| Release | Fix-Paket (Stand 25.10.2026) |
|---|---|
| Ubuntu 22.04 (php8.1) | 8.1.2-1ubuntu2.28 |
| Ubuntu 24.04 (php8.3) | 8.3.6-0ubuntu0.24.04.13 |
| Ubuntu 26.04 (php8.5) | 8.5.4-0ubuntu1.5 |
| Ubuntu 26.10 (php8.5) | 8.5.9-0ubuntu2.1 |
| Debian 13 (php8.4) | 8.4.27-1~deb13u1 (DSA-6574-1) |
| Debian 12 (php8.2) | 8.2.35-1~deb12u1 (DLA-4848-1, aus bookworm-security) |
| Debian sid | 8.4.27-1 |
| Debian forky | 8.4.27-1 (aus sid übernommen) |
| AlmaLinux 8 / 9 / 10 | alle Streams gepatcht, z. B. php-8.3.33-1.el10_2.alma.1 |
| RHEL 8 / 9 / 10 | ausgeliefert, RHSA-2026:87070 ff. (21.10.); offen nur der Stream php:8.4 auf RHEL 9 |
| Rocky 8 / 9 / 10 | ausgeliefert, RLSA mit denselben Nummern (22.10.) |
| Upstream 7.4, 8.0, 8.1 | keine Releases, nur Quell-Backports des Security-Teams |
| Upstream 8.2 / 8.3 / 8.4 / 8.5 | 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 |
Für PHP 7.4 und älter liefert Ubuntu nur über ESM, etwa 7.4.3-4ubuntu2.29+esm5 für 20.04. AlmaLinux hat am 21.10. um 21:15 UTC alle Streams auf 8, 9 und 10 gepatcht und schreibt denselben Satz wie wir: nicht auf php -v verlassen, die Nummer bleibt stehen. Rocky ist am 22.10. nachgezogen. Distributionen veröffentlichen ihre Fixes über Tage. Maßgeblich sind die Advisories von Debian, Ubuntu, AlmaLinux und Red Hat.
Der Check
Wir haben den Check in einer Datei plain bash gebaut, weil Sie ihn vor dem Start als root lesen sollen. Er prüft den Host, jeden Docker- und Podman-Container und auf Wunsch Ihre Websites. Geschrieben wird nichts, verschickt wird kein Exploit-Traffic.
$ sudo ./php2shell-check.sh https://www.example.de php2shell-check 3.0.1 CVE-2026-109618 / CVE-2026-109619, data as of 2026-10-22 web01.example.de (Ubuntu 24.04.3 LTS) PHP installations on this host [ OK ] php-binary /usr/sbin/php-fpm8.3 package php8.3-fpm 8.3.6-0ubuntu0.24.04.13 (distribution fix from 8.3.6-0ubuntu0.24.04.13) PHP in docker containers [VULN] container shop-wordpress-1 (wordpress:latest) PHP 8.3.35, fixed in 8.3.36 -> Update PHP to 8.3.36 or later (container: pull the new image and recreate) [WARN] sapi shop-wordpress-1 served by mod_php: the advisory demonstrates a complete unauthenticated exploit against exactly this setup -> Treat a vulnerable PHP behind mod_php as the most urgent case Website https://www.example.de [ ?? ] php-level https://www.example.de no PHP version and no PHP signal in the headers; this says nothing about the patch level [ OK ] waf https://www.example.de proxied through Cloudflare (header and DNS) Summary 1 vulnerable, 1 undecided, 2 warnings, 3 ok VULNERABLE at least one PHP runtime needs an update now.
Alle PHP-Binaries in /usr, Plesk, cPanel EasyApache, CloudLinux, Remi und LiteSpeed. Debian und Ubuntu werden nach der Paketversion beurteilt, selbst gebautes PHP nach der Upstream-Nummer. RHEL, AlmaLinux und Rocky seit Version 2.0 ebenfalls: dort friert die Nummer ein, deshalb zählt zusätzlich das RPM-Changelog mit der CVE-ID.
PHP in Docker und Podman, ob eine Laufzeit per mod_php oder FPM ausgeliefert wird, FPM-Pools mit pm.max_requests oder user = root, Dienste, die nach dem Update noch mit der alten Binary laufen, und Hinweise in den Logs.
Pro URL: sichtbare PHP-Version, WAF oder CDN (Cloudflare, Sucuri, Imperva, CloudFront, Akamai, Fastly u. a.) und mit --origin ob der Server an der WAF vorbei erreichbar ist. Höchstens zehn URLs pro Lauf.
Einzeiler: lädt aktuellste Version herunter und startet den Check. Wer zuerst lesen will, findet im Repository die Schritt-für-Schritt-Variante.
sudo bash -c "$(curl -fsSL https://github.com/EXT-IT/php2shell-check/releases/latest/download/php2shell-check.sh)" - https://your-site.example
Für das Monitoring: 0 nichts Verwundbares, 1 verwundbar, 2 nicht entscheidbar, 3 Aufruffehler, mit --json maschinenlesbar.
Was der Check nicht kann
PHP in einer chroot, einer FreeBSD-Jail, einer VM auf demselben Host oder in einer Appliance sieht das Skript nicht. heise nennt pfSense, OPNsense, Synology, QNAP, Citrix, Ivanti und F5 BIG-IP als Produkte mit eingebettetem PHP. Dort läuft kein Skript von uns. Fragen Sie die Hersteller. Palo Alto hat sein Advisory am 25.10. überarbeitet: PAN-OS und Panorama sind betroffen, die WildFire-Appliance WF-500 ausdrücklich nicht. Drei Hotfixes sind draußen (10.2.18-h13, 11.1.16-h4, 11.2.10-h16), die übrigen sind für den 27. bis 30.10. angekündigt.
Version 1.4.0 hielt Debian 12 noch für ungepatcht. Seit DLA-4848-1 vom 21.10. stimmt das nicht mehr, und ein Lauf mit dem alten Stand meldet einen längst gepatchten Server als verwundbar. Dasselbe gilt jetzt für RHEL und Rocky. Nehmen Sie immer das aktuelle Release, die Daten stecken im Skript.
Ob die Notfall-Regeln in Ihrer Cloudflare-Zone aktiv sind, kann das Skript nicht erkennen. Cloudflares CTO nennt sie eine Übergangslösung. Sie ersetzen kein Update.
Und noch etwas, das nicht im Skript steht: Die Notbremse „Dienst abschalten" ist die sicherste, aber sie kostet Sie den Shop oder das Intranet, solange sie gezogen ist. Das ist der Preis dafür, dass die Workarounds nur eine Krücke sind.
Was jetzt zu tun ist
Ihr braucht nicht alles zu lesen: Wer nur eine WordPress-Seite bei einem Hoster hat, springt direkt zu Schritt 3.
mod_php ausgeliefert wird - dort ist der vollständige Exploit belegt, und wordpress:latest gehört dazu. PHP-FPM, lsphp oder Apache laufen nach dem Paketupdate mit der alten Binary weiter, bis Sie sie neu starten. Container: neues Image ziehen und neu erstellen, docker restart reicht nicht.memory_limit=-1 die wichtigste Stellschraube, gesetzt so, dass die Anwendung es nicht überschreiben kann (php_admin_value im FPM-Pool oder in der Apache-Konfiguration); ein Container- oder cgroup-Limit fängt den Speicher dann ab. Begrenzen Sie den Prozess nicht per ulimit -v oder RLIMIT_AS — davor warnt das Advisory ausdrücklich, denn damit bauen Sie den verwundbaren Pfad wieder ein. Gegen die zweite Lücke session.upload_progress.enabled=0 und unter PHP 8.5 fatal_error_backtraces=0. Dazu eine konservative post_max_size und ein niedriges max_input_nesting_level. Danach jeden PHP-Worker neu starten. Das PHP-Team nennt all das selbst eine temporäre Krücke, vollständig ist nur der Patch.session.upload_progress.enabled=0Am 23. Oktober hat php.net nachgeschoben, diese Einstellung auf 0 zu setzen und bis zum nächsten regulären Bugfix-Release stehen zu lassen — auf gepatchten Systemen ebenso. Dahinter steckt eine weitere Lücke, CVE-2026-115560, deren Advisory erst mit diesem Release erscheint. Wer Session Upload Progress nicht braucht, lässt es dauerhaft aus. Das ist der einzige Punkt dieser Seite, der auch für Sie gilt, wenn Sie längst aktualisiert haben.
Danach den Check erneut laufen lassen und das Ergebnis ablegen. Wer NIS2-pflichtig ist, braucht diesen Nachweis ohnehin.
Häufige Fragen
php -v reicht nicht, weil Debian und Ubuntu Fixes zurückportieren. Der php2shell-check liest die Paketdatenbank, fragt jede PHP-Binary und jeden Container ab und liefert ein Urteil pro PHP-Laufzeit. Von außen allein geht das nicht: Zeigt eine Seite keine Version, lautet das Ergebnis „nicht entscheidbar".
Nein. Er liest Paketdatenbanken und Einstellungen und schickt pro angegebener URL einen normalen GET-Request. Er folgt Weiterleitungen nur innerhalb desselben Hosts, legt keine temporären Dateien an und schreibt nichts auf die Platte.
Nein. Cloudflare hat am 21.10.2026 Notfallregeln für alle Pläne ausgerollt, auch für Free. Wer den Origin-Server direkt erreichen kann, umgeht sie trotzdem. Mit --origin IP prüft der Check genau das.
Versucht wird es seit dem 17.10., belegt ist bis heute kein einziger erfolgreicher Angriff. Amazon, watchTowr und Cloudflare sehen Versuche; Sansec schreibt, die kursierenden Exploits funktionierten gegen eine Standardinstallation nicht. PoC-Code kursiert — laden Sie ihn nicht auf Produktionssysteme, ein Teil davon ist mit Schadcode versetzt.
Ja. Offizielle Releases gibt es für diese Zweige nicht, das PHP-Security-Team hat stattdessen minimale Quell-Backports bereitgestellt, und die Distributionen haben die Patches vorab bekommen. Ubuntu 22.04 hat für PHP 8.1 ein Fix-Paket, für 7.4 und älter liefert Ubuntu im ESM-Programm, AlmaLinux hat sogar die Streams 7.2, 7.3 und 8.0 gepatcht. Ohne Distribution, also bei selbst gebautem PHP oder einem eigenen Image mit 8.1, müssen Sie den Quell-Backport selbst einspielen.
Als Managed Service Provider aus Hannover betreiben wir Server, Clients, Microsoft 365 und Firewalls für den Mittelstand: überwacht, gewartet, zu festen Servicelevels und zu einer monatlichen Pauschale. Wenn Sie erst durch eine Lücke wie diese gemerkt haben, dass niemand Ihren PHP-Bestand kennt, reden wir 30 Minuten darüber. Unverbindlich.
Stand: 25.10.2026, geprüft gegen php.net, die GitHub-Advisories, die Security-Tracker von Debian und Ubuntu, Red Hat, Rocky, AlmaLinux, SUSE, Alpine und die offiziellen Container-Images. Die Lage ändert sich täglich: Am 23.10. hat php.net eine zusätzliche Empfehlung zu session.upload_progress nachgeschoben (CVE-2026-115560, Advisory folgt mit dem nächsten Release). Die Quellen sind die Referenz, nicht diese Seite.
Hinweis zum Check: Nur für Systeme, die Sie betreiben oder prüfen dürfen. Bereitstellung wie besehen, kostenlos, ohne Gewähr und ohne Support. „Nicht verwundbar" ist keine Garantie: Im Zweifel patchen. Lizenz: MIT.