HTTP request smuggling: disaccordo su dove finisce la richiesta
Quando un proxy front-end e un server back-end condividono una connessione ma calcolano diversamente i confini delle richieste HTTP, si può iniettare una richiesta "contrabbandata".
CL.TE e TE.CL
Se il front-end usa Content-Length e il back-end usa Transfer-Encoding (o viceversa), parte del corpo di una richiesta viene interpretata dal back-end come l'inizio della richiesta successiva di un altro utente.
POST / HTTP/1.1
Content-Length: 6
Transfer-Encoding: chunked
0
GPOST /admin ... <- contrabbandata nella richiesta della vittimaConseguenze: bypass di controlli, cache poisoning, dirottamento di richieste altrui, furto di credenziali.
Difesa
Usa HTTP/2 end-to-end (elimina l'ambiguità del framing). Normalizza: front-end e back-end devono concordare, rifiutando richieste con entrambi gli header o con TE malformato. Disabilita il riuso della connessione verso il back-end se non necessario.