Detaljerne om det nye angreb på websteder, der bruger frontend-backend-modellen, såsom dem, der fungerer gennem indholdsleveringsnetværk, belastningsaflastere eller proxyer. Angrebet gør det muligt at blandt andet trænge ind i indholdet af andre anmodninger, der behandles i samme strøm mellem frontend og backend. Den foreslåede metode er blevet anvendt med succes til at gennemføre et angreb, der gør det muligt at opfange autentificeringsparametre for brugerne af PayPal, som har betalt forskere omkring 40.000 dollars under sit program for at rapportere om uopdagede sårbarheder. Angrebet kan også anvendes på websteder, der bruger indholdsleveringsnetværket Akamai.
Problemet er, at frontender og backender ofte tilbyder forskellige niveauer af support til HTTP-protokollen, men alligevel indkapsler anmodninger fra forskellige brugere i en fælles kanal. Der oprettes en langvarig TCP-forbindelse mellem den anmodende frontend og den anmodende backend, gennem hvilken brugeranmodninger transmitteres i kæden, én efter én, med adskillelse ved hjælp af HTTP-protokollen. For at adskille anmodninger kan der bruges overskrifterne "Content-Length" (definerer den samlede datastørrelse i anmodningen) og "» (giver mulighed for at overføre data i bidder ved at angive blokke af forskellig størrelse i formatet "{størrelse}\r\n{blok}\r\n{størrelse}\r\n{blok}\r\n0").
Problemet opstår, hvis frontenden kun understøtter "Content-Length", men ignorerer "Transfer-Encoding: chunked" (for eksempel gjorde CDN Akamai dette) eller omvendt. I tilfælde af understøttelse af "Transfer-Encoding: chunked" på begge sider kan angrebet udnytte specifikationer for implementeringen af HTTP-headerparseren (for eksempel når frontenden ignorerer linjer som "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked", "Transfer-Encoding:[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" eller "Transfer-Encoding : chunked", mens backend'en behandler dem korrekt).
I dette tilfælde kan angriberen sende en anmodning, der samtidig angiver overskrifterne "Content-Length" og "Transfer-Encoding: chunked", men størrelsen i "Content-Length" stemmer ikke overens med størrelsen af chunked kæden, som er mindre end den faktiske værdi. Hvis frontend'en behandler og videresender anmodningen i henhold til "Content-Length", mens backend'en forventer afslutningen af blokken baseret på "Transfer-Encoding: chunked", vil slutningen af dataene baseret på "Transfer-Encoding: chunked" blive bestemt tidligere, og den resterende hale af angriberens anmodning vil befinde sig i begyndelsen af den næste anmodning, dvs. angriberen får mulighed for at vedhæfte vilkårlige data til starten af en andens anmodning, der sendes bagefter.

For at identificere problemet i den anvendte frontend-backend kombination kan der via frontend sendes en anmodning af følgende art:
POST /about HTTP/1.1
Host: example.com
Transfer-Encoding: chunked
Content-Length: 4
1
Z
Q
Problemet er til stede, hvis backend'en straks ikke håndterer anmodningen og venter på modtagelsen af den endelige nulbegrænsningsblok af chunked-data. For en mere grundig kontrol en specialiseret værktøj, der også tester mulige metoder til at skjule overskriften "Transfer-Encoding: chunked" fra frontend'en.
Udførelsen af et reelt angreb afhænger af mulighederne for den angrebne hjemmeside, for eksempel ved angreb på webapplikationen Trello kan man ændre starten af anmodningen (indsætte data som "PUT /1/members/1234… x=x&csrf=1234&username=testzzz&bio=cake") og sende en meddelelse, der inkluderer den originale anmodning fra en tredjepart og de angivne autentificering Cookies. For angreb på saas-app.com viste det sig muligt at indsætte JavaScript-kode i svaret ved at indsætte det i en af anmodningens parametre. Ved angreb på redhat.com blev der brugt en intern behandler til at videresende til angriberens side (der blev indsat en anmodning som "POST /search?dest=..\/assets\/idx?redir=\/\/redhat.com@evil.net\/ HTTP/1.1").
Anvendelsen af metoden til indholdsleveringsnetværk gjorde det muligt nemt at erstatte det anmodede websted ved at ændre overskriften "Host:". Angrebet kan også anvendes til at manipulere indholdet af cache-systemer og udtrække cachede fortrolige data. Metodens højdepunkt var angrebet på PayPal, der gør det muligt at opfange de adgangskoder, som brugerne sender under autentificering (der blev foretaget en ændring af iframe-anmodningen for at udføre JavaScript i konteksten af siden paypal.com/us/gifts, hvor CSP (Content Security Policy) ikke blev anvendt).
Det er interessant, at der i 2005 blev brugt en lignende teknik til at ændre anmodninger, som muliggør erstatning af data i cache-delegerede proxyer (Tomcat, squid, mod_proxy) eller omgåelse af firewall-blokeringer ved at angive flere "GET" eller "POST" anmodninger inden for en enkelt HTTP-session.
Kilde: opennet.ru
