
También conocido como
CRLF Injection Attack,
HTTP response
splitting es técnica en la que un atacante se vale de la
inyección de retornos de carro y de línea para alterar una respuesta
HTTP y separarla en dos (de ahí su nombre). De esta forma puede incluir
cualquier contenido en la segunda petición y poner en riesgo la
seguridad y privacidad de los usuarios que visitan la web, así como
pudiendo alterar la página. Típicamente, permite inyectar JavaScript.
Funcionamiento de un HTTP response splitting
El navegador inicia una petición (sea GET, POST o cualquiera de los
otros verbos que usa HTTP) que se envía al servidor web. Este a su vez
responde con un código de estado (2XX para éxito, 3XX para redirección,
4XX para error etc…) y el contenido de la respuesta, que habitualmente
incluye el HTML de una web que será interpretada por el navegador del
cliente.
Las diferentes líneas de una petición GET, por ejemplo, se separan por
un retorno de carro y otro de línea (%0d y %0a). Si se añaden
artificialmente en la petición con la intención de añadir nuevos campos,
o incluso una segunda petición construida desde cero por el atacante,
se produce el ataque. Abajo se muestra un diagrama de este proceso, de
un ejemplo lanzado contra un servidor vulnerable de prueba:
En esta petición se ha modificado un parámetro GET y en él se ha
introducido un retorno de carro (%0d) y uno de línea (%0a) seguidos de
las nuevas líneas de cada campo (Un "Content-Type" y un código
JavaScript) separadas a su vez por otro CRLF (%0d%0a).
Contenido completo en fuente original ElevenPath