Nuevos labs cada semana — Accede a todos desde 7,99€/mes

Labs de Cache Poisoning

Web Cache Poisoning

¿Qué es Cache Poisoning?

El Web Cache Poisoning abusa de entradas no incluidas en la clave de caché (unkeyed inputs) para guardar una respuesta maliciosa que luego se sirve a todos los usuarios. Con cabeceras como X-Forwarded-Host se inyecta XSS, redirects o defacement servido desde la propia caché.

¿Por qué practicar Cache Poisoning?

Las CDNs y cachés están en casi toda app moderna, y el modelo de cache key es difícil de afinar. Una respuesta envenenada se sirve a miles de usuarios desde la caché: convierte un input reflejado de bajo impacto en un XSS o redirect masivo y persistente. Bounties típicos: $1,000-$15,000.

¿Qué aprenderás con los labs de Cache Poisoning?

Aprenderás a identificar si una respuesta es cacheable (Age, X-Cache, Cache-Control), descubrir inputs no incluidos en la clave (X-Forwarded-Host, X-Forwarded-Scheme, headers custom), reflejarlos en la respuesta, y envenenar la caché para impactar a terceros sin tocar su navegador directamente.

Tipos de Cache Poisoning que cubrimos

  • Unkeyed header → XSS

    Una cabecera no clave (X-Forwarded-Host) se refleja en la página y se cachea. La caché sirve tu XSS a todos.

  • Unkeyed header → redirect

    X-Forwarded-Host usado para construir URLs absolutas envenena enlaces/redirects hacia tu dominio.

  • Cache deception

    Engañar a la caché para que guarde una página privada (añadiendo /nonexistent.css) y servirla a otro usuario.

  • Fat GET / parameter cloaking

    Discrepancias entre lo que cachea el proxy y lo que procesa el origin para colar entradas no claves.

¿Cómo encontrar y explotar Cache Poisoning?

Playbook práctico — del recon a la prueba de concepto.

  1. 1

    Detectar que la respuesta se cachea

    Pide dos veces el recurso y mira cabeceras de caché. Un Age creciente o X-Cache: HIT confirma que hay caché delante.

    curl -sI https://target/?x=1 | grep -iE 'age|x-cache|cf-cache-status'
  2. 2

    Buscar inputs no incluidos en la clave

    Añade cabeceras de proxy y observa si cambian la respuesta sin formar parte de la cache key (misma URL, distinto contenido).

    GET / HTTP/1.1\nHost: target\nX-Forwarded-Host: evil.com
  3. 3

    Confirmar que el input se refleja

    Comprueba que tu cabecera no clave acaba en la respuesta (en un enlace, un script, una URL canónica).

    <link rel=canonical href="https://evil.com/">  ·  <script src="//evil.com/x.js">
  4. 4

    Envenenar la caché

    Repite la petición con el payload hasta que se cachee la versión maliciosa; verifica que otros la reciben sin enviar la cabecera.

    Tras N requests con X-Forwarded-Host:evil.com → la caché sirve evil.com a todos
  5. 5

    Probar cache deception

    Como variante, fuerza la caché a guardar una página autenticada añadiendo una extensión estática a la URL.

    https://target/account/profile/nonexistent.css  →  cacheada y servida a otros

Aprende la teoría

Academy: Técnicas Avanzadas

Preguntas frecuentes

¿Qué es el Web Cache Poisoning?

Es un ataque que aprovecha entradas no incluidas en la clave de caché (unkeyed) para que el servidor almacene una respuesta maliciosa. Una vez en caché, esa respuesta se sirve a todos los usuarios que piden el mismo recurso, propagando XSS, redirects o defacement.

¿Cómo se explota el Web Cache Poisoning?

Se identifica una cabecera no clave (como X-Forwarded-Host) que se refleja en la respuesta, se envía con un payload y se repite hasta que la caché guarda la versión envenenada. A partir de ahí, otros usuarios reciben el contenido malicioso sin enviar esa cabecera.

¿Cómo encontrar Cache Poisoning en bug bounty?

Confirma que hay caché (Age, X-Cache), prueba cabeceras de proxy (X-Forwarded-Host/Scheme, headers custom) con Param Miner de Burp para detectar inputs no claves, y verifica que se reflejan y se cachean afectando a peticiones limpias.

¿Cómo prevenir el Web Cache Poisoning?

Incluye en la cache key todas las entradas que afectan a la respuesta, normaliza o ignora cabeceras no fiables, no construyas URLs absolutas a partir de cabeceras como X-Forwarded-Host, y separa claramente el contenido cacheable del personalizado.

¿Diferencia entre Cache Poisoning y Cache Deception?

En el Cache Poisoning el atacante envenena una respuesta para que se sirva a otros (impacto sobre terceros). En el Cache Deception engaña a la caché para que almacene una página privada de la víctima y luego la recupera él (robo de datos de la víctima). Vectores opuestos sobre la misma capa de caché.

Empieza con labs de Cache Poisoning

Practica Web Cache Poisoning con labs basados en reportes reales. En español. Desde 7,99€/mes.

Empieza con el primer lab de Cache Poisoning