Útok na front-end-back-end systémy, ktorý nám umožňuje vkliniť sa do požiadaviek tretích strán

Odhalené podrobnosti o novom útoku na stránky, ktoré používajú front-end-back-end model, ako sú tie, ktoré bežia cez siete na doručovanie obsahu, vyrovnávače zaťaženia alebo proxy. Útok umožňuje odoslaním určitých požiadaviek vkliniť sa do obsahu iných požiadaviek spracovaných v rovnakom vlákne medzi frontend a backend. Navrhovaná metóda bola úspešne použitá na zorganizovanie útoku, ktorý umožnil zachytiť autentifikačné parametre používateľov služby PayPal, ktorá zaplatila výskumníkom približne 40-tisíc dolárov v rámci programu na informovanie o prítomnosti neoplatených zraniteľností. Útok sa vzťahuje aj na stránky využívajúce sieť na doručovanie obsahu Akamai.

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 „Transfer-Encoding: chunked"(umožňuje prenášať údaje po častiach, pričom špecifikuje bloky rôznych veľkostí vo formáte "{veľkosť}\r\n{blok}\r\n{veľkosť}\r\n{blok}\r\n0").

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.

Útok na front-end-back-end systémy, ktorý nám umožňuje vkliniť sa do požiadaviek tretích strán

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 pripravený špeciálny nástroj, ktorý tiež testuje možné metódy na skrytie hlavičky „Transfer-Encoding: chunked“ z frontendu.

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 navrhované v podstate podobná technika spoofingu požiadaviek, ktorá vám umožňuje sfalšovať údaje v cachovacích proxy (Tomcat, squid, mod_proxy) alebo obísť blokovanie brány firewall zadaním niekoľkých požiadaviek „GET“ alebo „POST“ v rámci jednej relácie HTTP.

Zdroj: opennet.ru

Pridať komentár