La división de respuestas HTTP es un ataque muy peligroso contra aplicaciones web que explota una vulnerabilidad en el manejo de los encabezados HTTP por parte del servidor. Pero para entender cuán grave es, entremos en detalles técnicos y veamos exactamente cómo funciona este ataque, qué riesgos implica y cómo protegerse.
¿Qué es la división de respuestas HTTP?
Imagine que una aplicación web recibe datos de un usuario (por ejemplo, en una petición GET o POST) y genera una respuesta HTTP basada en esos datos. Si el servidor procesa esos datos sin la validación o el filtrado adecuados, se abre la puerta a un atacante que puede insertar caracteres especiales —los caracteres CR (Retorno de carro) y LF (Salto de línea)— para dividir la respuesta HTTP en dos o más respuestas falsas. Esto conduce a la división de respuestas (response splitting), lo que permite al atacante:
- Insertar sus propios encabezados HTTP: por ejemplo, establecer cookies falsas o redirigir al usuario a otra URL.
- Crear respuestas HTTP completamente falsas: formar una respuesta que contenga cualquier contenido deseado que el navegador pueda procesar.
- Organizar ataques más complejos: como XSS (cross-site scripting), envenenamiento de caché (cache poisoning) o secuestro de páginas (page hijacking).
Un ejemplo de ataque funciona así: el atacante envía una petición al servidor que incluye la secuencia "%0d%0a" (o "r
"); esos son los caracteres CR y LF, claves para crear una nueva línea en los encabezados HTTP. De este modo, el atacante puede inyectar sus encabezados o incluso iniciar una nueva respuesta HTTP.
Principales tipos de ataques basados en la división de respuestas HTTP
- Envenenamiento de caché (Cache Poisoning). En este ataque, el atacante apunta a un servidor de caché o proxy para introducir contenido falso. Si el proxy almacena esa respuesta HTTP falsa, todos los usuarios posteriores que soliciten ese recurso recibirán contenido malicioso.
- Cross-site scripting (XSS). La inserción de CR y LF permite al atacante manipular el contenido de la respuesta para ejecutar un script malicioso en el navegador de la víctima. Esto puede derivar en robo de datos del usuario, de sus sesiones y otros ataques.
- Secuestro de páginas (Page Hijacking). Es un escenario más amplio en el que el atacante controla el contenido de la página que ve la víctima. Se pueden insertar contenidos de phishing, publicidad o redirecciones a sitios maliciosos.
Vulnerabilidades y ataques recientes relacionados con la división de respuestas HTTP
En los últimos meses se han dado a conocer vulnerabilidades graves relacionadas con la división de respuestas HTTP en el software Apache HTTP Server, uno de los servidores web más populares.
CVE-2024-24795: nueva vulnerabilidad en Apache HTTP Server
En abril de 2024 se detectó la vulnerabilidad identificada como CVE-2024-24795. Se encontró en varios módulos de Apache HTTP Server y permitía a los atacantes inyectar encabezados HTTP maliciosos en aplicaciones del servidor, lo que podía dar lugar a desincronización de solicitudes HTTP. Esto, a su vez, abría la puerta a diversos ataques: desde el robo de información hasta la instalación de malware y el defacement de sitios web.
¿Cómo funciona?
Un atacante podría enviar una petición HTTP especial que provocara que el servidor añadiera un encabezado falso "Set-Cookie" en la respuesta HTTP. Esto permitía manipular al servidor y formar respuestas falsas.
¿Cómo protegerse?
Apache publicó un parche para corregir esta vulnerabilidad. Para protegerse, se recomienda actualizar a la versión 2.4.59 o posterior y revisar las configuraciones del servidor en busca de vulnerabilidades relacionadas con la manipulación de encabezados de respuesta HTTP.
CVE-2023-25690 y CVE-2023-27522: vulnerabilidades en módulos de Apache
A principios de 2023 se descubrieron otras dos vulnerabilidades en Apache HTTP Server:
- CVE-2023-25690. Esta vulnerabilidad estaba relacionada con el módulo mod_proxy y permitía a atacantes eludir reglas de acceso del proxy y realizar peticiones no deseadas. Fueron vulnerables las versiones de Apache HTTP Server desde la 2.4.0 hasta la 2.4.55.
- CVE-2023-27522. Vulnerabilidad relacionada con el módulo mod_proxy_uwsgi que permitía a atacantes inyectar cualquier encabezado HTTP y forzar al servidor a enviar una respuesta dividida. Esto podía dar lugar a distintos ataques, incluido el envenenamiento de caché y el cross-site scripting.
Para corregir estas vulnerabilidades, Apache publicó un parche en la versión 2.4.56. Se recomienda a todos los usuarios actualizar el software del servidor lo antes posible y realizar una auditoría de seguridad en la configuración de los módulos.
Medidas para prevenir ataques de división de respuestas HTTP
Para reducir el riesgo de vulnerabilidades relacionadas con la división de respuestas HTTP, debe adoptarse una serie de medidas de protección:
1. Validación y limpieza de datos de entrada
Una de las formas más importantes de protección es la verificación y filtrado exhaustivo de los datos de entrada que llegan al servidor. Es necesario eliminar de ellos todos los posibles caracteres CR (Retorno de carro, "%0d") y LF (Salto de línea, "%0a"). Por ejemplo, se pueden utilizar funciones para limpiar cadenas que eliminen o codifiquen esos caracteres, de modo que no puedan ser usados por un atacante para dividir respuestas HTTP.
2. Codificación de caracteres en los encabezados HTTP
Al enviar datos del usuario en encabezados HTTP conviene transformar o codificar caracteres especiales para que su interpretación sea segura. Por ejemplo, si un encabezado contiene CR o LF, deben escaparse o reemplazarse por alternativas seguras, evitando su uso para crear una respuesta dividida.
3. Uso de versiones actualizadas del software
Es importante actualizar regularmente el software del servidor, incluidos servidores web, frameworks y bibliotecas. Muchas vulnerabilidades en servidores web populares, como Apache HTTP Server, se han solucionado en versiones posteriores (por ejemplo, las versiones 2.4.56 y 2.4.59 corrigen varias vulnerabilidades de división de respuestas HTTP). Mantener el software actualizado garantiza la corrección de fallos detectados en versiones anteriores.
4. Protección contra la inserción de caracteres no previstos en los encabezados
Al generar respuestas HTTP y procesar encabezados, utilice métodos o bibliotecas seguras integradas para formar y enviar respuestas. Evite construir encabezados HTTP manualmente, ya que esto aumenta el riesgo de errores que pueden dar lugar a ataques de división de respuestas HTTP.
5. Configuración de módulos del servidor y proxies
Si utiliza servidores proxy o módulos como "mod_proxy" o "mod_proxy_uwsgi" en Apache HTTP Server, compruebe la configuración con cuidado. Asegúrese de que RewriteRule o ProxyPassMatch no permiten manipulaciones de los datos de la petición que puedan provocar vulnerabilidades en los encabezados de respuesta. Para prevenir ataques de desincronización HTTP, desactive o limite el uso de reglas y patrones inseguros que procesen datos de entrada.
6. Análisis de registros y monitorización de actividad
Es importante revisar regularmente los registros del servidor y la actividad de la red para detectar peticiones sospechosas o inesperadas que puedan estar relacionadas con intentos de ataques de división de respuestas HTTP. Si se detectan encabezados HTTP inusuales o intentos repetidos de manipular respuestas HTTP, debe actuarse de inmediato.
7. Uso de un cortafuegos de aplicaciones web (WAF)
Las soluciones modernas de WAF pueden detectar y bloquear intentos de ataques relacionados con la división de respuestas HTTP y otras amenazas. Proporcionan una capa adicional de protección y pueden filtrar automáticamente las peticiones potencialmente peligrosas.
Siguiendo estas recomendaciones, es posible reducir significativamente el riesgo de ataques de división de respuestas HTTP y hacer que su aplicación web sea más segura frente a intentos de los atacantes de alterar su funcionamiento o controlar su contenido.