Parte: 4 — Seguridad de aplicaciones web · Fuente: PortSwigger Research (James Kettle) ⏱️ Duración estimada: 130 min · Nivel: Experto
Explotar dos ataques avanzados a nivel de protocolo e infraestructura: el web cache poisoning, que envenena respuestas cacheadas para afectar a muchos usuarios, y el HTTP request smuggling, que abusa de discrepancias entre servidores frontend y backend al interpretar los límites de una petición. Son técnicas de alto nivel, muy premiadas en bug bounty.
⚠️ Ética: solo en labs propios/autorizados (PortSwigger). Estos ataques afectan a infraestructura compartida; nunca los pruebes en producción ajena.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Caches web y cache keys | Base del poisoning |
| 2 | Unkeyed inputs | Vector del envenenamiento |
| 3 | Cadena frontend/backend | Base del smuggling |
| 4 | CL.TE, TE.CL, TE.TE | Tipos de desincronización |
| 5 | Impacto: hijack y bypass | Traducir a daño real |
| 6 | HTTP/2 downgrade | Superficie moderna |
| 7 | Defensa: normalizar, rechazar ambiguo | Cierre del fallo |
Content-Length y Transfer-Encoding. Característica: cada extremo usa una cabecera distinta.Transfer-Encoding pero uno se ofusca. Característica: se evade con obfuscación del header.⚠️ Solo en labs propios/autorizados.
Content-Length y Transfer-Encoding conflictivos para "contrabandear" una segunda petición.Resuelve un lab de HTTP request smuggling de PortSwigger (CL.TE o TE.CL) y un lab de cache poisoning, demostrando impacto en ambos. Criterio de aceptación: ambos labs quedan resueltos, entregas las peticiones exactas (cabeceras conflictivas / input unkeyed), la evidencia del impacto y la defensa correspondiente.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| El input no se cachea | Está en la clave o hay Cache-Control: no-store; busca otro header |
| Smuggling no desincroniza | Ambos usan la misma cabecera; prueba TE.TE con obfuscación |
| El lab usa HTTP/2 | El vector clásico cambia; usa técnicas de downgrade/H2 |
| Respuestas inconsistentes | Timing sensible; repite y ajusta |
| Param Miner sin hallazgos | Amplía el diccionario de cabeceras |
❓ ¿Por qué el smuggling es tan potente? Porque puede secuestrar peticiones de otros usuarios, saltar controles del frontend y envenenar respuestas a escala.
❓ ¿HTTP/2 elimina el smuggling? El clásico de HTTP/1.1 sí se mitiga con HTTP/2 end-to-end, pero aparecen variantes (H2.CL, downgrade) si hay traducción a HTTP/1.1.
❓ ¿Qué hace peligroso al cache poisoning? Que un solo input malicioso, una vez cacheado, se sirve a todos los usuarios que piden esa URL.
Clase 111 — Seguridad de APIs GraphQL
Clase 113 — Ataques del lado del cliente: CORS, postMessage y prototype pollution