Bistvo težave je v tem, da frontendi in backendi pogosto zagotavljajo različne ravni podpore za protokol HTTP, hkrati pa zapakirajo zahteve različnih uporabnikov v skupni kanal. Za povezavo frontend sprejemanja zahtev in backend obdelave zahtev je vzpostavljena dolgoživeča povezava TCP, preko katere se prenašajo uporabniške zahteve, ki se prenašajo po verigi druga za drugo, ločene s protokolom HTTP. Za ločevanje zahtev, glave "Content-Length" (določa skupno velikost podatkov v zahtevi) in "
Težava nastane, če vmesnik podpira samo »Content-Length«, vendar ignorira »Transfer-Encoding: chunked« (to je na primer naredil Akamai CDN) ali obratno. Če je Transfer-Encoding: chunked podprt na obeh straneh, se lahko izvedbene funkcije razčlenjevalnikov glav HTTP uporabijo za napad (na primer, ko sprednji del ignorira vrstice, kot sta »Transfer-Encoding: xchunked«, »Transfer-Encoding: chunked« ”, “Transfer-Encoding” :[tab]chunked”, "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" ali "Transfer-Encoding : chunked" in zaledje jih uspešno obdela).
V tem primeru lahko napadalec pošlje zahtevo, ki vsebuje obe glavi "Content-Length" in "Transfer-Encoding: chunked", vendar velikost v "Content-Length" ne ustreza velikosti verige chunked, kar je manjša od dejanske vrednosti. Če sprednji del obdela in posreduje zahtevo glede na »Content-Length« in zaledni del počaka, da se blok zaključi na podlagi »Transfer-Encoding: chunked«, bo konec podatkov na podlagi »Transfer-Encoding: chunked« določiti prej, preostali del zahteve pa bo napadalec na začetku naslednje zahteve, tj. napadalec bo lahko priložil poljubne podatke na začetek zahteve nekoga drugega, ki bo naslednji poslana.
Če želite ugotoviti težavo v uporabljeni kombinaciji frontend-backend, lahko prek frontenda pošljete takšno zahtevo:
POST /o HTTP/1.1
Gostitelj: example.com
Kodiranje prenosa: razdeljeno na koščke
Dolžina vsebine: 4
1
Z
Q
Težava je prisotna, če zaledje ne obdela takoj zahteve in počaka na prihod končnega ničelnega omejevalnega bloka razdeljenih podatkov. Za popolnejši pregled
Izvedba pravega napada je odvisna od zmožnosti napadenega mesta, na primer, ko napadate spletno aplikacijo Trello, lahko zamenjate začetek zahteve (nadomestni podatki, kot je »PUT /1/members/1234... x=x&csrf =1234&uporabniško ime=testzzz&bio=cake”) in pošljete sporočilo, vključno z izvirno zahtevo tretje osebe in v njej navedenim piškotkom za preverjanje pristnosti. Pri napadu na saas-app.com se je izkazalo, da je možno zamenjati JavaScript kodo v odgovoru tako, da jo zamenjamo v enem od parametrov zahteve. Za napad na redhat.com je bil uporabljen notranji upravljalnik za preusmeritev na napadalčevo spletno stran (zahteva v obliki »POST /search?dest=../assets/idx?redir=//[e-pošta zaščitena]/ HTTP/1.1").
Uporaba metode za omrežja za dostavo vsebine je omogočila preprosto zamenjavo zahtevanega mesta z zamenjavo glave »Host:«. Napad se lahko uporabi tudi za zastrupitev vsebine sistemov za predpomnjenje vsebine in pridobivanje predpomnjenih zaupnih podatkov. Vrhunec metode je bila organizacija napada na PayPal, ki je omogočila prestrezanje gesel, ki so jih uporabniki poslali med avtentikacijo (zahteva iframe je bila spremenjena tako, da izvaja JavaScript v kontekstu strani paypal.com/us/gifts, za kateri CSP (Politika varnosti vsebine) ni bil uporabljen).
Zanimivo, leta 2005 je bilo
Vir: opennet.ru