HTTP request smuggling è un tipo di attacco che tenta di sfruttare la desincronizzazione tra i proxy front-end e i server back-end. Quindi è una tecnica per interferire con un sito Web che elabora le sequenze di richieste HTTP ricevute da uno o più utenti.
Questa vulnerabilità consente agli aggressori di decifrare l'elaborazione delle richieste HTTP iniettando una richiesta diversa che può cambiare la logica dell'applicazione. Sfrutta l'incoerenza nell'analisi delle richieste HTTP non conformi a RFC tramite due dispositivi HTTP (generalmente un server back-end e un firewall abilitato per HTTP o un proxy front-end). Questo consente di bypassare misure di sicurezza, ottenere l'accesso a informazioni sensibili e compromettere direttamente vari utenti.
Vediamo ora degli esempi:
Vulnerabilità CL.TE (Content-Length.Transfer-Encoding): questa variazione CL.TE presuppone che il server front-end dia priorità all'intestazione Content-Length mentre il server back-end dia priorità all'intestazione Transfer-Encoding. L'attacco viene eseguito dichiarando una lunghezza di chunk breve in genere 0, nella prima parte di una richiesta. Il server front-end legge solo la prima parte della richiesta e passa la seconda parte al server back-end. Il testo che inizia con "MALICIOUS REQUEST" viene passato al server back-end, che lo tratta come la richiesta successiva e lo elabora.
Vulnerabilità TE.CL (Transfer-Encoding.Content-Length): nella variazione TE.CL presuppone che il server front-end dia priorità alla debolezza Transfer-Encoding mentre il server back-end dia priorità alla debolezza Content-Length. In questo tipo di attacco l'attaccante dichiara la lunghezza del primo chunk fino alla richiesta malevola inclusa.
Per proteggersi da questo tipo di attacchi puoi disabilitare il riutilizzo della connessione back-end in modo che ogni richiesta back-end venga inviata tramite una connessione di rete separata. Utilizza HTTP/2 per le connessioni back-end, ha lo scopo di non poter modificare o iniettare alcun codice. Utilizza lo stesso identico software del server Web per i server front-end e back-end in modo che concordino sui limiti tra le richieste.
A volte le vulnerabilità possono essere evitate facendo in modo che i server front-end normalizzino le richieste ambigue o che i server back-end rifiutino le richieste ambigue e chiudano la connessione di rete.