
Technischer Bericht und Proof-of-Concept für CVE-2023-46474, eine Remote-Code-Ausführung-Schwachstelle in PMB <=7.5.3 über uneingeschränkten Datei-Upload, einschließlich Reproduktionsschritten und Abhilfeanleitung.
CVE-2023-46474
| CVSS v3.1 Vector | CVSS v3.1 Score |
|---|---|
| AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H | 9.1 |
Entdeckt im Rahmen eines Penetrationstests von Marcus Reynaud von Devensys Cybersecurity
Das Skript pmb/admin/convert/start_import.php ist anfällig für eine Schwachstelle vom Typ , wodurch eine beliebige Codeausführung auf dem Server ermöglicht wird.
Unrestricted File Upload
Der Angreifer muss zuvor administrativen Zugriff auf die Plattform erlangen, um diese Funktion nutzen zu können.
Das PHP-Skript prüft die Dateierweiterung der vom Benutzer hochgeladenen Datei nicht und speichert sie in einem für den Webserver zugänglichen Verzeichnis, wobei die Erweiterung beibehalten wird. Dadurch ist es möglich, ein PHP-Skript hochzuladen und es anschließend auszuführen, indem man den Speicherort aufruft, an dem es hochgeladen wurde.
Dieses Verhalten lässt sich wie folgt reproduzieren:
Man sendet eine Datei mit der Endung .php, die den Code enthält, den man auf dem System ausführen möchte. Hier führen wir den Systembefehl id aus.

Durch Beobachten der Antwort können wir den Dateinamen abrufen, so wie er gerade auf dem Server geschrieben wurde.

Um unseren Code auszuführen, genügt es, /pmb/temp/[dateiname].php mit einem Browser aufzurufen.

Das Ergebnis des Befehls wird vom Server zurückgegeben.
Die Ursache dieser Schwachstelle ist das Fehlen einer Kontrolle der Datei, bevor sie auf die Festplatte geschrieben wird:

Um diese Schwachstelle zu beheben, muss eine Kontrolle der Dateierweiterungen für die von Benutzern hochgeladenen Dateien implementiert werden.
Wir empfehlen die Verwendung eines Whitelist-Systems, das nur bestimmte Dateierweiterungen zulässt.
Man kann die Datei auch ohne Angabe der Erweiterung auf die Festplatte schreiben (da es sich um eine temporäre Speicherung handelt).
Es ist außerdem möglich, die Datei in ein Verzeichnis außerhalb des Zugriffsbereichs des Webservers zu schreiben, wodurch die Datei im Internet unzugänglich wäre und der Code nicht ausgeführt werden könnte.
Die Versionen 7.5.4 und höher sind nicht anfällig, das Skript wurde vollständig neu geschrieben.