Schlupfloch in PHPs open_basedir-Gefängnis

Stefan Esser vom Hardened-PHP-Projekt warnt, dass PHP-Code über symbolische Links Zugriff auf eigentlich gesperrte Bereiche eines Servers erlangen könnte.

In Pocket speichern vorlesen Druckansicht 225 Kommentare lesen
Lesezeit: 1 Min.

Stefan Esser vom Hardened-PHP-Projekt warnt, dass die symlink()-Funktion ein mögliches Schlupfloch darstellt, über das PHP-Code die Beschränkungen von open_basedir überwinden und damit auf eigentlich unzugängliche Dateien zugreifen kann.

Durch PHPs open_basedir-Funktion kann man den Zugriff von PHP-Skripten auf vorkonfigurierte Verzeichnisse beschränken. Anbieter von Shared-Web-Hosting nutzen es beispielsweise, um Dateizugriffe auf die Verzeichnisse anderer Kunden oder des Systems zu verbieten. PHP prüft dann vor jedem Öffnen einer Datei, ob dieser Zugriff erlaubt ist.

Allerdings vergeht zwischen dem Test und der eigentlichen Dateioperation eine gewisse Zeit, während der ein zweites Skript das Ziel ändern kann. Durch trickreiche Konstruktionen mit symbolischen Links und einem PHP-Skript, das einen Link zwischen einer erlaubten und einer verbotenen Datei hin und her schaltet, erzeugt Esser eine so genannte Race Condition. Auch wenn die meisten Zugriffe scheitern, tritt dabei irgendwann eine Situation ein, in der der Test positiv ausfällt, der Zugriff aber bereits auf die eigentlich gesperrte Datei erfolgt. Laut Esser kann man diese Art Ausbruch nur verhindern, indem man beim Einsatz von open_basedir die PHP-Funktion symlink() abschaltet.

Siehe dazu auch: (ju)