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.

Protocolo de Transferencia de Hipertexto (HTTP), es un protocolo de aplicación para permitir la comunicación entre sistemas físicamente dispersos.

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

  1. HTTP response splitting
  2. «PHP: PHP 5.1.2. Release Announcement». The PHP Group. Consultado el 13 de noviembre de 2014. 

Enlaces externos editar