Jadrom problému je, že frontendy a backendy často poskytujú rôzne úrovne podpory pre HTTP protokol, no zároveň zapuzdrujú požiadavky od rôznych používateľov do spoločného kanála. Na prepojenie frontendu, ktorý prijíma požiadavky a backendu spracúva požiadavky, sa vytvorí dlhodobé TCP spojenie, cez ktoré sa prenášajú požiadavky používateľov, prenášané v reťazci jedna za druhou, oddelené pomocou protokolu HTTP. Na oddelenie požiadaviek sa používajú hlavičky „Content-Length“ (určuje celkovú veľkosť údajov v požiadavke) a „
Problém nastáva, ak frontend podporuje iba „Dĺžku obsahu“, ale ignoruje „Kódovanie prenosu: chunked“ (napríklad Akamai CDN to urobil) alebo naopak. Ak je na oboch stranách podporované Transfer-Encoding: chunked, na útok možno použiť implementačné funkcie analyzátorov hlavičiek HTTP (napríklad keď klientske rozhranie ignoruje riadky ako „Transfer-Encoding: xchunked“, „Transfer-Encoding: chunked“ ”, “Kódovanie prenosu” :[tab]chunked”, "X: X[\n]Kódovanie prenosu: kusové", "Kódovanie prenosu[\n]: kusové" alebo "Kódovanie prenosu: kusové" a backend ich úspešne spracuje).
V tomto prípade môže útočník poslať požiadavku, ktorá obsahuje hlavičky „Content-Length“ aj „Transfer-Encoding: chunked“, ale veľkosť v „Content-Length“ nezodpovedá veľkosti chunked chain, ktorá je menšia ako skutočná hodnota. Ak frontend spracuje a prepošle požiadavku podľa "Content-Length" a backend čaká na dokončenie bloku na základe "Transfer-Encoding: chunked", potom bude koniec údajov založený na "Transfer-Encoding: chunked" byť určený skôr a zostávajúci koniec žiadosti bude útočník na začiatku ďalšej žiadosti, t.j. útočník bude môcť pripojiť ľubovoľné údaje na začiatok ďalšej odoslanej požiadavky niekoho iného.
Ak chcete zistiť problém v použitej kombinácii frontend-backend, môžete cez frontend odoslať takúto požiadavku:
POST /o HTTP/1.1
Hostiteľ: example.com
Transfer-Encoding: chunked
Content-Length: 4
1
Z
Q
Problém nastáva, ak backend okamžite nespracuje požiadavku a čaká na príchod posledného nulového ohraničujúceho bloku chunked dát. Pre úplnejšiu kontrolu
Uskutočnenie skutočného útoku závisí od možností napadnutej stránky, napríklad pri útoku na webovú aplikáciu Trello môžete nahradiť začiatok požiadavky (nahradiť údaje ako „PUT /1/members/1234... x=x&csrf =1234&username=testzzz&bio=cake”) a odošlite správu obsahujúcu pôvodnú požiadavku užívateľa tretej strany a overovací súbor cookie, ktorý je v nej uvedený. V prípade útoku na saas-app.com sa ukázalo, že je možné nahradiť kód JavaScript v odpovedi jeho nahradením v jednom z parametrov požiadavky. Pri útoku na redhat.com bola použitá interná obsluha na presmerovanie na webovú stránku útočníka (žiadosť vo forme „POST /search?dest=../assets/idx?redir=//[chránené e-mailom]/ HTTP/1.1").
Použitie metódy pre siete na doručovanie obsahu umožnilo jednoducho nahradiť požadovanú stránku nahradením hlavičky „Host:“. Útok možno použiť aj na otravu obsahu systémov ukladania obsahu do vyrovnávacej pamäte a extrahovanie dôverných údajov uložených vo vyrovnávacej pamäti. Vrcholom metódy bolo zorganizovanie útoku na PayPal, ktorý umožnil zachytiť heslá odosielané používateľmi počas autentifikácie (požiadavka iframe bola upravená tak, aby spustila JavaScript v kontexte stránky paypal.com/us/gifts, napr. ktorá CSP (Content Security Policy) nebola použitá).
Zaujímavé je, že v roku 2005 došlo
Zdroj: opennet.ru