Details eines neuen Angriffs auf Websites, die das Frontend-Backend-Modell nutzen, z. B. solche, die ĂŒber Content Delivery Networks, Lastenausgleicher oder Proxys arbeiten. Der Angriff ermöglicht es, durch das Senden bestimmter Anfragen in den Inhalt anderer Anfragen einzugreifen, die im selben Stream zwischen Frontend und Backend verarbeitet werden. Die vorgeschlagene Methode wurde erfolgreich zur DurchfĂŒhrung eines Angriffs eingesetzt, der es erlaubt, die Authentifizierungsparameter von Benutzern des Dienstes PayPal abzufangen, der den Forschern im Rahmen eines Programms zur Meldung unbehobener SicherheitsanfĂ€lligkeiten etwa 40.000 Dollar ausgezahlt hat. Der Angriff ist auch fĂŒr Websites anwendbar, die das Content Delivery Network Akamai verwenden.
Das Problem besteht darin, dass Frontends und Backends oft unterschiedliche UnterstĂŒtzung fĂŒr das HTTP-Protokoll bieten, wĂ€hrend sie gleichzeitig die Anfragen verschiedener Benutzer in einen gemeinsamen Kanal kapseln. Es wird eine langanhaltende TCP-Verbindung zwischen dem anfragenden Frontend und dem verarbeitenden Backend eingerichtet, ĂŒber die die Benutzeranfragen in einer Kette, nacheinander, mit Hilfe des HTTP-Protokolls ĂŒbertragen werden. Zur Trennung der Anfragen können die Header âContent-Lengthâ (definiert die GesamtgröĂe der Daten in der Anfrage) und ââ (erlaubt das Ăbertragen von Daten in Teilen, indem Blöcke unterschiedlicher GröĂe im Format â{GröĂe}\r\n{Block}\r\n{GröĂe}\r\n{Block}\r\n0â angegeben werden).
Das Problem tritt auf, wenn das Frontend nur âContent-Lengthâ unterstĂŒtzt, aber âTransfer-Encoding: chunkedâ ignoriert (zum Beispiel handelte es sich so beim CDN Akamai) oder umgekehrt. Im Falle der UnterstĂŒtzung von âTransfer-Encoding: chunkedâ auf beiden Seiten können die Besonderheiten der Implementierungen der HTTP-Header-Parser fĂŒr den Angriff genutzt werden (z. B. wenn das Frontend Zeilen wie âTransfer-Encoding: xchunkedâ, âTransfer-Encoding: chunkedâ, âTransfer-Encoding:[tab]chunkedâ, âX: X[\n]Transfer-Encoding: chunkedâ, âTransfer-Encoding[\n]: chunkedâ oder âTransfer-Encoding : chunkedâ ignoriert und das Backend diese erfolgreich verarbeitet).
In diesem Fall kann der Angreifer eine Anfrage senden, in der sowohl die Header "Content-Length" als auch "Transfer-Encoding: chunked" angegeben sind, jedoch die GröĂe in "Content-Length" nicht der GröĂe der chunked-Kette entspricht, die kleiner ist als der tatsĂ€chliche Wert. Wenn das Frontend die Anfrage gemÀà "Content-Length" verarbeitet und umleitet, das Backend jedoch auf den endgĂŒltigen Block basierend auf "Transfer-Encoding: chunked" wartet, wird das Ende der Daten basierend auf "Transfer-Encoding: chunked" frĂŒher bestimmt, und der verbleibende Rest der Anfrage des Angreifers wird am Anfang der nĂ€chsten Anfrage erscheinen, d.h. der Angreifer erhĂ€lt die Möglichkeit, beliebige Daten an den Anfang einer fremden Anfrage anzuhĂ€ngen, die anschlieĂend gesendet wird.

Um das Problem in der verwendeten Frontend-Backend-Bindung zu bestimmen, kann durch das Frontend eine Anfrage wie folgt gesendet werden:
POST /about HTTP/1.1
Host: example.com
Transfer-Encoding: chunked
Content-Length: 4
1
Z
Q
Das Problem besteht, wenn das Backend die Anfrage nicht sofort verarbeitet und auf den Empfang des finalen nullterminierenden Blocks der chunked-Daten wartet. FĂŒr eine umfassendere ĂberprĂŒfung ist ein spezielles Tool erforderlich, das auch mögliche Methoden testet, um den Header "Transfer-Encoding: chunked" vor dem Frontend zu verbergen.
Die DurchfĂŒhrung eines echten Angriffs hĂ€ngt von den Möglichkeiten der angegriffenen Website ab. Zum Beispiel konnte beim Angriff auf die Webanwendung Trello der Anfang der Anfrage (Daten wie "PUT /1/members/1234⊠x=x&csrf=1234&username=testzzz&bio=cake" eingeben) geĂ€ndert werden, und eine Nachricht gesendet werden, die die originale Anfrage eines anderen Benutzers und die darin enthaltenen Authentifizierungscookies einsetzt. FĂŒr den Angriff auf saas-app.com war es möglich, JavaScript-Code in die Antwort einzufĂŒgen, indem er in einen der Anfrageparameter eingefĂŒgt wurde. FĂŒr den Angriff auf redhat.com wurde ein interner Handler verwendet, um auf die Seite des Angreifers umzuleiten (eine Anfrage wie "POST /search?dest=../assets/idx?redir=//redhat.com@evil.net/ HTTP/1.1" wurde eingefĂŒgt).
Die Anwendung der Methode fĂŒr Content Delivery Networks ermöglichte es, die angeforderte Website einfach durch das Ersetzen des "Host:"-Headers zu Ă€ndern. Der Angriff ist auch anwendbar, um Inhalte in Caching-Systemen zu vergiften und zwischengespeicherte vertrauliche Daten zu extrahieren. Der Höhepunkt der Anwendung dieser Methode war ein Angriff auf PayPal, der es ermöglichte, Passwörter abzufangen, die von Benutzern bei der Authentifizierung gesendet wurden (es wurde eine Ănderung der iframe-Anfrage vorgenommen, um JavaScript im Kontext der Seite paypal.com/us/gifts auszufĂŒhren, fĂŒr die keine CSP (Content Security Policy) galt).
Interessanterweise gab es im Jahr 2005 eine Ă€hnliche Technik zur Ănderung von Anfragen, die es ermöglichte, Daten in Caching-Proxys (Tomcat, squid, mod_proxy) zu Ă€ndern oder Firewall-BeschrĂ€nkungen zu umgehen, indem mehrere "GET"- oder "POST"-Anfragen innerhalb eines HTTP-Sitzung angegeben wurden.
Quelle: opennet.ru
