tags: Web_server web_server_hacking HTTP_Response_Splitting_Attack


 L’HTTP Response Splitting Attack è una vulnerabilità di sicurezza che si verifica quando un’applicazione web non sanitizza correttamente l’input dell’utente, permettendo a un aggressore di manipolare la risposta HTTP inviata dal server. Questo attacco può essere utilizzato per eseguire diverse azioni malevole, come l’iniezione di contenuti arbitrari, il reindirizzamento a siti web dannosi o l’esecuzione di attacchi di tipo Cross-Site Scripting (XSS).


1. Cos’è l’HTTP Response Splitting?

L’HTTP Response Splitting è una vulnerabilità che sfrutta la mancata sanitizzazione dei caratteri speciali CRLF (Carriage Return e Line Feed, rappresentati da \r\n) nell’input dell’utente. Questi caratteri sono utilizzati per separare le intestazioni (headers) e il corpo (body) di una risposta HTTP.

Se un’applicazione web non sanitizza correttamente l’input, un aggressore può inserire caratteri CRLF per dividere la risposta HTTP in più parti, creando risposte HTTP malevole.


2. Come Funziona l’HTTP Response Splitting?

Ecco come un aggressore potrebbe sfruttare questa vulnerabilità:

a) Input Non Sanitizzato

Supponiamo che un’applicazione web utilizzi un parametro URL per impostare un cookie:

http://example.com/set-cookie?name=value

Se l’applicazione non sanitizza correttamente l’input, un aggressore potrebbe inserire caratteri CRLF nel parametro name:

http://example.com/set-cookie?name=malicious%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2019%0d%0a%0d%0a<html>Malicious</html>
 

b) Risposta HTTP Manipolata

Se l’applicazione è vulnerabile, la risposta HTTP potrebbe essere divisa in due parti:

  1. Prima Parte:
HTTP/1.1 200 OK
    Set-Cookie: name=malicious
    Content-Length: 0
  1. Seconda Parte:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 19    
   <html>Malicious</html>

In questo caso, l’aggressore ha creato una risposta HTTP malevola che potrebbe essere interpretata dal browser come una risposta valida.

Simulazione

Ecco come potrebbe essere simulato un attacco in un ambiente controllato:

a) Identificare un Punto di Iniezione

  • Trova un parametro di input che viene incluso nella risposta HTTP senza essere correttamente sanitizzato (ad esempio, un parametro URL o un campo di un form).

b) Iniettare Caratteri CRLF

  • Inserisci caratteri CRLF (\r\n) nell’input per dividere la risposta HTTP:
malicious%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2019%0d%0a%0d%0a<html>Malicious</html

c) Verificare la Risposta

  • Utilizza uno strumento come Burp Suite o curl per inviare la richiesta e verificare la risposta HTTP:
curl -I "http://example.com/set-cookie?name=malicious%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2019%0d%0a%0d%0a<html>Malicious</html>"