miniaturadeimagen|Protocolo de Transferencia de Hipertexto (HTTP), es un protocolo de aplicación para permitir la comunicación entre sistemas físicamente dispersos. La Separación de respuesta HTTPHTTP response splitting es una vulnerabilidad de una aplicación web que resulta cuando fracasa la limpieza de valores de entrada por parte de la aplicación o de su ambiente. Puede usarse para realizar ataques cross-site scripting, cross-user defacement, envenanimiento del cache web y otros exploits.
El ataque consiste en lograr que el servidor imprima una secuencia retorno de carro (CR, ASCII 0x0D) y nueva línea (LF, ASCII 0x0A) seguida de contenido suministrado por el atacante en la cabecera de su respuesta, típicamente incluyéndolos en los campos de entrada enviados a la aplicación. Por el estándar HTTP (RFC 2616), dos encabezados se separan por un CRLF y los encabezados se separan del cuerpo de la respuesta mediante dos CRLFs. Por esto, si se fracasa en eliminar los CRs y LFs se permitirá al atacante establecer encabezados arbitrarios, tomar el control del cuerpo o de la terminación de la respuesta en dos o más repuestas separadas --a esto se debe el nombre de la vulnerabilidad.
Prevención La solución genérica es transformar cada cadena a Código por ciento antes de incluirla en Cabeceras HTTP tales como Location o Set-Cookie.
Los ejemplo típicos de limpieza incluyen conversión de tipos a entero o reemplazos agresivos con expresiones regulares. Aunque la separación de respuesta HTTP no es específica de PHP, el intérprete de PHP contiene protecciones contra el ataque desde la versión 4.4.2 y 5.1.2.
Referencias
Enlaces externos Target Web Application Vulnerable to HTTP Header Injection HTTP Response Splitting, The Web Application Security Consortium Wapiti Open Source XSS, Header, SQL and LDAP injection scanner LWN article CWE-113: Failure to Sanitize CRLF Sequences in HTTP Headers ('HTTP Response Splitting') CRLF Injection - OWASP