Saltearse al contenido

Fallos de autenticación

La autenticación verifica que alguien es quien dice ser. Sus fallos permiten suplantar a otro usuario: adivinando credenciales, saltándose pasos del flujo, o abusando de la recuperación y la gestión de sesión. Es la categoría Identification and Authentication Failures del OWASP Top 10, y la vía de entrada de la mayoría de las intrusiones actuales.

Toma de cuentas (ATO) de usuarios y administradores, acceso persistente, y pivote hacia datos y funciones críticas. El coste de un solo fallo (una cuenta admin sin MFA, un reset predecible) suele ser el compromiso completo.

Tres mecanismos entrelazados: autenticación (login, MFA), gestión de sesión (cómo se mantiene la identidad tras el login) y recuperación (reset de contraseña). Un fallo en cualquiera rompe la garantía de identidad. La regla de oro: el servidor decide la identidad en cada paso; el cliente nunca es de fiar.

  • Credenciales débiles: sin política, sin límite → fuerza bruta, credential stuffing (reutilización de brechas) y password spraying.
  • Enumeración de usuarios: mensajes, códigos de estado o tiempos distintos para “usuario no existe” vs “contraseña incorrecta”.
  • MFA defectuoso: se omite yendo al paso posterior, códigos sin límite de intentos, backup codes débiles, “recordar dispositivo” manipulable, race.
  • Recuperación: tokens predecibles/sin caducidad, fuga del token en el Referer, host header poisoning para redirigir el enlace, no invalidar sesiones.
  • Gestión de sesión: identificadores predecibles, sin rotación tras login (fixation), sin caducidad, que sobreviven al logout.
  • Compara respuestas de login válidas/inválidas (texto, código, tiempo) → detectar enumeración.
  • Comprueba límite de intentos (rate limiting) y bloqueo; revisa el flujo de MFA y de reset paso a paso.
Ventana de terminal
# Enumeración por diferencia de respuesta/tamaño
ffuf -w users.txt -X POST -d 'user=FUZZ&pass=x' \
-u https://app.tld/login -mr "no existe" -of csv
# Password spraying (una contraseña frecuente contra muchos usuarios)
ffuf -w users.txt -X POST -d 'user=FUZZ&pass=Primavera2026!' \
-u https://app.tld/login -fc 401
# (hydra/patator son alternativas; respeta SIEMPRE el límite del alcance)
  • MFA: tras introducir usuario+clave, intenta ir directo al recurso post-login saltando el paso del código; reenvía/repite códigos para ver si hay límite; prueba 0000000-9999999 si no hay bloqueo (ventana de brute force).
  • Reset: analiza entropía y caducidad del token; prueba a cambiar el Host/ cabecera para que el enlace apunte a tu dominio (capturas el token).

Credential stuffing (listas de brechas + proxies), spraying (evita bloqueo por usuario), bypass de MFA (salto de paso, brute del código, manipulación de la respuesta JSON mfa:false→omitir), session fixation, y abuso de “remember me” con tokens persistentes.

Burp Intruder, ffuf, hydra, patator; listas de SecLists; análisis de JWT con jwt_tool (ver también la ficha de JWT).

ATO masivo, acceso admin, persistencia vía sesiones/tokens de larga vida, y escalada a otras aplicaciones por reutilización de credenciales.

  • Picos de logins fallidos, patrones de spraying (muchos usuarios, una clave) y stuffing (muchas IPs, misma estructura).
  • Viaje imposible (misma cuenta desde geografías incompatibles), user-agents anómalos, horarios inusuales.
  • Anomalías de MFA: muchos intentos de código, MFA fatigue (ráfagas de push).

Logs de autenticación (éxito/fallo con IP/UA), IdP/SSO, WAF/bot management, y eventos de MFA.

  1. MFA resistente a phishing: passkeys / WebAuthn (FIDO2) para cuentas sensibles; evita SMS cuando sea posible.
  2. Hashing fuerte: Argon2id (o bcrypt/scrypt) con sal única; nunca MD5/SHA pelado.
  3. Política moderna (NIST 800-63B): longitud mínima, cotejo contra contraseñas filtradas (HIBP/k-anonymity), sin rotaciones forzadas ni reglas de composición absurdas.
  4. Rate limiting y detección de stuffing/spraying; errores genéricos y tiempos constantes contra enumeración.
  5. Sesiones: IDs aleatorios, rotación tras login, caducidad, invalidación en servidor al logout y al cambiar contraseña.
  6. Reset: token de un solo uso, alta entropía, caducidad corta; no construir el enlace con el Host de la petición.

Forzar reset e invalidar sesiones de cuentas afectadas, activar/forzar MFA, bloquear IPs/patrones, y revisar accesos posteriores al compromiso.

  • 23andMe (2023) — credential stuffing (reutilización de contraseñas de otras brechas) que acabó exponiendo datos de ~6,9 millones de personas por el grafo de “familiares”.
  • Colonial Pipeline (2021) — acceso inicial por una cuenta VPN sin MFA con una contraseña comprometida; derivó en un incidente de ransomware de impacto nacional.
  • Oleadas de “MFA fatigue” — ataques que spamean notificaciones push hasta que la víctima acepta (mitigadas por number matching / passkeys).

Esta categoría rara vez es un único CVE; busca incidentes y, para componentes concretos, NVD (https://nvd.nist.gov/vuln/search) y GitHub Advisories (https://github.com/advisories).

  • Enumeración de usuarios (texto/código/tiempo) comprobada.
  • Rate limiting/bloqueo en login y en el código MFA.
  • Bypass de MFA: salto de paso, brute del código, manipulación de respuesta.
  • Reset: entropía/caducidad del token, host header, fuga por Referer.
  • Sesión: rotación tras login, caducidad, invalidación en logout/cambio de clave.
  • Pruebas solo contra cuentas propias / en alcance.