Srž problema je u tome što sučelja i pozadina često pružaju različite razine podrške za HTTP protokol, ali u isto vrijeme enkapsuliraju zahtjeve različitih korisnika u zajednički kanal. Za povezivanje frontend-a koji prima zahtjeve i backend-a za obradu zahtjeva, uspostavlja se dugotrajna TCP veza, preko koje se prenose korisnički zahtjevi, koji se prenose duž lanca jedan za drugim, odvojeni pomoću HTTP protokola. Za odvajanje zahtjeva, zaglavlja "Content-Length" (određuje ukupnu veličinu podataka u zahtjevu) i "
Problem nastaje ako sučelje podržava samo "Content-Length", ali ignorira "Transfer-Encoding: chunked" (na primjer, Akamai CDN je to učinio) ili obrnuto. Ako je Transfer-Encoding: chunked podržan na obje strane, značajke implementacije parsera HTTP zaglavlja mogu se koristiti za napad (na primjer, kada sučelje ignorira retke poput "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked" ”, “Transfer-Encoding” :[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" ili "Transfer-Encoding : chunked", i backend ih uspješno obrađuje).
U ovom slučaju, napadač može poslati zahtjev koji sadrži i "Content-Length" i "Transfer-Encoding: chunked" zaglavlja, ali veličina u "Content-Length" ne odgovara veličini chunked lanca, što je manja od stvarne vrijednosti. Ako sučelje obradi i proslijedi zahtjev prema "Content-Length", a backend čeka da se blok završi na temelju "Transfer-Encoding: chunked", tada će kraj podataka temeljen na "Transfer-Encoding: chunked" odrediti ranije, a preostali dio zahtjeva napadač će biti na početku sljedećeg zahtjeva, tj. napadač će moći priložiti proizvoljne podatke na početak tuđeg zahtjeva koji se šalje sljedeći.
Da biste utvrdili problem u korištenoj kombinaciji frontend-backend, možete poslati zahtjev poput ovog putem frontenda:
POST /o HTTP/1.1
Domaćin: example.com
Kodiranje prijenosa: u komadima
Content-Length: 4
1
Z
Q
Problem je prisutan ako backend odmah ne obradi zahtjev i čeka dolazak konačnog nultog graničnog bloka razdijeljenih podataka. Za potpuniju provjeru
Izvođenje pravog napada ovisi o mogućnostima napadnute stranice, na primjer, kada napadate Trello web aplikaciju, možete zamijeniti početak zahtjeva (zamjenski podaci poput “PUT /1/members/1234... x=x&csrf =1234&username=testzzz&bio=cake”) i poslati poruku koja uključuje izvorni zahtjev korisnika treće strane i autentifikacijski kolačić naveden u njemu. Za napad na saas-app.com pokazalo se da je moguće zamijeniti JavaScript kod u odgovoru zamjenom u jednom od parametara zahtjeva. Za napad na redhat.com korišten je interni rukovatelj za preusmjeravanje na web stranicu napadača (zahtjev u obliku “POST /search?dest=../assets/idx?redir=//[e-pošta zaštićena]/ HTTP/1.1").
Korištenje metode za mreže za isporuku sadržaja omogućilo je jednostavnu zamjenu tražene stranice zamjenom zaglavlja "Host:". Napad se također može koristiti za trovanje sadržaja sustava za predmemoriju sadržaja i izdvajanje povjerljivih podataka iz predmemorije. Vrhunac metode bilo je organiziranje napada na PayPal, koji je omogućio presretanje lozinki koje korisnici šalju tijekom autentifikacije (iframe zahtjev je modificiran za izvršavanje JavaScripta u kontekstu stranice paypal.com/us/gifts, za koji CSP (Content Security Policy) nije primijenjen).
Zanimljivo, 2005. godine bilo je
Izvor: opennet.ru