Un attaccu à i sistemi front-end-back-end chì ci permette di cuncellà in richieste di terze parti

Rivelatu dettagli di un novu attaccu à i siti chì utilizanu un mudellu front-end-back-end, cum'è quelli chì passanu attraversu e rete di spedizione di cuntenutu, equilibratori di carica o proxy. L'attaccu permette, mandendu certe dumande, di cunghjuntà in u cuntenutu di altre dumande trattate in u stessu filu trà u frontend è u backend. U metudu prupostu hè stata utilizata cù successu per urganizà un attaccu chì hà permessu di interceptà i paràmetri di autentificazione di l'utilizatori di u serviziu di PayPal, chì hà pagatu circadori circa 40 mila dollari cum'è parte di un prugramma per informà nantu à a presenza di vulnerabili senza patche. L'attaccu hè ancu applicabile à i siti chì utilizanu a reta di spedizione di cuntenutu Akamai.

U mutivu di u prublema hè chì i frontends è i backends spessu furniscenu diversi livelli di supportu per u protocolu HTTP, ma à u stessu tempu incapsulate e dumande da diverse utilizatori in un canali cumuni. Per cunnette e richieste di ricivimentu di frontend è e richieste di trasfurmazioni di backend, hè stabilitu una cunnessione TCP longa, per mezu di quale e dumande di l'utilizatori sò trasmesse, trasmesse longu a catena una dopu l'altra, siparata per mezu di u protocolu HTTP. Per separà e dumande, l'intestazione "Content-Length" (determina a dimensione tutale di e dati in a dumanda) è "Trasferimentu-Encoding: chunked"(permette di trasfiriri dati in parti, specificendu blocchi di diverse dimensioni in u furmatu "{size}\r\n{block}\r\n{size}\r\n{block}\r\n0").

U prublema nasce se u frontend sustene solu "Content-Length" ma ignora "Transfer-Encoding: chunked" (per esempiu, Akamai CDN hà fattu questu) o viceversa. Se Transfer-Encoding: chunked hè supportatu da i dui lati, e funzioni di implementazione di i parsers di header HTTP ponu esse aduprate per un attaccu (per esempiu, quandu u front-end ignora linee cum'è "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked". ", "Transfer-Encoding":[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" o "Transfer-Encoding: chunked", è u backend li processa cù successu).

In questu casu, un attaccu pò mandà una dumanda chì cuntene l'intestazione "Content-Length" è "Transfer-Encoding: chunked", ma a dimensione in "Content-Length" ùn currisponde micca à a dimensione di a catena chunked, chì hè più chjucu cà u valore attuale. Se u frontend processa è trasmette a dumanda secondu "Content-Length" è u backend aspetta chì u bloccu finisci basatu annantu à "Transfer-Encoding: chunked", allora a fine di i dati basati nantu à "Transfer-Encoding: chunked" sarà esse determinatu prima è a cuda restante di a dumanda l'attaccante serà à u principiu di a prossima dumanda, i.e. l'attaccante hà da pudè aghjunghje dati arbitrarie à u principiu di a dumanda di qualcunu altru trasmessa dopu.

Un attaccu à i sistemi front-end-back-end chì ci permette di cuncellà in richieste di terze parti

Per determinà u prublema in a combinazione frontend-backend usata, pudete mandà una dumanda cum'è questa via u frontend:

POST / about HTTP / 1.1
Host: example.com
Trasferimentu-Encoding: chunked
Cuntenutu-Lunghezza: 4

1
Z
Q

U prublema hè prisente se u backend ùn processa micca immediatamente a dumanda è aspetta l'arrivu di u bloccu di limitazione zero finale di dati chunked. Per un cuntrollu più cumpletu preparatu una utilità speciale chì prova ancu i metudi pussibuli per ammuccià l'intestazione "Transfer-Encoding: chunked" da u frontend.

Realizà un attaccu veru dipende di e capacità di u situ attaccatu, per esempiu, quandu attaccà l'applicazione web Trello, pudete rimpiazzà l'iniziu di a dumanda (sustituite dati cum'è "PUT /1/membri/1234... x=x&csrf). =1234&username=testzzz&bio=cake") è mandate un missaghju cumpresi a dumanda originale di un utilizatore di terzu è a Cookie d'autentificazione specificata in questu. Per un attaccu à saas-app.com, hè statu pussibule di rimpiazzà u codice JavaScript in a risposta sustituendu in unu di i paràmetri di dumanda. Per l'attaccu nantu à redhat.com, un gestore internu hè statu utilizatu per reindirizzà à u situ web di l'attaccante (una dumanda di a forma "POST /search?dest=../assets/idx?redir=//).[email prutettu]/ HTTP/1.1").

Utilizà u metudu per e rete di spedizione di cuntenutu hà permessu di rimpiazzà solu u situ dumandatu sustituendu l'intestazione "Host:". L'attaccu pò ancu esse usatu per avvelenà u cuntenutu di i sistemi di cache di cuntenutu è estrae dati cunfidenziale in cache. U pinnacle di u metudu era l'urganizazione di un attaccu à PayPal, chì hà permessu di interceptà e password mandate da l'utilizatori durante l'autentificazione (a dumanda iframe hè stata mudificata per eseguisce JavaScript in u cuntestu di a pagina paypal.com/us/gifts, per quale CSP (Politica di sicurezza di cuntenutu) ùn hè micca stata applicata).

Curiosamente, in u 2005 ci era pruposta una tecnica di spoofing di richieste essenzialmente simili chì vi permette di spoofing data in caching proxies (Tomcat, squid, mod_proxy) o bypasse u bloccu di firewall specificendu parechje richieste "GET" o "POST" in una sessione HTTP.

Source: opennet.ru

Add a comment