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) è "
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.
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
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
Source: opennet.ru