IT-Sicherheit

PHP2Shell patchen: Anleitung für Ubuntu, Debian, Red Hat & Docker

Arda Özkan, Software-Architekt9 Min. Lesezeit
Symbolbild: Serverschrank mit Glasfaser- und Netzwerkkabeln im DunkelnSymbolbild

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

  1. Herausfinden, woher Ihr PHP kommt: Distribution, Fremd-Repository, Docker-Image, FrankenPHP oder Hosting-Panel.
  2. Das gepatchte PHP aus genau dieser Quelle installieren.
  3. Jeden Prozess neu starten, der PHP ausführt.
  4. Prüfen, dass kein Prozess mehr die alte PHP-Bibliothek nutzt.
  5. Ü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.
Installierte PHP-Pakete anzeigen
php -v
dpkg -l 'php*' | awk '/^ii/{print $2, $3}'   # Debian, Ubuntu
rpm -qa 'php*' | sort                          # Red Hat, AlmaLinux, Rocky

Schritt 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.

Nur PHP-Pakete aktualisieren
sudo apt-get update
apt list --upgradable 2>/dev/null | grep php
sudo apt-get install --only-upgrade 'php8.3*' libapache2-mod-php8.3
Ubuntu: Korrektur im Changelog nachweisen
zgrep -E 'CVE-2026-10961[89]' /usr/share/doc/php8.3-fpm/changelog.Debian.gz
SystemAbgesicherte PaketversionStand 21.10.2026, 16:15 Uhr
Ubuntu 26.048.5.4-0ubuntu1.5Veröffentlicht (USN-8948-1)
Ubuntu 24.048.3.6-0ubuntu0.24.04.13Veröffentlicht (USN-8948-1)
Ubuntu 22.048.1.2-1ubuntu2.28Veröffentlicht (USN-8948-1)
Debian 13 trixie8.4.27-1~deb13u1Im Sicherheitsarchiv
Debian 12 bookworm8.2.35-1~deb12u1In Vorbereitung
packages.sury.org (amd64)Upstream-Version mit Build-Datum 20261021Fü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

Aktive PHP-Version, Update und Nachweis
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 -5

Achtung 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 PHPNach dem Update
PHP-FPM hinter nginx, Caddy oder Apachesudo systemctl restart php8.3-fpm (Debian, Ubuntu) oder php-fpm (Red Hat); ein reload reicht ebenfalls
Apache mit mod_phpsudo systemctl restart apache2 oder httpd. Ein reload oder apachectl graceful reicht nicht
LiteSpeed und OpenLiteSpeedlsphp-Pakete aktualisieren, dann sudo pkill lsphp; ein Neustart von LiteSpeed allein startet PHP nicht neu
FrankenPHPNeue FrankenPHP-Version oder neues Image installieren
Docker-ImagesNeues Image ziehen, eigene Images mit docker build --pull neu bauen, Container neu erstellen
Queue-Worker, Laravel Octane, SupervisorNeu 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.

Prozesse mit gelöschter, also alter PHP-Bibliothek finden
sudo grep -lE ' /(usr|lib|opt).*\(deleted\)$' /proc/[0-9]*/maps
sudo needrestart -b -r l

Webhosting-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ßnahmeNach dem Patch
Upload-Sperre am Webserver oder eigene Cloudflare-RegelEntfernen, sonst funktionieren Uploads nicht
session.upload_progress.enabled = 0Lassen, außer Ihre Anwendung braucht die Fortschrittsanzeige
session.use_strict_mode = 1Lassen, das empfiehlt PHP für jede Website
pm.max_requests = 1Auf den alten Wert zurücksetzen, sonst wird PHP langsam
memory_limit = -1Wieder ein festes Limit setzen
Seite offline oder nur lesbarWieder 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.

Schriftliche Ersteinschätzung, ohne Verkaufsanruf

Kein Serverzugang oder keine Zeit? Wir spielen das Update ein.

Wir aktualisieren PHP auf Ihrem Server, starten alle Dienste neu, prüfen den laufenden Stand und nehmen Übergangsmaßnahmen sauber zurück. 95 € netto pro Stunde im 15-Minuten-Takt, auch im Notfall.

Antwort innerhalb von 24 Stunden an Werktagen · +43 699 1919 5789