PHP: Command-Injection-Schwachstelle auf Windows etndeckt
Eine schwerwiegende Sicherheitslücke CVE-2024-1874 wurde in der Funktion proc_open unter Windows festgestellt, die eine Command-Injection auch bei aktivierter bypass_shell-Option ermöglicht. Die Schwachstelle wurde mit einem kritischen CVSS-Score von 9.4 bewertet.
Die betroffenen Versionen vor den Updates sind PHP 8.1.27, 8.2.17 und 8.3.5. Korrigierte Versionen, die das Problem adressieren, umfassen PHP 8.1.28, 8.2.18 und 8.3.6.
Die proc_open-Funktion ermöglicht es, externe Befehle auszuführen, die über ihre Argumente übergeben werden. Seit PHP 7.4.0 kann der Befehl als Array von Kommando-Parametern übergeben werden, wobei der Prozess direkt geöffnet wird (ohne Shell-Durchlauf), und PHP kümmert sich um das notwendige Escaping der Argumente. Die bypass_shell-Option soll auf Windows die cmd.exe-Shell umgehen.
Allerdings wird bei der Ausführung von .bat oder .cmd Dateien trotz aktivierter bypass_shell-Option die cmd.exe implizit durch CreateProcess aufgerufen, wodurch Befehlszeilenargumente in cmd.exe verarbeitet werden. Dies widerspricht der Dokumentation, die angibt, dass keine Shell gestartet wird. Da die Befehlsaufforderung \ nicht als Escape-Zeichen erkennt, können über manipulierte Argumente unerwartete Befehle ausgeführt werden, wie zum Beispiel durch den Parameter \"&calc.exe" der Taschenrechner gestartet wird.
Ein Proof-of-Concept zeigt, dass trotz der bypass_shell-Einstellung beispielsweise notepad.exe ausgeführt wird, wenn man entsprechend präparierte PHP-Skripte ausführt.
Diese Schwachstelle ermöglicht das Ausführen beliebiger Befehle, wenn entsprechende Befehlszeilenargumente an .bat oder .cmd Dateien über proc_open übergeben werden. Nutzer sind dringend aufgefordert, die bereitgestellten Updates zu installieren, um sich vor möglichen Angriffen zu schützen.