PHP2Shell (CVE-2026-109618 und CVE-2026-109619): Was Administratoren jetzt wissen und tun müssen
Mit CVE-2026-109618 und CVE-2026-109619 – in Anlehnung an Log4Shell „PHP2Shell“ getauft – stecken zwei kritische Lücken direkt im PHP-Kern. Sie erlauben im ungünstigsten Fall das Ausführen von Schadcode ohne Anmeldung, noch bevor der Code der Anwendung überhaupt startet. Betroffen ist praktisch jede PHP-Installation, die Webanfragen beantwortet: WordPress, Nextcloud, Shopsysteme, Intranet-Anwendungen und Appliances mit PHP-Weboberfläche – unter Linux genauso wie unter Windows Server mit IIS. Dieser Beitrag bündelt den Kenntnisstand vom 26.10.2026: was genau passiert, wer betroffen ist, wie Sie patchen, was bis dahin hilft und woran Sie einen Angriff erkennen.
Was ist passiert? Die Zeitachse
| Datum (2026) | Ereignis |
|---|---|
| 20.10., morgens | Auf Hacker News erscheint ein Beitrag über zwei bevorstehende kritische PHP-Lücken. Er wird gelöscht, Screenshots verbreiten sich trotzdem. Die Details sind damit vor dem geplanten Termin teilweise öffentlich („Leak“). |
| 20.10. | Das PHP-Sicherheitsteam kündigt ein Sicherheitsrelease für den 21.10. um 14:00 UTC an (CVSS 4.0 jeweils 9.2) und behält sich ein früheres Erscheinen vor. |
| 21.10., ca. 13:30 UTC | PHP 8.5.12, 8.4.27, 8.3.36 und 8.2.35 erscheinen – etwas früher als angekündigt. Gleichzeitig PHP 8.6.0 RC4 mit den Korrekturen. Für 7.4, 8.0 und 8.1 werden minimale Quellcode-Backports bereitgestellt. |
| 21.10. | Das BSI veröffentlicht eine Cybersicherheitswarnung. Die Entdecker (Wiz und Calif, laut BSI gemeinsam mit OpenAI) veröffentlichen technische Details, einschließlich Angriffen gegen WordPress, Drupal und Joomla. |
| 21.10. | watchTowr meldet Angriffe auf seine Honeypots. Cloudflare berichtet von Angriffsverkehr, öffentliche Proof-of-Concept-Skripte tauchen auf GitHub auf. |
| 23.10. | CERT-EU ergänzt sein Advisory 2026-018 um eine dritte Lücke (CVE-2026-115560). php.net veröffentlicht dazu einen Hinweis zu session.upload_progress. CrowdStrike sieht bislang nur Tests und erfolglose Versuche. |
| 25.10. | Unit 42 (Palo Alto Networks) zieht ein Update zurück, das eine beobachtete Kompromittierung PHP2Shell zugeordnet hatte. Die Zuordnung ließ sich nicht bestätigen. |
Die Lücken verständlich erklärt
Beide Lücken haben dieselbe Wurzel: PHP bricht eine Anfrage bei bestimmten Fehlern hart ab (intern über longjmp()) und räumt danach Speicher auf. Wird dieser Abbruch im falschen Moment ausgelöst, ist der interne Zustand nicht mehr konsistent – und genau das nutzt der Angreifer aus.
| CVE-2026-109618 | CVE-2026-109619 | |
|---|---|---|
| Kurzname | RCE über Out-of-Memory-Korruption | RCE über veralteten globalen Zustand |
| Was passiert? | Eine Anfrage überschreitet memory_limit, etwa beim Verarbeiten eines Uploads. PHP bricht ab, während Anfragedaten nur teilweise initialisiert sind. Die Aufräumroutine behandelt diese Daten als gültig und gibt nicht initialisierten Speicher frei, der Daten des Angreifers enthalten kann. |
Nach einem schweren Fehler (Fatal Error) bleibt anfragebezogener Zustand bestehen, obwohl sein Speicher bereits freigegeben ist (Use-after-free). Eine spätere Anfrage im selben Worker-Prozess liest diesen Zustand. |
| Voraussetzung | Eine Anfrage pro Versuch (mod_php); bei mehr Workern und Last steigt die Zahl der nötigen Versuche | Zwei Anfragen, die beim selben Worker landen |
| Zusätzliche Gefahr | – | Auslesen von Speicher des Workers ohne Anmeldung: Kennwörter, Tokens, API-Schlüssel |
| CVSS 4.0 | 9.2 (kritisch) | 9.2 (kritisch) |
| GitHub-Advisory | GHSA-w8hw-w9fx-j79w | GHSA-6wmf-4rv5-p3rp |
Laut Akamai nutzt ein typischer Angriff einen multipart/form-data-POST mit einem Feld PHP_SESSION_UPLOAD_PROGRESS, einem Sitzungs-Cookie und Datei-Feldern, dazu zahlreiche weitere Formularfelder zum Vorbereiten des Speichers. Wichtig: Es reicht ein beliebiger PHP-Endpunkt – auch eine Seite, die gar keine Uploads verarbeitet, denn PHP wertet die Anfrage aus, bevor der Anwendungscode läuft.
session.upload_progress.enabled ist in PHP standardmäßig aktiviert. Deshalb ist eine Installation „ab Werk“ angreifbar, ohne dass der Administrator etwas falsch konfiguriert hat.Die dritte Lücke: CVE-2026-115560
Am 23.10. kam eine weitere RCE-Lücke im Zusammenhang mit dem Upload-Fortschritt hinzu. Nach Angabe der PHP-Entwickler ist sie nur bei einer ungewöhnlichen Kombination ausnutzbar: session.serialize_handler ist in der Konfiguration auf php_binary oder php_serialize gesetzt und wird zur Laufzeit per ini_set() vor session_start() auf php umgestellt. Es gibt dafür kein Sonderrelease; der Fix folgt im nächsten regulären Release. Bis dahin hilft session.upload_progress.enabled=0.
Wer ist betroffen?
PHP-Versionen
| Zweig | Verwundbar | Behoben in | Bemerkung |
|---|---|---|---|
| 8.5 | vor 8.5.12 | 8.5.12 | zusätzlich fatal_error_backtraces beachten (siehe Sofortmaßnahmen) |
| 8.4 | vor 8.4.27 | 8.4.27 | empfohlene Zielversion für die meisten Umgebungen |
| 8.3 | vor 8.3.36 | 8.3.36 | Sicherheitsupdates bis Ende 2027 |
| 8.2 | vor 8.2.35 | 8.2.35 | Supportende am 31.12.2026 – Umstieg ohnehin fällig |
| 7.4, 8.0, 8.1 | ja | kein offizielles Release | nur Quellcode-Backports des PHP-Teams, Pakete der Distribution oder eines LTS-Anbieters – oder Upgrade |
| 7.3 und älter, 5.x | ja (laut watchTowr und Akamai auch alte Zweige) | kein Fix | nur Upgrade oder Abschaltung |
Betriebsarten
Betroffen sind alle Server-APIs, die Webanfragen bedienen: Apache mit mod_php, PHP-FPM (nginx, Apache mit proxy_fcgi), php-cgi – und damit auch IIS mit FastCGI –, LiteSpeed und FrankenPHP. Das höchste Risiko sieht das PHP-Team bei mod_php, weil dort ein Angriff demonstriert wurde, der mit einer einzigen nicht authentifizierten Anfrage auskommt.
Versteckte PHP-Installationen
- Webhosting: Bei Shared Hosting patcht der Anbieter. Prüfen Sie dennoch die tatsächlich verwendete Version (siehe unten) und ob Sie die PHP-Version im Kundenmenü selbst gewählt haben.
- Appliances und Netzwerkkomponenten: NAS-Systeme, Firewalls, Monitoring- und Verwaltungsoberflächen bringen oft ein eigenes PHP mit. Das BSI weist ausdrücklich darauf hin, dass zunehmend Hersteller von Netzwerkkomponenten Advisories veröffentlichen. Das NCSC-NL pflegt auf GitHub eine Liste betroffener Produkte.
- Windows-Server: Herstellertools und Branchensoftware mit eigener
php-cgi.exe, alte XAMPP-, WAMP- oder Laragon-Installationen. - Container: Docker-Images enthalten ihr eigenes PHP. Ein Update des Hosts hilft nicht – Images müssen neu gebaut und Container neu gestartet werden.
Schritt 1: Betroffene Systeme finden
Priorisieren Sie nach Erreichbarkeit: erst alles, was aus dem Internet erreichbar ist, dann interne Anwendungen, dann Test- und Entwicklungssysteme.
Windows Server und IIS
# Welche php-cgi.exe nutzt IIS tatsächlich?
& "$env:windir\system32\inetsrv\appcmd.exe" list config /section:system.webServer/fastCgi
# Version jeder registrierten PHP-Installation auslesen und bewerten
Import-Module WebAdministration
$fix = @{ '8.5' = [version]'8.5.12'; '8.4' = [version]'8.4.27'; '8.3' = [version]'8.3.36'; '8.2' = [version]'8.2.35' }
Get-WebConfiguration -Filter 'system.webServer/fastCgi/application' | ForEach-Object {
$exe = $_.fullPath
$ver = [version]((Get-Item $exe).VersionInfo.ProductVersion -replace '[^0-9.].*$')
$zweig = '{0}.{1}' -f $ver.Major, $ver.Minor
$status = if (-not $fix.ContainsKey($zweig)) { 'KEIN UPDATE VERFÜGBAR (EOL)' }
elseif ($ver -ge $fix[$zweig]) { 'gepatcht' } else { 'VERWUNDBAR' }
[pscustomobject]@{ Pfad = $exe; Version = $ver; Status = $status }
}
Für die Suche nach PHP auf allen Servern im Netz eignet sich das Inventarskript aus unserem Beitrag zum Supportende von PHP 8.2 – es sucht per WinRM nach php.exe und php-cgi.exe und liest die Version aus.
Linux
php -v # CLI – nicht zwingend die Web-Version! ls /etc/php/ 2>/dev/null # Debian/Ubuntu: installierte Zweige systemctl list-units 'php*-fpm*' # laufende FPM-Dienste apachectl -M 2>/dev/null | grep -i php # mod_php aktiv? # Distributionspakete: maßgeblich ist der Changelog bzw. das Advisory der Distribution apt changelog php8.2-fpm 2>/dev/null | grep -m3 -i -E 'CVE-2026-10961[89]' rpm -q --changelog php-fpm 2>/dev/null | grep -m3 -i -E 'CVE-2026-10961[89]'
php -v z. B. „8.2.29“ anzeigt. Entscheidend ist das Sicherheits-Advisory Ihrer Distribution, nicht die Upstream-Nummer. Umgekehrt meldet ein selbst kompiliertes oder aus einem Fremd-Repository installiertes PHP nur dann einen Fix, wenn die Upstream-Version stimmt.Welche Version nutzt die Website wirklich?
Die Kommandozeilen-Version kann von der Version abweichen, mit der der Webserver arbeitet. Sicher ist nur die Anzeige der Web-Umgebung: In WordPress unter Werkzeuge → Website-Zustand → Bericht → Server, sonst über eine kurzzeitig abgelegte phpinfo()-Seite (Zugriff nur intern, danach sofort löschen) mit Blick auf „PHP Version“ und „Server API“.
Schritt 2: Patchen
Windows Server mit IIS
- Von windows.php.net den x64 Non Thread Safe (NTS)-Build des eigenen Zweigs laden (8.5.12 bzw. 8.4.27 mit VS17; 8.3.36 bzw. 8.2.35 mit VS16) und die SHA256-Prüfsumme vergleichen.
- IIS stoppen:
net stop w3svc(alternativ nur den betroffenen Anwendungspool). - Bestehenden PHP-Ordner sichern, z. B.
C:\PHP\8.4nachC:\PHP\8.4_altumbenennen. - Neuen Build in denselben Pfad entpacken – dann bleiben FastCGI-Eintrag und Handler unverändert.
php.iniaus der Sicherung zurückkopieren. Zusätzliche Erweiterungen (z. B. sqlsrv) nur in der zur Version passenden Fassung verwenden. - IIS starten:
net start w3svc. - Prüfen, dass keine
php-cgi.exemit altem Stand mehr läuft und die Web-Umgebung die neue Version meldet. - Die Sicherung erst nach einigen Tagen Betrieb löschen.
# Laufen noch PHP-Prozesse mit altem Binary?
Get-Process php-cgi -ErrorAction SilentlyContinue |
Select-Object Id, Path, @{n='Version';e={$_.MainModule.FileVersionInfo.ProductVersion}}, StartTime
# Laufende IIS-Worker-Prozesse
& "$env:windir\system32\inetsrv\appcmd.exe" list wps
Linux
# Debian/Ubuntu apt update && apt install --only-upgrade 'php*' systemctl restart php8.4-fpm # alle FPM-Dienste neu starten systemctl restart apache2 # bei mod_php zwingend # RHEL/Rocky/Alma dnf upgrade 'php*' && systemctl restart php-fpm httpd # Container: Images neu bauen, nicht nur neu starten docker compose build --pull && docker compose up -d
PHP 8.1 und älter
Für End-of-Life-Versionen gibt es keine offiziellen Releases. Die Möglichkeiten in absteigender Reihenfolge: auf einen unterstützten Zweig aktualisieren; ein Paket der Distribution oder eines kommerziellen LTS-Anbieters mit Backport einsetzen; die vom PHP-Team bereitgestellten Quellcode-Backports selbst kompilieren. Ist nichts davon kurzfristig möglich, nehmen Sie das System vom Internet und setzen Sie die Sofortmaßnahmen um.
Schritt 3: Sofortmaßnahmen, bis gepatcht ist
Die folgenden Maßnahmen stammen aus dem PHP-Advisory und den Empfehlungen von CERT-EU. Sie verringern die Angriffsfläche, beseitigen die Lücken aber nicht.
| Maßnahme | Wirkt gegen | Hinweise |
|---|---|---|
session.upload_progress.enabled = 0 |
CVE-2026-109619, CVE-2026-115560 | In php.ini, im FPM-Pool oder in der Serverkonfiguration setzen – nicht per ini_set() oder .user.ini, weil diese erst nach dem Parsen der Anfrage greifen. Danach alle Worker neu starten. Nur Upload-Fortschrittsanzeigen sind betroffen. |
fatal_error_backtraces = 0 (nur PHP 8.5) |
CVE-2026-109619 | Ab PHP 8.5 vorhandene Option; danach Worker neu starten. |
memory_limit = -1, nicht überschreibbar |
CVE-2026-109618 | Per php_admin_value im FPM-Pool bzw. in der Apache-Konfiguration erzwingen. Risiko: Ein einzelnes Skript kann dann den gesamten Speicher belegen. Daher nur mit Speicherbegrenzung über Container oder cgroups. RLIMIT_AS/RLIMIT_DATA nicht verwenden – sie können den verwundbaren Fehlerpfad auslösen. |
post_max_size niedrig halten |
CVE-2026-109618 | 8M ohne Datei-Uploads, 32M mit Uploads; upload_max_filesize kleiner als post_max_size. |
file_uploads = Off, wo nicht benötigt |
beide | Empfehlung von CrowdStrike für Anwendungen ohne Upload-Funktion. |
| Anfragen vor PHP begrenzen | beide | Am Webserver, Reverse Proxy oder WAF: Größe des Request-Body, Zahl der Formularfelder und Multipart-Teile, Header-Anzahl, Verschachtelungstiefe – auch für Anfragen ohne Content-Length. |
| Fatal Errors und Timeouts beseitigen | CVE-2026-109619 | Fehler, die ein Angreifer gezielt auslösen kann, entfernen. Unterdrücken über display_errors, error_reporting oder @ hilft nicht. |
| Worker nach jeder Anfrage beenden | CVE-2026-109619 | Bei FPM pm.max_requests = 1. Kostet deutlich Leistung, verhindert aber, dass veralteter Zustand eine Folgeanfrage erreicht. |
| Zugriff einschränken | beide | Nicht patchbare Systeme per VPN, IP-Freigabeliste oder Abschaltung vom Internet trennen. |
Sofortmaßnahmen unter IIS
Unter IIS gelten die Werte zentral in der php.ini, auf die PHPRC der FastCGI-Anwendung zeigt. Für das Beenden der Prozesse nach jeder Anfrage gibt es kein pm.max_requests; die Entsprechung sind instanceMaxRequests in der FastCGI-Konfiguration und die Umgebungsvariable PHP_FCGI_MAX_REQUESTS. Die folgende Notfallkonfiguration ist unsere Übertragung der FPM-Empfehlung auf IIS – sie kostet spürbar Leistung und sollte nach dem Patch wieder zurückgenommen werden:
# php.ini (Pfad aus PHPRC) – Notfallwerte
# session.upload_progress.enabled = 0
# post_max_size = 32M
# upload_max_filesize = 30M
# fatal_error_backtraces = 0 ; nur PHP 8.5
Import-Module WebAdministration
$php = 'C:\PHP\8.4\php-cgi.exe'
# Jeder php-cgi-Prozess bedient nur noch eine Anfrage (Notbetrieb!)
Set-WebConfigurationProperty -Filter "system.webServer/fastCgi/application[@fullPath='$php']" `
-Name instanceMaxRequests -Value 1
Set-WebConfigurationProperty -Filter "system.webServer/fastCgi/application[@fullPath='$php']/environmentVariables/environmentVariable[@name='PHP_FCGI_MAX_REQUESTS']" `
-Name value -Value '1'
# Request-Größe vor PHP begrenzen (Bytes) – passend zu post_max_size
Set-WebConfigurationProperty -PSPath 'IIS:\' -Filter 'system.webServer/security/requestFiltering/requestLimits' `
-Name maxAllowedContentLength -Value 33554432
net stop w3svc; net start w3svc
Schritt 4: Angriffe erkennen
Bestätigte Indikatoren (IoCs) für erfolgreiche PHP2Shell-Angriffe gibt es zum Stand dieses Beitrags nicht. Die Lage ist uneinheitlich: watchTowr beobachtet seit dem 21.10. Angriffe auf Honeypots, Cloudflare meldet Angriffsverkehr, CrowdStrike sah bis zum 23.10. nur Tests und erfolglose Versuche, und das BSI kannte am 22.10. keine erfolgreiche Ausnutzung in der Breite. CrowdStrike weist zudem darauf hin, dass viele öffentliche Exploits nur Abstürze erzeugen und für zuverlässige Codeausführung an Version und Build angepasst werden müssen.
Unabhängig von der Lücke erkennen Sie eine erfolgreiche Übernahme an den Folgen. Darauf sollten Sie achten:
| Indikator | Wo prüfen? |
|---|---|
PHP-Prozesse starten Shells oder Werkzeuge: cmd.exe, powershell.exe, certutil.exe, sh, bash, curl, wget, nc, python, perl |
Windows: Sicherheitsereignis 4688 (mit Befehlszeilen-Protokollierung) oder Sysmon Ereignis 1; Linux: EDR, auditd |
Erkundungsbefehle wie whoami, id, uname -a, ipconfig, net user |
Prozessprotokolle |
Neue oder geänderte .php-Dateien im Webverzeichnis (Webshells), besonders in Upload- und Cache-Ordnern |
Dateisystem, Integritätsüberwachung |
| Neue geplante Aufgaben, Cronjobs, Dienste oder Benutzerkonten | Aufgabenplanung, crontab, AD/lokale Konten |
| Auffällig viele Fehler „Allowed memory size … exhausted“ oder Fatal Errors von derselben Quelle | PHP-Fehlerprotokoll |
| Abstürze von Worker-Prozessen (Segmentation fault, unerwartet beendete FastCGI-Prozesse), Häufung von HTTP 500 | FPM-/Apache-Fehlerprotokoll, IIS-Protokolle, Anwendungsereignisprotokoll |
Viele große multipart/form-data-POSTs auf beliebige PHP-Seiten, auch solche ohne Formular |
Webserver- und WAF-Protokolle |
| Ungewöhnliche ausgehende Verbindungen des Webservers | Firewall-Protokolle |
Windows: Hat PHP Prozesse gestartet?
# Voraussetzung: Überwachung "Prozesserstellung" aktiv (Ereignis 4688), idealerweise mit Befehlszeile
$start = Get-Date '2026-10-20'
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4688; StartTime = $start } -ErrorAction SilentlyContinue |
ForEach-Object {
$x = [xml]$_.ToXml()
$d = @{}; $x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
if ($d.ParentProcessName -match '\\php(-cgi)?\.exe$') {
[pscustomobject]@{
Zeit = $_.TimeCreated
Eltern = $d.ParentProcessName
Prozess = $d.NewProcessName
Befehl = $d.CommandLine
Benutzer = $d.SubjectUserName
}
}
} | Format-Table -AutoSize -Wrap
# Neue oder geänderte PHP-Dateien im Webverzeichnis seit dem 20.10.
Get-ChildItem -Path D:\Web, C:\inetpub -Recurse -Include *.php, *.phtml, *.phar -File -ErrorAction SilentlyContinue |
Where-Object { $_.LastWriteTime -ge $start -or $_.CreationTime -ge $start } |
Select-Object FullName, CreationTime, LastWriteTime, Length | Sort-Object LastWriteTime -Descending
Linux
# Neue/geänderte PHP-Dateien seit dem 20.10. find /var/www -type f \( -name '*.php' -o -name '*.phtml' -o -name '*.phar' \) -newermt '2026-10-20' -ls # Abstürze und Speicherfehler journalctl -u 'php*-fpm*' --since '2026-10-20' | grep -E -i 'SIGSEGV|signal 11|exited on signal' grep -h -i 'Allowed memory size' /var/log/php*/*.log /var/log/apache2/error.log 2>/dev/null | wc -l # Prozesse unterhalb von PHP-Workern ps -eo pid,ppid,user,cmd --forest | grep -B1 -A3 -E 'php-fpm|apache2|httpd' | grep -E 'sh -c|bash|curl|wget|nc '
Was Sie nach dem Patch tun sollten
- Geheimnisse rotieren, wenn ein System vor dem Patch aus dem Internet erreichbar war und die Protokolle Auffälligkeiten zeigen. CVE-2026-109619 erlaubt laut Qualys das Auslesen von Speicherinhalten des Workers.
- Notfallwerte zurücknehmen:
memory_limit = -1undinstanceMaxRequests = 1bzw.pm.max_requests = 1sind keine Dauerlösung.session.upload_progress.enabled = 0können Sie beibehalten, wenn Ihre Anwendungen keine Upload-Fortschrittsanzeige nutzen – bis zum nächsten regulären Release ist das wegen CVE-2026-115560 ohnehin empfohlen. - PHP-Bestand bereinigen: Alte Installationen, Testumgebungen und vergessene XAMPP-Ordner entfernen.
- PHP 8.2 ersetzen: Der Zweig endet am 31.12.2026. Wer jetzt ohnehin anfasst, plant gleich den Umstieg auf 8.4.
- Nächstes Release verfolgen: Der Fix für CVE-2026-115560 und mögliche weitere Korrekturen kommen mit dem nächsten regulären Release.
- Härtung umsetzen: Minimal berechtigte Anwendungspools bzw. FPM-Benutzer, kein Schreibrecht im Webverzeichnis, keine Skriptausführung in Upload-Ordnern, Begrenzung der Anfragegröße vor PHP. Die RCE läuft mit den Rechten des Workers – je weniger dieser darf, desto kleiner der Schaden.
Fallstricke aus der Praxis
| Fallstrick | Folge | Lösung |
|---|---|---|
Nur php -v geprüft |
Web-SAPI läuft mit anderer, ungepatchter Version | Version der Web-Umgebung prüfen (Website-Zustand, phpinfo, FastCGI-Pfad) |
| Paket aktualisiert, Dienst nicht neu gestartet | Alter Code bleibt im Speicher aktiv | FPM, Apache, IIS bzw. Container neu starten und Prozessstart prüfen |
Workaround per ini_set() oder .user.ini |
Greift zu spät, Angriff erfolgt vor dem Anwendungscode | In php.ini, FPM-Pool oder Serverkonfiguration setzen |
| Docker-Host aktualisiert | Container nutzen weiter ihr eigenes, altes PHP | Images neu bauen und ausrollen |
| Distributionsversion als verwundbar eingestuft | Unnötige Notmaßnahmen oder Panik | Advisory/Changelog der Distribution prüfen |
| Appliances vergessen | NAS-, Firewall- oder Monitoring-Oberflächen bleiben offen | Hersteller-Advisories prüfen, Verwaltungsoberflächen nie direkt ins Internet |
memory_limit = -1 dauerhaft belassen |
Ein fehlerhaftes Skript legt den Server lahm | Nach dem Patch auf einen festen Wert zurücksetzen |
Compliance-Bezug
- NIS2 / BSIG: Für besonders wichtige und wichtige Einrichtungen ist eine erhebliche Kompromittierung meldepflichtig (Frühwarnung innerhalb von 24 Stunden). Dokumentieren Sie Prüfung, Patchzeitpunkt und Ergebnis der Suche nach Kompromittierungsspuren. Art. 21 Abs. 2 der NIS2-Richtlinie fordert ausdrücklich den Umgang mit Schwachstellen.
- DSGVO: Werden personenbezogene Daten abgegriffen, kann eine Meldung an die Aufsichtsbehörde innerhalb von 72 Stunden erforderlich sein (Art. 33).
- BSI IT-Grundschutz: OPS.1.1.3 Patch- und Änderungsmanagement, APP.3.2 Webserver, APP.3.1 Webanwendungen, DER.2.1 Behandlung von Sicherheitsvorfällen.
- CIS Controls v8: Control 7 (Continuous Vulnerability Management) und Safeguard 7.7 (Remediate Detected Vulnerabilities).
Fazit
PHP2Shell ist ernst – aber beherrschbar. Die Lücken sitzen im PHP-Kern, betreffen jede Betriebsart und sind ab Werk angreifbar. Gleichzeitig ist die zuverlässige Ausnutzung nach heutigem Stand anspruchsvoll, und die Korrekturen liegen seit dem 21.10. vor. Die Reihenfolge ist klar: alle PHP-Installationen finden, auf 8.5.12, 8.4.27, 8.3.36 oder 8.2.35 aktualisieren, sämtliche Prozesse neu starten, bis dahin Upload-Fortschritt abschalten und Anfragen begrenzen – und nach Spuren suchen, wenn ein System vor dem Patch erreichbar war. Wer noch PHP 8.1 oder älter betreibt, hat spätestens jetzt keinen Grund mehr, den Umstieg aufzuschieben.
Passende ISW-Tools
- CVE Scanner – NIST Database – findet verwundbare Softwarestände auf Ihren Servern, sobald die CVEs in der NIST-Datenbank geführt werden.
- Security Advisory Dashboard – meldet neue Herstellerhinweise zu PHP und zu Appliances mit PHP-Oberfläche.
- Windows Live-Ereignismonitor – überwacht Prozessstarts (Ereignis 4688) und weitere Ereignisse Ihrer Webserver in Echtzeit.
- Network Communication Monitor – macht ungewöhnliche ausgehende Verbindungen von Webservern sichtbar.
- Windows Firewall Manager Pro – schränkt den Zugriff auf nicht sofort patchbare Systeme zentral ein.
Quellen: php.net – Sicherheitsrelease und Hinweise · CERT-EU Advisory 2026-018 · BSI-Cybersicherheitswarnung · watchTowr – PHP2Shell FAQ · Qualys · CrowdStrike · Unit 42 · Huntress · Akamai

