Kernen i problemet er, at frontends og backends ofte giver forskellige niveauer af understøttelse af HTTP-protokollen, men samtidig indkapsler anmodninger fra forskellige brugere i en fælles kanal. For at forbinde frontend-modtagelsesanmodningerne og backend-behandlingsanmodningerne etableres en langvarig TCP-forbindelse, hvorigennem brugeranmodninger transmitteres, transmitteret langs kæden efter hinanden, adskilt ved hjælp af HTTP-protokollen. For at adskille anmodninger, overskrifterne "Indhold-Længde" (bestemmer den samlede størrelse af dataene i anmodningen) og "
Problemet opstår, hvis frontenden kun understøtter "Content-Length", men ignorerer "Transfer-Encoding: chunked" (for eksempel gjorde Akamai CDN dette) eller omvendt. Hvis Transfer-Encoding: chunked er understøttet på begge sider, kan implementeringsfunktionerne i HTTP-header-parsere bruges til et angreb (f.eks. 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", og backend behandler dem med succes).
I dette tilfælde kan en angriber sende en anmodning, der indeholder både "Content-Length" og "Transfer-Encoding: chunked" headers, men størrelsen i "Content-Length" svarer ikke til størrelsen af den chunked kæde, hvilket er mindre end den faktiske værdi. Hvis frontenden behandler og videresender anmodningen i henhold til "Content-Length", og backend'en venter på, at blokeringen er fuldført baseret på "Transfer-Encoding: chunked", så vil slutningen af data baseret på "Transfer-Encoding: chunked" bestemmes tidligere, og den resterende del af anmodningen vil angriberen være i begyndelsen af den næste anmodning, dvs. angriberen vil være i stand til at vedhæfte vilkårlige data til begyndelsen af en andens anmodning, der sendes næste gang.
For at bestemme problemet i den brugte frontend-backend-kombination kan du sende en anmodning som denne via frontend:
POST /om HTTP/1.1
Vært: example.com
Overførsels-kodning: chunked
Content-Length: 4
1
Z
Q
Problemet er til stede, hvis backend ikke straks behandler anmodningen og venter på ankomsten af den endelige nulgrænseblok af chunked data. For en mere komplet kontrol
Udførelse af et rigtigt angreb afhænger af det angrebne websteds muligheder, for eksempel, når du angriber Trello-webapplikationen, kan du erstatte begyndelsen af anmodningen (erstat data som "PUT /1/members/1234... x=x&csrf =1234&username=testzzz&bio=cake") og sende en besked, der inkluderer den oprindelige anmodning fra en tredjepartsbruger og den autentificeringscookie, der er angivet i den. For et angreb på saas-app.com viste det sig at være muligt at erstatte JavaScript-kode i svaret ved at erstatte den i en af anmodningsparametrene. Til angrebet på redhat.com blev en intern handler brugt til at omdirigere til angriberens websted (en anmodning på formen "POST /search?dest=../assets/idx?redir=//[e-mail beskyttet]/ HTTP/1.1").
Brug af metoden til indholdsleveringsnetværk gjorde det muligt blot at erstatte det anmodede websted ved at erstatte "Host:"-headeren. Angrebet kan også bruges til at forgifte indholdet af indholdscachesystemer og udtrække cachelagrede fortrolige data. Metodens højdepunkt var organiseringen af et angreb på PayPal, som gjorde det muligt at opsnappe adgangskoder sendt af brugere under godkendelse (iframe-anmodningen blev ændret til at udføre JavaScript i sammenhæng med paypal.com/us/gifts-siden, f.eks. hvilken CSP (Content Security Policy) ikke blev anvendt).
Interessant nok var der i 2005
Kilde: opennet.ru