¿Qué es la inyección de encabezado HTTP?
La inyección de encabezado HTTP es un método de ataque que explota vulnerabilidades en aplicações web. Al incorporar cadenas maliciosas, incluidos caracteres de retorno de carro y avance de línea (CRLF), en las solicitudes HTTP enviadas al servidor web, los atacantes pueden manipular las respuestas HTTP. Las aplicações web que almacenan parámetros proporcionados por el usuario directamente en encabezados de respuesta HTTP sin desinfección son particularmente vulnerables a este tipo de ataque.
Por ejemplo, considere un escenario donde un navegador envía la siguiente solicitud con un parámetro:
http://f5.com/index.html?status=1
Si la aplicação web desea utilizar el parámetro status=1 para la gestión de la sesión, podría devolver una respuesta HTTP como esta:
HTTP/1.1 200 OK
...
Establecer cookie: estado=1
Ahora, supongamos que la solicitud se modifica con la siguiente entrada elaborada:
http://f5.com/index.html?status=1<CRLF><CRLF><html><cuerpo><script>~</script></cuerpo></html>
La respuesta HTTP de la aplicação web se modificaría de la siguiente manera:
HTTP/1.1 200 OK
...
Establecer cookie: estado=1
<línea vacía>
<html><body><script>~</script></body></html>
En las respuestas HTTP, cualquier contenido después de dos caracteres CRLF (líneas en blanco) se trata como el cuerpo de la respuesta y lo procesa el navegador. Si el cuerpo de la respuesta incluye JavaScript malicioso, el navegador lo ejecutará, lo que provocará posibles violaciones de seguridad. Además, los atacantes pueden crear entradas para inyectar contenido de encabezado como:
<CRLF>Establecer cookie:PHPSESSID=abc
Esto establecería un ID de sesión específico en el navegador y habilitaría ataques de fijación de sesión.