Menü

Schwachstelle in PHPs Shell-Funktionen unter Windows

vorlesen Drucken Kommentare lesen 125 Beiträge

In der kürzlich veröffentlichten PHP-Version 4.3.7 sind zwei Fehler beseitigt, mit der es Angreifern möglich ist eigene Befehle auf verwundbaren Systemen auszuführen. Unter PHP sollen die Funktionen escapeshellarg() und escapeshellcmd() sicherstellen, dass nur gewollte Kommandos an eine Shell übergeben werden -- angehängte oder eingeschleuste zusätzliche Befehle filtern die Funktionen aus. Allerdings sind diese in der Windows-Version von PHP fehlerhaft, sodass die Filter bei einigen besonderen Zeichen (% | >) versagen. Der Entdecker der Sicherheitslücke, Daniel Fabian von sec-consult, hat in seinem Advisory ein Beispiel veröffentlicht, das das Problem veranschaulicht:

$user = escapeshellarg($_GET['user']);
$pwd = escapeshellarg($_GET['pwd']);
system("htpasswd -nb $user $pwd", $return);

htpasswd ist ein Tool zum Passwortschutz von Webseiten unter Apache für Windows. Ruft man das Tool zusammen mit den vorher in einem Formular eingegebenen Argumenten auf, so erhält der Anwender Zugriff. Gibt ein Angreifer allerdings stattdessen " || dir || ein, so reicht PHP zusätzlich den Befehl dir an die Shell weiter, die es im Kontext des Webservers ausführt. Neben system() gibt es weitere Funktionen unter PHP, die Benutzereingaben an die Shell weiterleiten können. Ein erfolgreicher Angriff setzt aber ein PHP-Skript voraus, das die fehlerhaften Funktionen enthält. Fabian bestätigt die Lücke für PHP 4.3.3 und 4.3.5.

Siehe dazu auch: (dab)