Index
Envenenamiento del encabezado HTTP Host
Descripción
El encabezado HTTP Host especifica el nombre de dominio al que el cliente HTTP desea acceder. Es obligatorio como parte del estándar HTTP/1.1.
Por ejemplo, para acceder al dominio www.ostorlab.co, el cliente HTTP enviaría la siguiente solicitud con el encabezado Host:
http request
GET / HTTP/1.1
Host: www.ostorlab.co
El encabezado Host es importante para permitir el enrutamiento del tráfico a hosts virtuales.
Las aplicaciones que manejan el encabezado Host de manera insegura son vulnerables a múltiples clases de vulnerabilidades, como:
- Server-side request forgery (SSRF)
- Envenenamiento de la caché web
- Redirecciones inseguras
El envenenamiento del encabezado Host puede materializarse de diferentes maneras:
- Reflexión arbitraria del encabezado Host
- Inyección de encabezados Host duplicados
- Inyección de URL absoluta e ignorar el valor del encabezado Host
- Inyección de encabezado agregando un salto de línea
- Inyección de encabezados de reemplazo de Host comunes, como
X-Host,X-Forwarded-Server,X-HTTP-Host-Override
Recomendación
La protección contra los ataques al encabezado Host requerirá múltiples verificaciones que dependen de la arquitectura de destino de la aplicación, como la compatibilidad con un host virtual, el uso de un proxy inverso y la presencia en ciertos entornos en la nube que admiten encabezados de enrutamiento adicionales.
Las recomendaciones para protegerse contra estos ataques son:
- Evitar el uso del valor del encabezado
Hosten la lógica de la aplicación. - Implementar una verificación de lista blanca (whitelist) de los valores aceptados; la mayoría de los frameworks web comúnmente admiten esto.
- Deshabilitar los encabezados de anulación de host; esto depende de los componentes intermediarios implementados en su arquitectura. Los lugares comunes para verificar son los proxies inversos y los controladores Ingress de Kubernetes.
Enlaces
Estándares
- PCI_STANDARDS:
- REQ_6_2
- REQ_6_3
- REQ_6_4
- REQ_11_3
- HIPAA_CONTROLS:
- SECURITY221
- SECURITY212
- SECURITY213