Napad na front-end-back-end sisteme koji nam omogućava da se uvučemo u zahtjeve trećih strana

Otkriveno detalji o novom napadu na stranice koje koriste front-end-back-end model, kao što su one koje prolaze kroz mreže za isporuku sadržaja, balansere opterećenja ili proksije. Napad omogućava, slanjem određenih zahtjeva, da se uglavi u sadržaj drugih zahtjeva obrađenih u istoj niti između frontenda i backenda. Predložena metoda uspješno je korištena za organiziranje napada koji je omogućio presretanje parametara autentifikacije korisnika usluge PayPal, koja je istraživačima platila oko 40 hiljada dolara u sklopu programa za obavještavanje o prisutnosti nezakrpljenih ranjivosti. Napad je također primjenjiv na stranice koje koriste Akamai mrežu za isporuku sadržaja.

Suština problema je u tome što frontendovi i backendovi često pružaju različite nivoe podrške za HTTP protokol, ali u isto vrijeme inkapsuliraju zahtjeve različitih korisnika u zajednički kanal. Da bi se povezali zahtjevi za primanje frontenda i zahtjevi za obradu pozadinske mreže, uspostavlja se dugotrajna TCP veza preko koje se prenose korisnički zahtjevi, prenose duž lanca jedan za drugim, razdvojeni pomoću HTTP protokola. Za razdvajanje zahtjeva, zaglavlja "Content-Length" (određuje ukupnu veličinu podataka u zahtjevu) i "Transfer-Encoding: u komadima"(omogućava prijenos podataka u dijelovima, navodeći blokove različitih veličina u formatu "{size}\r\n{block}\r\n{size}\r\n{block}\r\n0").

Problem nastaje ako frontend podržava samo "Content-Length", ali ignoriše "Transfer-Encoding: chunked" (na primjer, Akamai CDN je to učinio) ili obrnuto. Ako je Transfer-Encoding: chunked podržan na obje strane, karakteristike implementacije HTTP analizatora zaglavlja mogu se koristiti za napad (na primjer, kada prednji kraj zanemaruje redove 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 zaglavlja "Content-Length" i "Transfer-Encoding: chunked", ali veličina u "Content-Length" ne odgovara veličini podijeljenog lanca, koji je manji od stvarne vrijednosti. Ako frontend obrađuje i prosljeđuje zahtjev prema "Content-Length" i backend čeka da se blok završi na osnovu "Transfer-Encoding: chunked", tada će kraj podataka zasnovan na "Transfer-Encoding: chunked" biti određen ranije i preostali rep zahtjeva napadač će biti na početku sljedećeg zahtjeva, tj. napadač će biti u mogućnosti da priloži proizvoljne podatke na početak nečijeg drugog zahtjeva koji je sljedeći.

Napad na front-end-back-end sisteme koji nam omogućava da se uvučemo u zahtjeve trećih strana

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
Transfer-Encoding: u komadima
Dužina sadržaja: 4

1
Z
Q

Problem je prisutan ako pozadina ne obradi odmah zahtjev i čeka dolazak konačnog nulte graničnog bloka podataka u komadima. Za potpuniju provjeru pripremljeno poseban uslužni program koji također testira moguće metode za sakrivanje zaglavlja “Transfer-Encoding: chunked” sa frontenda.

Izvođenje pravog napada zavisi od mogućnosti napadnute stranice, na primjer, kada napadate Trello web aplikaciju, možete zamijeniti početak zahtjeva (zamijeniti podatke poput „PUT /1/members/1234... x=x&csrf =1234&username=testzzz&bio=cake”) i pošaljite poruku koja uključuje originalni 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 rukovalac za preusmjeravanje na web stranicu napadača (zahtjev u obliku „POST /search?dest=../assets/idx?redir=//[email zaštićen]/ HTTP/1.1").

Korištenje metode za mreže za isporuku sadržaja omogućilo je jednostavno zamjenu tražene stranice zamjenom zaglavlja “Host:”. Napad se takođe može koristiti za trovanje sadržaja sistema za keširanje sadržaja i izdvajanje keširanih povjerljivih podataka. Vrhunac metode bila je organizacija napada na PayPal, koji je omogućio presretanje lozinki koje su korisnici poslali tokom autentifikacije (iframe zahtjev je modificiran da izvrši JavaScript u kontekstu stranice paypal.com/us/gifts, za koji CSP (Politika sigurnosti sadržaja) nije primijenjen).

Zanimljivo je da je 2005. godine bilo predložio suštinski slična tehnika lažiranja zahteva koja vam omogućava da lažirate podatke u proksijima za keširanje (Tomcat, squid, mod_proxy) ili zaobiđete blokiranje firewall-a navođenjem nekoliko „GET“ ili „POST“ zahteva unutar jedne HTTP sesije.

izvor: opennet.ru

Dodajte komentar