Mittwoch, 22. August 2012


Topthema

Donnerstag, 6. Oktober 2005 | Topthema

About Security #26: Gefahren für Webanwendungen

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

In dieser Folge von About Security lernen Sie einige weitere Schwachstellen in Webanwendungen kennen. Wie bei den bisher vorgestellten Schwachstellen geht die Gefahr auch dabei von gar nicht oder nicht ausreichend geprüften Benutzereingaben aus.

Formulare zum Senden einer E-Mail

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

Werden Benutzereingaben Bestandteil von E-Mail-Headern, z.B. From: oder To:, können darüber weitere Empfänger eingeschleust werden: beim To:-Header durch einfaches Anfügen, beim From:-Header durch Einschleusen einer To:-, Cc:- oder Bcc:-Zeile. Wie beim Protokoll HTTP wird auch in E-Mails das Ende einer Header-Zeile mit CRLF gekennzeichnet (RFC 822). Daher darf CRLF nicht Bestandteil eines Header-Werts sein. Es gibt jedoch eine Ausnahme: Um lange Zeilen umbrechen zu können, wird CRLF, gefolgt von einem Leerzeichen oder einem Tabulator, wie das Leerzeichen beziehungsweise der Tabulator behandelt. Da in den meisten Formularen für E-Mail-Adressen nur eine Zeile vorgesehen ist, kann dieser Spezialfall normalerweise unberücksichtigt bleiben und alles ab einem CRLF aus der Eingabe gelöscht werden. Falls der Standard exakt eingehalten werden soll, können die Eingaben entsprechend den Vorgaben in RFC822 ausgewertet werden, sodass nur zulässige Header-Zeilen akzeptiert werden.

Aufruf von Shell-Befehlen

Benutzereingaben, die direkt als Parameter für Shell-Befehle verwendet werden, können zur Ausführung weiterer Befehle ausgenutzt werden. Daher ist es keine gute Idee, Befehle wie z.B. ping oder traceroute über eine Weboberfläche zugänglich zu machen und die Parameter direkt zu übergeben. Ein Angreifer kann beispielsweise unter Unix-artigen Betriebssystemen beliebige weitere Befehle hinter einem ";" anfügen. Entweder müssen alle gefährlichen Zeichen aus der Eingabe ausgefiltert werden oder es dürfen nur zulässige Zeichen akzeptiert werden. Wie schon bei der Verhinderung von Cross-Site Scripting und SQL Injection ist es meist einfacher und sicherer, mit einer Positivliste zu arbeiten.

Wechsel des aktuellen Benutzers
About Security: Die komplette Serie

Wird der aktuelle Benutzer ausschließlich anhand einer Benutzerkennung in dem URL erkannt, kann ein Benutzer durch Manipulation des Parameters die Identität eines anderen Benutzers annehmen. Ebenso verhält es sich bei einer Übertragung als Cookie oder POST-Parameter, es ist lediglich etwas mehr Aufwand nötig. Ein weiterer Nachteil dieser Methoden: Ein einfaches erneutes Laden der entsprechenden Seite reicht in der Regel aus, um den Status des jeweiligen Benutzers zu erlangen. Daher sollte die Identifikation der Benutzer immer auf mehreren Faktoren aufbauen. Nur weil ein Benutzer sich ordnungsgemäß angemeldet hat, bedeutet das nicht, dass die nächste Anfrage vom selben Webbrowser auch vom selben Benutzer stammt. Ein typisches Szenario ist ein Webbrowser in einem Internet-Cafe: Ein Benutzer kann die History-Funktion des Browsers benutzen, um vom vorherigen Benutzer besuchte Seiten anzusteuern. Werden dabei auch Authentifizierungsdaten übertragen, ist der neue Benutzer danach auf dem Webserver als der vorherige Benutzer angemeldet.

Manipulation von Onlinebestellungen

Werden in einem Webshop Benutzereingaben ohne weitere Prüfung zur Erstellung von Rechnungen verwendet, kann durch die Manipulation von zum Beispiel Preisen, Rabatten oder Versandkosten der Rechnungsbetrag gesenkt werden. Verläuft die gesamte Rechnungsstellung automatisiert, fällt eine derartige Manipulation unter Umständen überhaupt nicht auf. Entsprechende Daten dürfen daher nie aus den Benutzereingaben übernommen werden, sondern müssen auf dem Server der Datenbank entnommen und/oder dort berechnet werden.

Gefährliche Weiterleitungen

Skripte, die je nach übergebenem Parameter zu anderen lokalen Adressen weiterleiten, können beispielsweise für Phishing-Angriffe ausgenutzt werden. Das Verfahren wird oft verwendet, um nach der erfolgreichen Anmeldung auf einer Login-Seite direkt zu einer anderen lokalen Seite zu springen. Dabei ist das Ziel Bestandteil des URL, zum Beispiel:

https://login.sichere-seite.example/Pfad/login.cgi?Ziel=
http%3a%2f%2fwww%2esichere-seite%2eexample%2fziel.html

Nach der erfolgreichen Anmeldung wird der Benutzer auf die Seite

http://www.sichere-seite.example/ziel.html

weitergeleitet. Wird der Parameter für das Ziel nicht ausreichend geprüft, kann eine Seite auf dem Webserver des Angreifers als Ziel angegeben und der Benutzer getäuscht werden. Dabei werden beim Aufruf der eingeschleusten Seite auch alle Parameter, die vom Skript login.cgi weitergegeben werden, an den Server des Angreifers übermittelt. Die einfachste Methode zur Verhinderung derartiger Angriffe besteht darin, wirklich nur zu lokalen Seiten weiterzuleiten. Die Angabe von Protokoll und Server ist dann überflüssig, da sich das Protokoll aus dem Kontext ergibt und als Server sowieso nur der lokale zulässig ist.

Mit dieser bei weitem nicht vollständigen Aufzählung möglicher Schwachstellen wird der Themenkomplex "Sichere Webanwendungen" vorerst abgeschlossen. Ab About Security #127 geht es erneut um die Sicherheit von Webanwendungen. In der nächsten Folge lernen Sie einige Gefahren für Webserver kennen.

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]
  • Beginning Apache Struts  [27.10.2006]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,572,.html]
  • Hardening Apache  [11.10.2004]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,306,.html]
  • Prefactoring  [29.06.2006]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,534,.html]
  • Zend Framework  [06.05.2008]
    [http://entwickler.de/zonen/portale/psecom,id,102,buch,734,.html]