Atac asupra sistemelor frontend-backend, permițând interceptarea cererilor externe.

Dezvăluite detalii despre noua atac asupra site-urilor care utilizează modelul front-end-back-end, de exemplu, cele care funcționează prin rețele de livrare a conținutului, echilibratoare de încărcare sau proxy-uri. Atacul permite, prin trimiterea unor cereri specifice, să se interpere în conținutul altor cereri, procesate în același flux între front-end și back-end. Metoda propusă a fost aplicată cu succes pentru a organiza un atac ce permite interceptarea parametrilor de autentificare ai utilizatorilor serviciului PayPal, care a plătit cercetătorilor aproximativ 40 de mii de dolari în cadrul programului de informare despre vulnerabilitățile nerezolvate. Atacul este, de asemenea, aplicabil pentru site-urile care folosesc rețeaua de livrare a conținutului Akamai.

Esenta problemei este că front-end-urile și back-end-urile oferă, adesea, niveluri diferite de suport pentru protocolul HTTP, dar în același timp încadrează cererile diferitelor utilizatori într-un canal comun. Pentru a stabili o conexiune de lungă durată între front-end-ul care primește cererile și back-end-ul care le procesează, se instituie o conexiune TCP, prin intermediul căreia sunt transmise cererile utilizatorilor în lanț, una după alta, cu separarea prin mijloacele protocolului HTTP. Pentru separarea cererilor se pot folosi capetele "Content-Length" (care definește dimensiunea totală a datelor în cerere) și "Transfer-Encoding: chunked" (permițând transmiterea datelor în părți, indicând blocuri de dimensiuni diferite în formatul "{dimensiune}\r\n{bloc}\r\n{dimensiune}\r\n{bloc}\r\n0").

Problema apare dacă front-end-ul suportă doar "Content-Length", dar ignoră "Transfer-Encoding: chunked" (de exemplu, așa făcea CDN Akamai) sau invers. În cazul în care "Transfer-Encoding: chunked" este suportat de ambele părți, atacul poate folosi particularitățile implementării parserelor de antete HTTP (de exemplu, atunci când front-end-ul ignoră linii de tipul "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked", "Transfer-Encoding:[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" sau "Transfer-Encoding : chunked", dar back-end-ul le procesează cu succes).

În acest caz, atacatorul poate trimite o cerere care specifică simultan antetele „Content-Length” și „Transfer-Encoding: chunked”, dar valoarea din „Content-Length” nu corespunde dimensiunii lanțului chunked, care este mai mică decât valoarea reală. Dacă frontendul procesează și redirecționează cererea conform „Content-Length”, iar backendul așteaptă finalizarea blocului pe baza „Transfer-Encoding: chunked”, atunci sfârșitul datelor pe baza „Transfer-Encoding: chunked” va fi definit mai devreme, iar restul cererii atacatorului va ajunge la începutul următoarei cereri, adică atacatorul va avea oportunitatea de a atașa date arbitrare la începutul cererii altcuiva, transmisă ulterior.

Atac asupra sistemelor frontend-backend, permițând interceptarea cererilor externe.

Pentru a determina problema din combinația utilizată frontend-backend, prin frontend se poate trimite o cerere de tip:

POST /about HTTP/1.1
Host: example.com
Transfer-Encoding: chunked
Content-Length: 4

1
Z
Q

Problema este prezentă dacă backendul nu procesează imediat cererea și așteaptă sosirea blocului final nul de delimitare al datelor chunked. Pentru o verificare mai completă, a fost pregătită o utilitară specială, care testează de asemenea metodele posibile de ascundere a antetului „Transfer-Encoding: chunked” de frontend.

Executarea unui atac real depinde de capacitățile site-ului atacat, de exemplu, în cazul unui atac asupra aplicației web Trello, poate fi modificat începutul cererii (adăugând date de tip „PUT /1/members/1234… x=x&csrf=1234&username=testzzz&bio=cake”) și trimis un mesaj care include cererea originală a unui utilizator terț și Cookie-urile de autentificare specificate în aceasta. Pentru atacul asupra saas-app.com, s-a dovedit că este posibil să se injecteze cod JavaScript în răspuns, prin substituirea acestuia într-unul dintre parametrii cererii. Pentru atacul asupra redhat.com, a fost folosit un handler intern pentru redirecționarea către site-ul atacatorului (a fost substituită o cerere de tip „POST /search?dest=../assets/idx?redir=//redhat.com@evil.net/ HTTP/1.1”).

Aplicarea metodei pentru rețelele de livrare a conținutului permitea înlocuirea simplă a site-ului solicitat prin substituirea antetului „Host:”. Atacul este, de asemenea, aplicabil pentru organizarea otrăvirii conținutului sistemelor de caching și extragerea datelor confidențiale din cache. Culminarea aplicării metodei a fost organizarea unui atac asupra PayPal, care permitea interceptarea parolelor trimise de utilizatori în timpul autentificării (a fost realizată modificarea cererii iframe pentru a executa JavaScript în contextul paginii paypal.com/us/gifts, pentru care nu se aplica CSP (Politica de Securitate a Conținutului)).

Este interesant că în 2005 a fost propusă o tehnică similară de substituire a cererilor, care permite înlocuirea datelor în proxy-urile de caching (Tomcat, squid, mod_proxy) sau ocolirea blocărilor firewall prin specificarea mai multor cereri „GET” sau „POST” în cadrul unei singure sesiuni HTTP.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster