X-SMU
smuggler.py
CLI independiente en Python que detecta contrabando de peticiones HTTP y problemas de desync mediante respuestas diferenciales del servidor.
Sitio oficialVolver al catálogo
RESUMEN
smuggler.py (github.com/defparam/smuggler), con licencia MIT y escrito en Python 3, es una alternativa de línea de comandos independiente al flujo basado en Burp cubierto en otra entrada de este sitio (ver HTTP Request Smuggler): envía una batería configurable de pares de peticiones con Content-Length/Transfer-Encoding mutados contra un objetivo y busca respuestas diferenciales — timeouts, códigos de estado inesperados o response splitting — que indiquen que el front-end y el back-end no están de acuerdo sobre dónde termina una petición, cubriendo tanto los desyncs clásicos CL.TE/TE.CL como varias variantes de downgrade HTTP/2.
Como no necesita un proxy de por medio y corre enteramente desde la terminal, se integra en scripts de escaneo automatizado o pipelines de CI de una forma que la extensión de Burp de HTTP Request Smuggler no puede, a costa de las plantillas de ataque de apuntar-y-clicar y la integración en vivo con Repeater que ofrece la extensión de Burp para convertir un desync confirmado en una explotación.
CASOS DE USO
Casos de uso en un engagement
- 01
Detectar bugs de desync CL.TE y TE.CL desde línea de comandos contra un objetivo detrás de un proxy inverso o CDN.
- 02
Ejecutar comprobaciones de contrabando como paso automatizado y scripteable en un pipeline de CI/CD contra un entorno de staging.
- 03
Probar variantes de contrabando relacionadas con downgrade de HTTP/2 junto a mutaciones clásicas de headers HTTP/1.1.
- 04
Pasar una lista de URLs por stdin para revisar en lote varios hosts detrás de un front-end compartido.
PRIMEROS PASOS
Cuando un objetivo está detrás de un proxy inverso o balanceador y se prefiere una comprobación por línea de comandos y scripteable en vez de un flujo dirigido por Burp, para detectar comportamiento de desync por contrabando de peticiones.
- Confirma que el objetivo está detrás de un front-end (proxy, balanceador, CDN) y que las pruebas de contrabando a volumen están dentro del alcance.
- Clona el repo y ejecútalo con Python 3 — no requiere dependencias extra más allá de la librería estándar.
- Ejecuta un escaneo contra la URL objetivo, o pásale por stdin una lista de URLs en alcance para un run en lote.
- Revisa cualquier mutación CL.TE/TE.CL marcada y el archivo de payload guardado para los desyncs sospechosos.
- Reproduce manualmente un positivo en Repeater o una herramienta de socket en bruto antes de reportarlo.
python3 smuggler.py -u https://target.example.comANTES DE USARLA
Qué revisar antes de lanzarla
Una mutación marcada es una pista, no un desync confirmado — reprodúcela siempre manualmente (Repeater, un socket en bruto) antes de reportar, ya que el ruido de timing en la red puede producir falsos positivos.
El contrabando de peticiones confirmado afecta a otros usuarios que comparten el mismo pool de conexiones del front-end, no solo al tester — coordina con cuidado con el cliente antes de demostrar impacto en una ruta de producción compartida.
Un run completo con todas las mutaciones y variantes HTTP/2 envía un volumen no trivial de peticiones malformadas; confirma que la infraestructura y el equipo de monitoreo del objetivo lo esperan antes de correrlo sin avisar.