← Volver al buscador
Seguridad web Avanzado

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.

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

[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.

Crear cuentaSuscribirmeVer labs relacionados

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

Premium$3500

Client-side admin bypass — boolean manipulation + BAC en SPA moderna

Report real Quora: SPA con isAdmin boolean en localStorage que controla UI + backend que no valida server-side. Cómo encadenar boolean flip con BAC para admin takeover.

13 minbacadmin-bypassclient-side
Leer artículo
Premium

Cloudflare WAF — payload size bypass, oversized body, plan-specific limits

Bypass de Cloudflare WAF mediante exploitation de body size limits por plan (Free 100kb, Pro 100kb, Business 500kb, Enterprise 1mb): oversize payload trick + chunked transfer encoding.

13 mincloudflarewaf-bypasspayload-size
Leer artículo
Premium

Headless browsers — SSRF y RCE en endpoints que renderizan URLs

Endpoints que aceptan URLs para screenshots/PDF (Puppeteer, Playwright, wkhtmltopdf) son SSRF goldmine: cloud metadata, file://, gopher://, JS injection con XSS-to-RCE en chromium sandbox.

14 minheadless-browserssrfpuppeteer
Leer artículo
Nivel avanzadoToda la Academy

Contenido educativo de Kerb3r0ps. Úsalo solo sobre sistemas para los que tengas permiso. Volver al buscador.