Hace poco logré identificar y explotar una vulnerabilidad de tipo HTTP Request Smuggling en mi trabajo como pentester, y estos fueron los apuntes que me ayudaron a explotarla de forma manual:
Estos ataques también son conocidos como:
- HTTP Hijacking (no confundir con robo de sesión)
- HTTP Response Splitting (HRS)
- HTTP Desync Attack
Lo que este ataque logra es “robar un request” o incluir un request adicional por mediante otro válido, desincronizando el HTTP pipelining, para obtener como resultado un “doble-response” en vez de un único response, o derivados como “doble-header” en un único response; utilizando generalmente para su explotación básica:
- Conexiones persistentes
- Duplicación de la cabecera Content-Length
- El stream de tipo chunked transfer encoding (uso de la cabecera Transfer-Encoding)

Guías básicas de explotación
- https://www.cgisecurity.com/lib/HTTP-Request-Smuggling.pdf
- https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn
- https://www.youtube.com/watch?v=_A04msdplXs
- https://portswigger.net/web-security/request-smuggling
- https://portswigger.net/web-security/request-smuggling/exploiting
Datos curiosos pero importantes
- HTTP tiene 4 versiones hasta ahora: (1) HTTP/0.9 (deprecado), (2) HTTP/1.0, (3) HTTP/1.1, y (4) HTTP/2; y una en proyecto de desarrollo: HTTP/3 (en propuesta, formato I-D)
- https://security.stackexchange.com/questions/203695/are-there-any-security-risks-to-accepting-http-0-9-style-get-requests-e-g-ge

- Se supone que en la versión HTTP/1.0 no se permiten las conexiones persistentes.
- Se supone que para la versión HTTP/1.1, todos los requests son considerados como conexiones persistentes.
- En la vida real, he visto la utilización del valor “keep-alive” para la cabecera “Connection” en ambas versiones de HTTP.

Tools para identificación y explotación de HTTP Request Smuggling
Después de explotar manualmente mi primer “HTTP Desync Attack”, me fui a buscar herramientas (que no he utilizado, por cierto), pero que me podrían ayudar en procesos basados en volúmen o algo más personalizado, basados en las versiones HTTP/1.0 y HTTP/1.1:
- https://github.com/defparam/smuggler
- https://github.com/epsylon/Smuggler
- https://github.com/kowainik/smuggler
- https://github.com/Lactea98/smuggler.py
- https://github.com/gwen001/pentest-tools/blob/master/smuggler.py
- https://github.com/PortSwigger/http-request-smuggler
- https://github.com/search?q=smuggler o https://github.com/search?q=smuggling
Tool para ataques HTTP Response Splitting (HRS) basados en la versión HTTP/2 y la explotación de la cabecera Upgrade:
Para una posible PoC con HTTP/2
Una base interesante pero simple para implementar HTTP/2, entender cómo funciona, empezar a buscar ataques que se puedan realizar por medio de este protocolo, e implementarlo con Python:
- https://stackoverflow.com/questions/38878880/serving-python-flask-rest-api-over-http2
- https://medium.com/python-pandemonium/how-to-serve-http-2-using-python-5e5bbd1e7ff1
- https://github.com/jdaroesti/flask-http2-push
- https://hyper.readthedocs.io/en/latest/
- Requisito: HTTP/2 necesita cabeceras de compresión HPACK, y soporte para ALPN del sistema operativo