PHP2Shell patchen: Anleitung für Ubuntu, Debian, Red Hat & Docker
Um PHP2Shell zu schließen, installieren Sie das gepatchte PHP aus derselben Quelle, aus der Ihr PHP stammt, starten danach jeden PHP-Prozess neu und prüfen, dass kein Prozess mehr die alte Version im Speicher hält. Die abgesicherten Versionen sind PHP 8.5.12, 8.4.27, 8.3.36 oder 8.2.35; Ubuntu und Red Hat liefern die Korrektur teils unter der alten Versionsnummer. Die Anleitung richtet sich an Administratoren mit Serverzugang. Wer nur ein Webhosting-Paket hat, findet unten die Fragen an den Hoster.
Die Kurzfassung in fünf Schritten
- Herausfinden, woher Ihr PHP kommt: Distribution, Fremd-Repository, Docker-Image, FrankenPHP oder Hosting-Panel.
- Das gepatchte PHP aus genau dieser Quelle installieren.
- Jeden Prozess neu starten, der PHP ausführt.
- Prüfen, dass kein Prozess mehr die alte PHP-Bibliothek nutzt.
- Übergangsmaßnahmen zurücknehmen, die Sie nicht mehr brauchen.
Schritt 1: Woher kommt Ihr PHP?
- Pakete der Distribution: Ubuntu, Debian, Red Hat, AlmaLinux, Rocky Linux.
- Fremd-Repositories: Ondřej Surýs packages.sury.org und ppa:ondrej/php für Debian und Ubuntu, Remis Repository für Red Hat und Klone. Remis Repository lieferte die Korrektur am 21. Oktober nicht aus; die PHP Foundation rät dort zu Distributionspaketen oder einem eigenen Build.
- Docker-Images (php:8.x) und FrankenPHP: PHP ist im Image eingebaut, apt und dnf helfen hier nicht.
- Hosting-Panels wie Plesk, cPanel oder CloudLinux mit eigenen PHP-Paketen (alt-php, ea-php, lsphp).
- Windows: Die abgesicherten Builds stehen auf downloads.php.net.
php -v
dpkg -l 'php*' | awk '/^ii/{print $2, $3}' # Debian, Ubuntu
rpm -qa 'php*' | sort # Red Hat, AlmaLinux, RockySchritt 2: Update auf Ubuntu und Debian
Die Befehle gelten für die Pakete von Ubuntu und Debian ebenso wie für packages.sury.org und das Ondřej-PPA. Ersetzen Sie 8.3 durch Ihre Version und wiederholen Sie den Schritt für jede PHP-Version auf dem Server. Der Befehl aktualisiert nur, was bereits installiert ist.
sudo apt-get update
apt list --upgradable 2>/dev/null | grep php
sudo apt-get install --only-upgrade 'php8.3*' libapache2-mod-php8.3zgrep -E 'CVE-2026-10961[89]' /usr/share/doc/php8.3-fpm/changelog.Debian.gz| System | Abgesicherte Paketversion | Stand 21.10.2026, 16:15 Uhr |
|---|---|---|
| Ubuntu 26.04 | 8.5.4-0ubuntu1.5 | Veröffentlicht (USN-8948-1) |
| Ubuntu 24.04 | 8.3.6-0ubuntu0.24.04.13 | Veröffentlicht (USN-8948-1) |
| Ubuntu 22.04 | 8.1.2-1ubuntu2.28 | Veröffentlicht (USN-8948-1) |
| Debian 13 trixie | 8.4.27-1~deb13u1 | Im Sicherheitsarchiv |
| Debian 12 bookworm | 8.2.35-1~deb12u1 | In Vorbereitung |
| packages.sury.org (amd64) | Upstream-Version mit Build-Datum 20261021 | Für PHP 5.6 bis 8.5 verfügbar, arm64 folgt |
Ubuntu 18.04 und 20.04 bekommen Korrekturen nur mit Ubuntu Pro (ESM). Ob ein Fix verfügbar ist, zeigt sudo pro fix CVE-2026-109618. Ubuntu 25.04 und 25.10 sind ausgelaufen und bekommen keine Korrektur mehr.
Schritt 2: Update auf Red Hat, AlmaLinux und Rocky Linux
dnf module list --enabled php # RHEL 8 und 9
sudo dnf upgrade 'php*'
dnf updateinfo list --security | grep php
rpm -q --changelog php-fpm | head -5Achtung bei RHEL 8: Ein einfaches dnf install php installiert dort PHP 7.2 aus einem längst eingestellten Modul-Stream, der keine Korrekturen mehr bekommt. Dasselbe gilt für die Streams 7.3 und 8.0 unter RHEL 8 und 8.1 unter RHEL 9. Wechseln Sie mit dnf module reset php und dnf module enable php:8.2 oder höher auf einen gepflegten Stream.
Schritt 3: Welche Dienste müssen neu starten?
Ein laufender Prozess behält die alte PHP-Version im Speicher, bis er neu startet. Ohne Neustart ist der Server trotz installiertem Update angreifbar.
| So läuft PHP | Nach dem Update |
|---|---|
| PHP-FPM hinter nginx, Caddy oder Apache | sudo systemctl restart php8.3-fpm (Debian, Ubuntu) oder php-fpm (Red Hat); ein reload reicht ebenfalls |
| Apache mit mod_php | sudo systemctl restart apache2 oder httpd. Ein reload oder apachectl graceful reicht nicht |
| LiteSpeed und OpenLiteSpeed | lsphp-Pakete aktualisieren, dann sudo pkill lsphp; ein Neustart von LiteSpeed allein startet PHP nicht neu |
| FrankenPHP | Neue FrankenPHP-Version oder neues Image installieren |
| Docker-Images | Neues Image ziehen, eigene Images mit docker build --pull neu bauen, Container neu erstellen |
| Queue-Worker, Laravel Octane, Supervisor | Neu starten; für Laravel-Queues php artisan queue:restart |
Schritt 4: Läuft wirklich nichts mehr mit dem alten PHP?
Nach dem Update liegen die alten PHP-Dateien nicht mehr auf der Platte. Ein Prozess, der sie noch nutzt, zeigt sie als gelöscht an. Ist die Ausgabe des ersten Befehls leer, läuft überall die neue Version. Auf Debian und Ubuntu erledigt needrestart dieselbe Prüfung.
sudo grep -lE ' /(usr|lib|opt).*\(deleted\)$' /proc/[0-9]*/maps
sudo needrestart -b -r lWebhosting-Paket, Plesk oder cPanel: Was können Sie selbst tun?
Bei einem Webhosting-Paket aktualisiert der Hoster PHP. Im Kundenmenü können Sie meist nur zwischen installierten Versionen wählen. Ein Wechsel auf 8.3 oder 8.4 hilft nur, wenn der Hoster für diese Version bereits das abgesicherte Build ausgerollt hat. Fragen Sie deshalb schriftlich nach dem Patchstand und lassen Sie sich bestätigen, dass PHP neu gestartet wurde. Eine fertige Vorlage steht im Ratgeber WordPress und PHP2Shell.
Was tun, wenn heute kein Update möglich ist?
- Die sicherste Lösung: Seite vom Netz nehmen, bis das Update läuft. Das empfehlen CERT-EU und das britische NCSC.
- Zugang am Webserver beschränken, etwa per IP-Freigabe oder Passwortschutz, damit fremde Anfragen PHP gar nicht erreichen. Ein Wartungsmodus-Plugin hilft nicht, weil es selbst in PHP läuft.
- Datei-Uploads (multipart-Anfragen) am Webserver sperren, wenn die Seite keine Uploads braucht.
- session.upload_progress.enabled = 0 und session.use_strict_mode = 1 setzen. Das verringert das Risiko, schließt die Lücke aber nicht.
- Eine Web Application Firewall wie Cloudflare vorschalten. Sie blockiert bekannte Muster, ersetzt das Update aber nicht.
Nach dem Update: Übergangsmaßnahmen zurücknehmen
| Übergangsmaßnahme | Nach dem Patch |
|---|---|
| Upload-Sperre am Webserver oder eigene Cloudflare-Regel | Entfernen, sonst funktionieren Uploads nicht |
| session.upload_progress.enabled = 0 | Lassen, außer Ihre Anwendung braucht die Fortschrittsanzeige |
| session.use_strict_mode = 1 | Lassen, das empfiehlt PHP für jede Website |
| pm.max_requests = 1 | Auf den alten Wert zurücksetzen, sonst wird PHP langsam |
| memory_limit = -1 | Wieder ein festes Limit setzen |
| Seite offline oder nur lesbar | Wieder freigeben |
Neu seit dem Update: PHP hat eine zweite, höhere Speichergrenze. Erreicht ein Prozess sie, beendet PHP ihn sofort, ohne Shutdown-Funktionen auszuführen. Wer memory_limit vorübergehend auf -1 gesetzt hat, sollte deshalb unbedingt wieder einen echten Wert eintragen.
PHP 8.1 oder älter: Umstieg jetzt planen
Eine nachgereichte Korrektur Ihrer Distribution schließt PHP2Shell, schützt aber nicht vor der nächsten Lücke, denn das PHP-Projekt prüft diese Versionen nicht mehr. Installieren Sie heute, was verfügbar ist, und planen Sie den Wechsel auf PHP 8.4 oder 8.5. PHP 8.2 überspringen Sie besser, sein Sicherheitssupport endet am 31. Dezember 2026. Gibt es für Ihre Version gar keine Korrektur, bleibt bis zum Umstieg nur, die Seite offline zu nehmen.
Wenn Sie das nicht selbst machen möchten
Wir übernehmen Update, Neustart und Kontrolle per Fernwartung, bei Bedarf auch die Abstimmung mit Ihrem Hoster. Abgerechnet wird mit 95 € netto pro Stunde im 15-Minuten-Takt. Für Server, die wir laufend betreuen, gehört das zur Server-Betreuung. Ob Ihre Website von außen noch eine alte Version meldet, prüft der PHP2Shell-Check.
Häufige Fragen zum Thema
Reicht php -v, um den Patchstand zu prüfen?
Nicht immer. Ubuntu und Red Hat spielen Korrekturen in die alte Versionsnummer ein, Ubuntu 24.04 meldet etwa weiterhin 8.3.6. Prüfen Sie den Paketstand mit dpkg -l oder rpm -q und vergleichen Sie ihn mit der abgesicherten Paketversion. Außerdem zeigt php -v nur die Kommandozeile, nicht unbedingt das PHP, das die Website ausliefert.
Reicht bei Apache ein reload?
Bei mod_php nein. Erst ein vollständiger Neustart mit systemctl restart lädt die neue PHP-Bibliothek; apachectl graceful lässt die alte im Speicher. Bei PHP-FPM genügt dagegen ein reload des FPM-Dienstes.
Was ist mit Docker-Containern?
Ein Update auf dem Host ändert nichts am PHP im Container. Ziehen Sie das neue offizielle Image (php:8.5.12, 8.4.27, 8.3.36 oder 8.2.35), bauen Sie eigene Images mit docker build --pull neu und erstellen Sie die Container neu. Am 21. Oktober um 16:15 Uhr waren die offiziellen Images noch nicht fertig gebaut; prüfen Sie den Tag vor dem Deployment.
Ich nutze Remis Repository. Was nun?
Remis Repository lieferte die Korrektur am 21. Oktober nicht aus. Die PHP Foundation empfiehlt, auf die PHP-Pakete der Distribution zu wechseln oder PHP aus dem Quellcode zu bauen.
Gibt es ein Update für PHP 7.4?
Nicht vom PHP-Projekt als Release. Es hat Quell-Patches für 7.4, 8.0 und 8.1 veröffentlicht, und packages.sury.org liefert abgesicherte Builds für PHP 5.6 bis 8.5 unter Debian und Ubuntu. Langfristig hilft nur der Umstieg auf eine unterstützte Version.
Quellen
Stand der Angaben: 21. Oktober 2026. Gesetze und Förderbedingungen ändern sich; maßgeblich sind die verlinkten Originalquellen.
- PHP: Ankündigung des kritischen Sicherheitsupdates (php.announce, 20. Oktober 2026)
- PHP: News-Archiv 2026 mit den Releases 8.5.12, 8.4.27, 8.3.36 und 8.2.35
- PHP: Advisory GHSA-w8hw-w9fx-j79w zu CVE-2026-109618
- PHP: Advisory GHSA-6wmf-4rv5-p3rp zu CVE-2026-109619
- PHP: Unterstützte Versionen und Support-Enden
- CERT-EU: Security Advisory 2026-018, Critical Vulnerabilities in PHP
- CERT.at: Aktuelle Meldungen, Warnung vom 20. Oktober 2026
- BSI: Cybersicherheitswarnung „PHP: Kritische Schwachstellen bedrohen Webanwendungen weltweit“
- Cloudflare: Schutzregeln gegen php2shell (21. Oktober 2026)
- Mattias Geniar: Patches für CVE-2026-109618 und CVE-2026-109619 einspielen