HTTP Request Smuggling (Contrabando de Solicitudes HTTP) es una vulnerabilidad que ocurre cuando un atacante puede manipular las solicitudes HTTP en un servidor web, aprovechando diferencias en la interpretación de las cabeceras HTTP por parte de los sistemas intermedios, como proxies, firewalls o servidores front-end y back-end.
A continuación, te presento dos ejemplos comunes de HTTP Request Smuggling:
- Contrabando de cabecera Content-Length:
Supongamos que un servidor web frontal interpreta la cabecera
Transfer-Encoding: chunked
y un servidor web backend interpreta la cabeceraContent-Length
. El atacante podrÃa enviar una solicitud HTTP de este tipo:
POST /endpoint HTTP/1.1
Host: vulnerable-server.com
Content-Length: 4
Transfer-Encoding: chunked
0
G
POST /malicious-endpoint HTTP/1.1
Host: vulnerable-server.com
Content-Length: 18
data=evil
En este ejemplo, el servidor frontal interpreta el cuerpo de la solicitud como una sola solicitud POST con contenido "data=evil", mientras que el servidor backend interpreta el cuerpo como una solicitud POST y una solicitud GET. El contenido "data=evil" será procesado por ambos servidores.
- Contrabando de cabecera de terminación (Termination Smuggling):
En este ejemplo, supongamos que un servidor web frontal interpreta la cabecera
Connection: close
y el servidor backend interpreta la cabeceraConnection: keep-alive
. El atacante podrÃa enviar una solicitud HTTP de este tipo:
POST /endpoint HTTP/1.1
Host: vulnerable-server.com
Content-Length: 4
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Transfer-Encoding: chunked
G
POST /malicious-endpoint HTTP/1.1
Host: vulnerable-server.com
Content-Length: 18
Content-Type: application/x-www-form-urlencoded
Connection: close
data=evil
En este ejemplo, el servidor frontal interpreta la primera solicitud como una solicitud POST con contenido "G", mientras que el servidor backend interpreta la primera solicitud como una solicitud POST y la segunda como una solicitud GET con contenido "data=evil". Esto puede permitir que el atacante realice acciones maliciosas en la segunda solicitud.
Prevenir HTTP Request Smuggling requiere cuidadosa configuración del servidor y aplicaciones web, y es esencial mantener actualizado el software para evitar versiones vulnerables. Algunas medidas preventivas incluyen:
- Usar el mismo servidor proxy o firewall en todas las capas para evitar interpretaciones inconsistentes de las cabeceras HTTP.
- Configurar adecuadamente las cabeceras HTTP y ajustar los servidores web para mitigar esta vulnerabilidad.
- Utilizar herramientas y servicios de seguridad que puedan detectar y mitigar ataques de HTTP Request Smuggling.
La detección y mitigación oportuna de HTTP Request Smuggling es fundamental para proteger los servidores y aplicaciones web de posibles explotaciones de esta vulnerabilidad.