Behebungsbericht
Überprüfung der PHP2Shell-Behebung
Gesamtzustand
GutHandlungsbedarfGefährdet
Vorher 48
Vorher 31
Vorher 58
Vorher 38
Vorher 92
Die Werte fassen die Prüfungen dieses Berichts zusammen, gewichtet mit 40 % Sicherheit, 25 % Datensicherung, 20 % Updates und 15 % Leistung. Sie beschreiben das Risiko zum erfassten Zeitpunkt und sind keine Zertifizierung.
1Zusammenfassung
Auf dem Produktiv-Webserver lief PHP 8.3.35, das von beiden PHP2Shell-Schwachstellen betroffen ist. Im vereinbarten Wartungsfenster haben wir PHP auf 8.3.36 aktualisiert, alle PHP-FPM-Worker neu gestartet und bestätigt, dass die Anwendung nun über die gepatchte Laufzeitumgebung ausgeliefert wird. Alle vereinbarten Funktionstests waren erfolgreich, neue Fehler wurden nicht protokolliert.
Bei der Prüfung wurden außerdem ein PHP-7.4-Pool ohne Herstellerunterstützung (End of Life) außerhalb des vereinbarten Umfangs, ein ausstehender Kernel-Neustart und Lücken in der Datensicherung festgestellt. Sie beeinträchtigen die PHP2Shell-Behebung nicht, sollten aber behoben werden. Jeder Punkt ist in den Empfehlungen mit einer Priorität aufgeführt.
- PHP2Shell-Status
- Gepatcht
- Funktionstests
- 8 von 8 bestanden
- Ausfallzeit
- Keine festgestellt
- Folgemaßnahmen
- 6, davon 2 mit hoher Priorität
2Umfang und Vorgehen
Im Umfang
- Ein Produktivserver,
web-01 - PHP-FPM-Pool
wwwfür die Shop-Anwendung - PHP CLI für geplante Aufgaben
- Vereinbarte Tests für Anmeldung, Suche, Bestellvorgang, Formulare, Uploads und geplante Aufgaben
Nicht im Umfang
- PHP-7.4-Pool
legacy(gemeldet, nicht geändert) - Interna des Datenbankservers und Anwendungscode
- Untersuchung auf Malware oder Kompromittierung
- Staging- und Entwicklungsumgebungen
Vorgehen
Rein lesende Bestandsaufnahme per SSH mit einem zeitlich begrenzten Schlüssel; Paketherkunft abgeglichen mit dem Anbieter-Repository und dem PHP-Sicherheitshinweis; ein auf Bootfähigkeit geprüfter Snapshot vor jeder Änderung; Update über den Paketmanager des Systems; Neustart der Worker; Funktionstests mit den Testkonten des Kunden. Der temporäre Zugang wurde um 22:31 Uhr entfernt.
3Serverinventar
Erfasst zu Beginn des Arbeitsfensters, vor jeder Änderung.
| Hostname | web-01.example-retail.test |
|---|---|
| Rolle | Produktiver Web- und Anwendungsserver |
| Hosting | Virtueller privater Server, 4 vCPU, 8 GB Arbeitsspeicher |
| Betriebssystem | Ubuntu 24.04.3 LTS |
| Laufender Kernel | 6.8.0-85-generic Neuerer Kernel installiert, Neustart ausstehend |
| Betriebszeit | 142 Tage |
| Datenträger | 80-GB-Systemvolume, 61 % belegt |
| Webserver | nginx 1.24.0 |
| PHP-FPM-Pools | www (PHP 8.3), legacy (PHP 7.4) |
| Datenbank | MySQL 8.0.43 auf einem separaten verwalteten Host |
| PHP-Paketquelle | ppa:ondrej/php |
| Automatische Sicherheitsupdates | Deaktiviert |
| Zeitsynchronisation | Aktiv |
| Monitoring | Nur Verfügbarkeitsprüfung; keine Warnungen zu Ressourcen oder Anwendungsfehlern |
4PHP-Laufzeitumgebungen
Alle PHP-Binärdateien und -Pools auf dem Server wurden erfasst, auch solche außerhalb des vereinbarten Umfangs.
| Laufzeitumgebung | Dient für | Vorher | Nachher | Status |
|---|---|---|---|---|
php8.3-fpm / www | Shop-Anwendung | 8.3.35 | 8.3.36 | Gepatcht |
php8.3-cli | Geplante Aufgaben | 8.3.35 | 8.3.36 | Gepatcht |
php7.4-fpm / legacy | Archivierter Shop unter /old-shop | 7.4.33 | 7.4.33 | Handlungsbedarf |
PHP 7.4 hat seit November 2022 das Ende seiner Lebensdauer erreicht und erhält keine Sicherheitskorrekturen mehr. Eine Angreifbarkeit des Legacy-Pools ließ sich allein anhand der Versionsangaben nicht ausschließen; siehe Empfehlung R1.
Konfigurationsbeobachtungen
expose_phpist deaktiviert unddisplay_errorsist in der Produktivumgebung ausgeschaltet.- OPcache ist mit 128 MB Speicher aktiviert, was für die Anwendung ausreicht.
session.upload_progress.enabledist aktiviert, wird von der Anwendung aber nicht genutzt.- Jeder Pool läuft unter einem eigenen Systembenutzer mit separatem Socket.
5Schwachstellenstatus
| Sicherheitshinweis | Betroffene Laufzeitumgebung | Vorher | Nachher | Nachweis |
|---|---|---|---|---|
CVE-2026-109618 | php8.3 | Betroffen | Behoben | Paket-Changelog und laufende Version |
CVE-2026-109619 | php8.3 | Betroffen | Behoben | Paket-Changelog und laufende Version |
CVE-2026-109618, CVE-2026-109619 | php7.4 | Nicht bewertet | Nicht bewertet | Außerhalb des vereinbarten Umfangs |
Ein vom Anbieter zurückportierter Patch kann eine andere Versionsnummer haben. Der tatsächliche Bericht stützt sich auf den maßgeblichen Sicherheitshinweis des Anbieters. Eine erfolgreiche Patchprüfung belegt nicht, dass eine Umgebung nie kompromittiert wurde.
6Datensicherung und Wiederherstellung
Die Datensicherungen wurden vor jeder Änderung geprüft. Das Update durfte erst beginnen, nachdem ein verifizierter Snapshot vorlag.
| Sicherung | Zeitplan | Letzter Erfolg | Aufbewahrung | Speicherort | Wiederherstellungstest |
|---|---|---|---|---|---|
| Datenbank-Dump | Täglich, 03:15 | 2026-10-22 03:16 | 14 Tage | Extern, verschlüsselt | Nie |
| Anwendungsdateien | Täglich, 03:40 | 2026-10-22 03:52 | 14 Tage | Gleicher Anbieter, separates Volume | Nie |
| Server-Snapshot vor der Änderung | Für diese Arbeiten erstellt | 2026-10-22 21:04 | 7 Tage | Hostinganbieter | Bootfähigkeit geprüft |
Befunde
- Die Dateisicherung umfasst nicht das Verzeichnis
/var/www/shop/uploads, in dem rund 6,2 GB an Kundendokumenten gespeichert sind. - Für keine der geplanten Sicherungen ist ein Wiederherstellungstest dokumentiert. Auf eine Sicherung, die nie wiederhergestellt wurde, ist im Ernstfall kein Verlass.
- Datenbank-Dumps werden verschlüsselt bei einem anderen Anbieter gespeichert und sind damit auch bei Verlust des Servers oder des Hostingkontos geschützt.
Rücksetzplan für diese Änderung
Die vorherigen PHP-Pakete aus dem lokalen Paket-Cache neu installieren und PHP-FPM neu laden oder den Snapshot vor der Änderung starten. Geschätzte Wiederherstellungszeit: 15 Minuten. Eine Rücksetzung war nicht erforderlich.
7Änderungsprotokoll
| Zeit | Maßnahme | Ergebnis |
|---|---|---|
21:00 | Zugang eröffnet; Ausgangsstand von Versionen, Diensten und Antwortzeiten erfasst | Abgeschlossen |
21:04 | Server-Snapshot vor der Änderung erstellt und auf Bootfähigkeit geprüft | Abgeschlossen |
21:12 | Funktionstests zum Ausgangsstand durchgeführt | 8 von 8 bestanden |
21:18 | PHP-8.3-Pakete von 8.3.35 auf 8.3.36 aktualisiert | Abgeschlossen |
21:20 | PHP-FPM neu gestartet; keine Worker der alten Version mehr aktiv | Abgeschlossen |
21:24 | Laufende Version über Webserver und CLI bestätigt | Abgeschlossen |
21:31 | Funktionstests nach der Änderung durchgeführt | 8 von 8 bestanden |
21:55 | Fehlerprotokolle und Antwortzeiten 20 Minuten lang überwacht | Keine neuen Fehler |
22:31 | Temporärer Zugangsschlüssel entfernt und Sitzung beendet | Abgeschlossen |
8Prüfung nach der Änderung
| Prüfung | Vorgehen | Ergebnis |
|---|---|---|
| An Webanfragen ausgelieferte PHP-Version | Temporäres Diagnoseskript, nach Gebrauch entfernt | 8.3.36 |
| PHP-FPM-Worker | Prozessliste und Dienststatus | Bestanden |
| Kundenanmeldung | Testkonto des Kunden | Bestanden |
| Administratoranmeldung | Testkonto des Kunden | Bestanden |
| Produktsuche | Drei mit dem Kunden vereinbarte Suchbegriffe | Bestanden |
| Bestellvorgang | Testbestellung im Testmodus des Zahlungsanbieters | Bestanden |
| Kontaktformular | Testeinsendung, Zustellung vom Kunden bestätigt | Bestanden |
| Datei-Upload | Testdokument hoch- und heruntergeladen | Bestanden |
| E-Mail zum Zurücksetzen des Passworts | Testkonto, E-Mail empfangen | Bestanden |
| Geplante Aufgaben | Nächste geplante Ausführung in den Protokollen geprüft | Bestanden |
| Fehlerprotokoll | Je 30 Minuten vor und nach der Änderung verglichen | Keine neuen Fehler |
| Antwortzeit der Startseite | Median aus 20 Anfragen | 182 ms → 176 ms |
9Befunde und Empfehlungen
Nach Priorität geordnet. Keiner dieser Punkte steht der PHP2Shell-Behebung entgegen.
| ID | Priorität | Befund | Empfehlung |
|---|---|---|---|
R1 | Hoch | Der PHP-7.4-Pool hat das Ende seiner Lebensdauer erreicht und ist möglicherweise angreifbar. | Den archivierten Shop außer Betrieb nehmen oder auf authentifizierte Benutzer beschränken. Muss er online bleiben, auf eine unterstützte PHP-Version migrieren. Wird separat angeboten. |
R2 | Hoch | Ein neuerer Kernel ist installiert, aber nicht aktiv; der Server wurde seit 142 Tagen nicht neu gestartet. | Einen Neustart im nächsten Wartungsfenster einplanen und anschließend den laufenden Kernel prüfen. |
R3 | Mittel | 23 Betriebssystem-Updates stehen aus, darunter OpenSSL und nginx. | In einem geplanten Wartungsfenster installieren und automatische Sicherheitsupdates aktivieren. |
R4 | Mittel | Die Sicherungen wurden nie per Wiederherstellung getestet, und die Dateisicherung schließt Kunden-Uploads aus. | Das Upload-Verzeichnis in die Dateisicherung aufnehmen und vierteljährlich einen dokumentierten Wiederherstellungstest durchführen. |
R5 | Niedrig | Die Upload-Fortschrittsverfolgung ist aktiviert, wird aber nicht genutzt. | Zur Verkleinerung der Angriffsfläche session.upload_progress.enabled deaktivieren. |
R6 | Niedrig | Das Monitoring umfasst nur die Verfügbarkeit. | Warnungen für Speicherplatz, PHP-FPM-Auslastung und Anwendungsfehler einrichten. |
10Nachweise und Übergabe
- Kennungen der Umgebungen und vereinbartes Arbeitsfenster
- Paketquelle, vollständige Version und maßgeblicher Sicherheitshinweis des Anbieters
- Verweis auf die Datensicherung, Änderungsprotokoll und Nachweis des Prozessneustarts
- Vereinbarte Funktionstests, Ergebnisse und Einschränkungen
- Vollständiges Befehlsprotokoll und Auszüge aus dem Paket-Changelog
11Einschränkungen
Der Bericht erfasst die vereinbarte Umgebung und die Prüfungen zum dokumentierten Zeitpunkt. Er ist weder eine Sicherheitszertifizierung noch eine Garantie gegen künftige Schwachstellen oder die Feststellung, dass keine frühere Kompromittierung stattgefunden hat. Der Verdacht auf eine Kompromittierung erfordert eine separate Untersuchung.