1. Descripción técnica
Una contraseña es débil cuando un atacante puede predecirla o recuperarla dentro de un número práctico de intentos. Las causas habituales son secretos comunes, reutilización del nombre de usuario, patrones contextuales, exposición previa y almacenamiento con hashes rápidos sin salt.
Un ataque en línea valida candidatos contra el servicio y está condicionado por el bloqueo y la limitación de intentos. Un ataque fuera de línea opera sobre un hash recuperado y no genera intentos contra la cuenta. Ambos pueden usar un diccionario, pero tienen riesgos, velocidad y evidencias diferentes.
2. Impacto
Una credencial válida permite asumir la identidad de la cuenta. La reutilización puede extender el compromiso a SSH, SMB, paneles web u otros sistemas. Si la cuenta es administrativa, una contraseña débil elimina la necesidad de una escalada posterior.
3. Condiciones necesarias
- Existe una cuenta o hash susceptible de validación.
- El secreto está dentro del espacio de búsqueda elegido.
- Para pruebas en línea, el servicio permite suficientes intentos.
- Para crackeo fuera de línea, el formato del hash se identifica correctamente.
La longitud de una cadena hexadecimal no demuestra por sí sola el algoritmo. La hipótesis se confirma cuando la herramienta recupera un candidato y este se valida por una vía independiente.
4. Validación y detección
En una evaluación autorizada se limita primero el conjunto de usuarios y palabras con evidencia contextual. La salida de la herramienta debe distinguirse de la validación final contra el servicio.
En defensa se revisan tasas de fallo, intentos distribuidos, accesos desde ubicaciones nuevas, reutilización y contraseñas presentes en blocklists de valores comunes o comprometidos.
5. Explotación documentada en los writeups
5.1. Adivinación en línea
- 001-simple valida la combinación
bogo:bogocontra SMB. - 005-gift encuentra una contraseña común para
rooten SSH. - 014-darkside prueba una cuenta concreta descubierta en un backup.
- 019-vivifytech cruza nombres de empleados con palabras publicadas por el sitio.
5.2. Recuperación fuera de línea y patrones
- 012-whitedoor recupera un hash bcrypt con diccionario.
- 020-vinylizer recupera un MD5 sin salt y valida el resultado por SSH.
- 010-literal recupera un secreto de foro y comprueba una variante contextual para SSH.
6. Mitigación
- Rechazar contraseñas comunes, comprometidas y relacionadas con el usuario o el servicio.
- Permitir contraseñas largas y uso de gestores.
- Aplicar rate limiting progresivo a los intentos en línea.
- Incorporar autenticación multifactor cuando el riesgo lo justifique.
- Almacenar secretos con una función de derivación lenta, sal única y parámetros actuales.
- Forzar el cambio cuando exista evidencia de compromiso, no por una rotación arbitraria.
7. Clasificación
- CWE: CWE-521
- Vector: adivinación en línea o recuperación fuera de línea
- Impacto: acceso como la cuenta afectada