Nivel AvanzadoPremium

CloudFront cache deception — exfiltrate PII via cached responses ajenas

Cómo abusar de CloudFront cache rules con extensions falsas (.css, .js, .png) para servir respuestas autenticadas cacheadas a otros usuarios. Real-world PII leakage.

Gorka El Bochi11 de mayo de 202613 min

Deja de leer sobre bugs y empieza a cazarlos

Sin tarjeta · Academy gratis · cancela cuando quieras

Crear cuenta gratis

Respuesta rápida

Web Cache Deception (Omer Gil, 2017) explota que CDNs cachean por extensión de archivo (.css, .js, .png) sin importar el Content-Type real de la respuesta. Atacante pide /account/me.css → la app responde con el HTML del perfil de la víctima → CloudFront ve .css y lo cachea → atacante anónimo pide la misma URL → recibe la página privada cacheada. Funciona contra CloudFront por defecto + apps con routing permisivo. Bounties recurrentes en SaaS Series B+.


1. El concepto en una imagen mental

css
[Víctima autenticada]
   ↓ GET /account/me.css
[App] → routing matchea /account/me → renderiza HTML privado con PII
   ↓ 200 OK, body = HTML del perfil
[CloudFront] → "ah, .css, cacheable" → guarda response en cache key (path)
   ↓ devuelve a víctima

[Atacante anónimo]
   ↓ GET /account/me.css
[CloudFront] → cache HIT → devuelve HTML privado SIN ir al origin

El fallo es la combinación de dos comportamientos sueltos benignos:

  1. La app hace routing permisivo: /account/me.css matchea /account/me y devuelve HTML privado.
  2. CloudFront cachea por extensión sin validar Content-Type ni cookies.

Ninguna pieza por separado es vulnerable. Juntas → leak masivo.


2. Pre-requisitos para que funcione

ComponenteCondición
Routing app/path/anything.css resuelve a /path o /path/anything (catch-all, optional segments)
CloudFront cache rulesCachea *.css, *.js, *.png, *.jpg etc por extensión sin chequear cookies
Respuesta de la appDevuelve 200 con body sensible (no 301 redirect a /login)
Vary headerFalta Vary: Cookie o Cache-Control: private

La condición #1 es lo que más varía. Frameworks con router catch-all (Express con *, Flask con path:, Rails con globbing routes, Next dynamic routes) son candidatos top.


Sigue leyendo el chain completo

La parte que falta incluye el PoC paso a paso, código de explotación y la cadena completa que llevó al impacto. Disponible para suscriptores.

Gratis · sin cuenta

La checklist que repaso en cada objetivo nuevo

47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.

Te das de baja en un clic, desde cualquier correo.

Practica esto en un lab

Cloudfront Cache Deception

Resolver

Sigue aprendiendo · cuenta gratis

Guarda tu progreso, desbloquea payloads avanzados y rankea tus flags.

Crear cuenta

Artículos relacionados

2.786

hunters entrenando

63

labs de hackeos reales

1.767

completaciones

$14.790

pagados por estos bugs

37 flags capturadas esta semana·Hackeos reales de HackerOne · YesWeHack · Bugcrowd·Sin permanencia·Academy gratis

La comunidad

Esto no es una plataforma con usuarios.Es gente rompiendo lo mismo que tú.

Dentro se pregunta, se enseña lo que se ha encontrado y se resuelve en grupo lo que atascaría a cualquiera solo. Se entra gratis: sin cuenta, sin plan y sin dejar el correo.

Entrar a la comunidad de BBLABS en Discord
Entrar al Discord

Es gratis y abierto. No hace falta tener cuenta en BBLABS para entrar.