PHP2Shell: Sicherheit vor Verfügbarkeit – so haben wir MEIDOK in weniger als 24 Stunden abgesichert
Zwei kritische PHP-Lücken erlaubten Angriffe ohne Anmeldung. Wir haben MEIDOK vorsorglich vom Netz genommen, jede Instanz einzeln gepatcht und geprüft. Seit dem 22. Oktober läuft alles wieder.
Was hinter PHP2Shell steckt
PHP ist die Grundlage eines großen Teils des Internets – und auch der MEIDOK-Serverlandschaft. Unter dem Namen PHP2Shell wurden im Oktober 2026 zwei Schwachstellen im PHP-Kern bekannt (CVE-2026-109618 und CVE-2026-109619), beide mit 9,2 von 10 Punkten auf der CVSS-Skala bewertet. Das Brisante: Ein Angriff braucht weder Zugangsdaten noch eine Lücke in der Anwendung selbst. Er greift, bevor der eigentliche Programmcode überhaupt läuft.
Die Kennungen waren bereits am Vortag des Patches öffentlich geworden, entsprechend groß war der Zeitdruck für Betreiber weltweit.
Sicherheit geht vor Verfügbarkeit
Für uns war die Abwägung schnell getroffen. MEIDOK verarbeitet Einsatz- und Gesundheitsdaten von Hilfsorganisationen, und genau diese Daten verdienen den höchsten Schutz. Am späten Nachmittag des 21. Oktober haben wir deshalb alle MEIDOK-Systeme vorsorglich vom öffentlichen Internet getrennt. App, Webportal und Schnittstellen waren von außen nicht mehr erreichbar, die Daten blieben unverändert auf den Servern.
Die Dokumentation im Einsatz lief trotzdem weiter: Die MEIDOK-App arbeitet offline und hat neue Protokolle lokal gespeichert, bis die Verbindung wieder stand. Für unsere Administration blieb ein abgesicherter Zugang offen, über den wir patchen und prüfen konnten.
Transparenz war uns dabei genauso wichtig wie Tempo. Die Beta-Tester haben wir am Abend der Abschaltung informiert, am nächsten Vormittag über den Zwischenstand und am Nachmittag des 22. Oktober über die Wiederinbetriebnahme.
Instanz für Instanz: unser Vorgehen
Die Umsetzung folgte einem klaren Fahrplan. Zuerst haben wir jede Instanz ausschließlich lesend untersucht: Welche PHP-Version läuft, und gibt es in Logs und Dateien Spuren eines Angriffs? Danach kamen die zentralen Dienste an die Reihe, jeweils mit neu gebautem PHP 8.3.36.
Für die Instanzen der Organisationen haben wir ein gepatchtes Image mit identischem Anwendungscode erzeugt. Getauscht wurde also nur die PHP-Laufzeit, an den Funktionen von MEIDOK hat sich nichts geändert.
Dieses Image lief zuerst auf einer einzelnen Instanz als Testlauf. Erst als dort alles stimmte, folgten die übrigen Instanzen nacheinander, jede mit eigener Kontrolle von Anmeldung, Modul-Abgleich und Dateirechten. Für jeden Schritt lag ein Rückweg bereit, und die Regel war eindeutig: Tritt ein Fehler auf, wird angehalten statt weitergemacht. Diese Regel mussten wir kein einziges Mal anwenden.
Bevor die Firewall wieder aufging, hat unsere zentrale Schnittstelle bestätigt, dass sich alle 16 Instanzen mit der erwarteten Version zurückmelden. Am 22. Oktober gegen 14:15 Uhr war MEIDOK wieder erreichbar, ein App-Update war nicht nötig. Bei der Prüfung haben wir keine Hinweise auf einen unbefugten Zugriff gefunden.
Die Abfolge im Überblick
- 20.10.: Die CVE-Kennungen der Lücken werden vor dem Patch öffentlich.
- 21.10., 16:00 Uhr: Das PHP-Projekt veröffentlicht die Notfall-Updates 8.5.12, 8.4.27, 8.3.36 und 8.2.35.
- 21.10., später Nachmittag: MEIDOK geht vorsorglich vom Netz.
- 21.10., ca. 19:00 Uhr: Information an die Beta-Tester über die Abschaltung.
- Im Anschluss: Lesende Prüfung aller Instanzen auf PHP-Stand und Angriffsspuren.
- 22.10., ca. 11:00 Uhr: Zwischenstand an die Beta-Tester.
- 22.10.: Zentrale Dienste auf PHP 8.3.36, Testlauf auf einer Instanz, dann alle weiteren Instanzen nacheinander.
- 22.10., ca. 14:15 Uhr: Alle Instanzen melden sich mit der erwarteten Version, MEIDOK ist wieder erreichbar.
- 22.10., ca. 15:00 Uhr: Information an die Beta-Tester über die Wiederinbetriebnahme.
Warum das so schnell ging
Dass das in weniger als 24 Stunden möglich war, liegt auch an der Architektur. Jede Organisation hat bei MEIDOK ihren eigenen Server mit eigener Datenbank. Das trennt die Daten im Alltag sauber voneinander – und erlaubt im Ernstfall, jede Instanz einzeln zu patchen, zu prüfen und freizugeben.
Dazu kommt die containerbasierte Auslieferung: Die PHP-Laufzeit lässt sich austauschen, ohne den Anwendungscode anzufassen.
Wie es weitergeht
Abgeschlossen ist das Thema für uns damit nicht. Den Vorfall nutzen wir, um Infrastruktur und Build-Prozesse weiter zu härten, unter anderem damit gepatchte Versionen bei künftigen Updates automatisch erhalten bleiben.
Für die Geduld während der Abschaltung bedanken wir uns bei allen Beta-Testern. Wem seither etwas ungewöhnlich vorkommt, der meldet sich bitte über das MEIDOK Support-Portal.