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

Otkriveno pojedinosti o novom napadu na stranice koje koriste front-end-back-end model, kao što su one koje se pokreću putem mreža za isporuku sadržaja, balansera opterećenja ili proxyja. Napad omogućuje, slanjem određenih zahtjeva, upadanje u sadržaj drugih zahtjeva koji se obrađuju u istoj niti između sučelja i pozadine. 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 tisuća dolara kao dio programa za informiranje o prisutnosti nezakrpanih ranjivosti. Napad je također primjenjiv na stranice koje koriste Akamai mrežu za isporuku sadržaja.

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 "Kodiranje prijenosa: u komadima"(omogućuje prijenos podataka u dijelovima, navodeći blokove različitih veličina u formatu "{veličina}\r\n{blok}\r\n{veličina}\r\n{blok}\r\n0").

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.

Napad na front-end-back-end sustave koji nam omogućuje 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
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 pripremljeno poseban uslužni program koji također testira moguće metode za skrivanje zaglavlja "Transfer-Encoding: chunked" iz sučelja.

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 zaprosio suštinski slična tehnika lažiranja zahtjeva koja vam omogućuje lažiranje podataka u proxyjima za predmemoriju (Tomcat, squid, mod_proxy) ili zaobilaženje blokade vatrozida određivanjem nekoliko "GET" ili "POST" zahtjeva unutar jedne HTTP sesije.

Izvor: opennet.ru

Dodajte komentar