Separación de respuesta HTTP
La Separación de respuesta HTTP[1] 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
[editar]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.[2]
Referencias
[editar]- ↑ HTTP response splitting
- ↑ «PHP: PHP 5.1.2. Release Announcement». The PHP Group. Consultado el 13 de noviembre de 2014.
Enlaces externos
[editar]- 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