Das Neos-Team warnt vor einer kritischen Sicherheitslücke in Flow und Neos, die es Angreifern unter bestimmten Bedingungen ermöglicht, beliebige Dateien auf den Server zu laden und potentiell hochgeladenen Code auszuführen.
Sie betrifft alle Flow-Versionen der letzten Jahre und damit auch alle Neos-Versionen, die auf einer verwundbaren Flow-Version aufsetzen.
Durch Updates auf eine neuere Version lässt sich die Lücke schließen. Neos- und Flow-Projekte, die auf Flownative Beach gehostet werden, waren auf Grund des Sicherheitskonzepts von Beach zu keiner Zeit gefährdet. Neos- und Flow-Projekte sollten aber zeitnah upgegradet werden.
Worum geht es?
In Flow-Anwendungen werden Daten aus dem Web-Request in Argumente für den aufgerufenen Code transformiert. Ist nun ein solches Argument vom Typ PersistentResource, so können im Request Dateiname und Inhalt mitgeschickt werden.
In den meisten Fällen ist so etwas nur möglich, wenn der Benutzer eingeloggt ist. Und Flow bringt für solche Uploads eine Liste verbotener Datei-Endungen mit.
Nun fiel auf: Wird ein solches Argument mitgeschickt, dabei aber ein bestimmter Fehler in der Anfrage provoziert, so bricht die Verarbeitung ab – lässt aber den Upload öffentlich zugänglich im Dateisystem liegen.
Dies kann nun schwerwiegende Folgen haben, falls der Server eine solche Datei als Skript ausführt, wenn sie abgerufen wird.
Warum Beach nicht betroffen ist
In Beach werden solche Uploads nicht in das lokale Dateisystem geschrieben, sondern in Cloud-Storage abgelegt. Durch die Sicherheitslücke ist es auch in Beach-Projekten potentiell möglich, unberechtigte Uploads durchzuführen.
Allerdings führt der PHP-Interpreter in Beach solche Dateien niemals aus, Anfragen an solche Ressourcen werden direkt aus der Cloud-Storage durchgereicht ohne jemals an PHP vorbeizukommen. Und andere Skript-Sprachen werden in Beach ohnehin nicht verarbeitet.
Was ihr tun solltet
Eure Instanzen sind über die Lücke nicht angreifbar. Wir haben durch diesen Angriffsvektor aber weitere Ideen bekommen, wie wir Beach für weitere Szenarien noch stärker härten können. Wir informieren euch über eventuelle Änderungen.
Aber auch in Beach ist durch den Fehler in Flow aber der Upload beliebiger Dateien möglich. Ein Update auf die heute veröffentlichten Versionen ist daher auch für Beach-Nutzer sehr wichtig.
Wenn ihr Flow und Neos auch außerhalb von Beach einsetzt, zum Beispiel lokal, auf anderen Servern oder in Docker-Images, prüft bitte, ob die Lücke dort ausnutzbar ist. Wir empfehlen euch außerdem, auch dort zeitnah auf die neuen Versionen zu aktualisieren.
Unser öffentliches Image für nginx auf Docker Hub haben wir aktualisiert, um eine Ausführung von PHP-Dateien aus Uploads zu verhindern, auch wenn das Image nicht in Beach läuft.