Probando la vulnerabilidad “rapid reset” (CVE-2023-44487): una amenaza emergente para los servidores HTTP/2
HTTP/2 es un protocolo de transferencia de hipertexto que se utiliza para mejorar el rendimiento de las aplicaciones web. Es un protocolo bidireccional que permite que los clientes y los servidores envíen datos simultáneamente, lo que reduce el tiempo de carga de las páginas web.
En agosto de 2023, se descubrió una vulnerabilidad zero-day en HTTP/2 que podía ser explotada para llevar a cabo ataques de denegación de servicio distribuidos (DDoS). Varios ataques afectaron a varios servicios web importantes, como Amazon Web Services, Cloudflare y Google. Esta vulnerabilidad con CVE-2023-44487, conocida como “rapid reset”, permite a los atacantes enviar un gran número de solicitudes a un servidor HTTP/2, lo que sobrecarga el servidor y lo hace inaccesible para los usuarios legítimos.
Explicación rápida de la vulnerabilidad:
HTTP/2 utiliza un mecanismo llamado multiplexación de flujos para enviar múltiples solicitudes a través de una única conexión TCP. Esto permite que los clientes envíen y reciban datos de forma más eficiente.
La vulnerabilidad “rapid reset” se produce cuando un cliente envía una solicitud HTTP/2 y luego la cancela inmediatamente enviando una trama RST_STREAM. Esta trama indica al servidor que la solicitud debe ser cancelada.
Los atacantes pueden explotar esta vulnerabilidad enviando un gran número de solicitudes HTTP/2 y luego cancelándolas inmediatamente. Esto sobrecarga el servidor, ya que tiene que procesar cada solicitud, incluso si se cancela inmediatamente.
Probando la vulnerabilidad
Para probarlo vamos a lanzar el ataque contra una versión antigua del sencillo servidor Caddy que sólo va a respondernos por HTTP/2. El fichero de configuración o CaddyFile puede ser como el siguiente:
cabesha.com {
tls {
protocols tls1.2
}
reverse_proxy {
to 127.0.0.1:8000 # Dirección y puerto de tu aplicación backend
}
tls c:tempcaddy.crt c:tempcaddy.key
log
}
Lo levantamos:
c:caddy2.3.exe run --config CaddyFile
Detrás dejaremos mismamente un servidor sencillo con python:
python -m http.server
Ahora probamos con un simple curl:
$ curl -I --insecure https://cabesha.com
HTTP/2 200
content-type: text/html; charset=utf-8
date: Thu, 19 Oct 2023 23:11:03 GMT
server: Caddy
server: SimpleHTTP/0.6 Python/3.11.2
content-length: 250643
Para la PoC vamos a usar una herramienta escrita en Go (https://github.com/secengjeff/rapidresetclient/tree/main), aunque si os dais una vuelta veréis que hay varias (a fecha del post en python y c++).
$ ./rapidresetclient -requests=10000 -url https://cabesha.com:443 -wait=100 -delay=10 -concurrency=5
El servidor Caddy y el backend empezarán a inundarse de peticiones…
Y como veréis en la imagen de a continuación, el uso de la CPU se incrementa al 100% dejando inaccesible el servidor para realizar cualquier otra petición.
Mitigación:
Los administradores de sistemas también pueden tomar medidas para mitigar la vulnerabilidad “rapid reset”. Estas medidas incluyen:
- Actualizar el software o parchear el producto correspondiente si es el caso
- Implementar un firewall de aplicación web (WAF) para bloquear el tráfico malicioso.
- Ajustar la configuración de los servidores HTTP/2 para limitar el número de flujos simultáneos.
- Monitorizar el tráfico de red para detectar signos de ataques DDoS.
Fuentes:
Powered by WPeMatico