Schwachstelle in PHPs Shell-Funktionen unter Windows

Fehler in den PHP-Funktionen escapeshellarg() und escapeshellcmd() unter Windows ermöglichen die Übergabe zusätzlicher Befehle an die Shell.

In Pocket speichern vorlesen Druckansicht 125 Kommentare lesen
Lesezeit: 1 Min.
Von
  • Daniel Bachfeld

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)