A tu propio ritmo

Explora nuestra extensa colección de cursos diseñados para ayudarte a dominar varios temas y habilidades. Ya seas un principiante o un aprendiz avanzado, aquí hay algo para todos.

Bootcamp

Aprende en vivo

Únete a nosotros en nuestros talleres gratuitos, webinars y otros eventos para aprender más sobre nuestros programas y comenzar tu camino para convertirte en desarrollador.

Próximos eventos en vivo

Catálogo de contenidos

Para los geeks autodidactas, este es nuestro extenso catálogo de contenido con todos los materiales y tutoriales que hemos desarrollado hasta el día de hoy.

Tiene sentido comenzar a aprender leyendo y viendo videos sobre los fundamentos y cómo funcionan las cosas.

Buscar en lecciones


IngresarEmpezar
← Regresar a lecciones
Editar en Github

Que es la Autenticación Rota o Broken Authentication: Entendiendo y Previniendo una Vulnerabilidad Crítica en la Seguridad Web

Un Ejemplo Técnico Específico de Autenticación Rota

En octubre de 2013, Adobe sufrió una gran violación de datos que expuso las contraseñas cifradas y la información de las tarjetas de crédito de millones de usuarios. La brecha, que afectó a aproximadamente 38 millones de usuarios activos, fue el resultado de mecanismos de autenticación rotos. Los hackers pudieron acceder a los sistemas de Adobe y robar datos de los usuarios, incluidas contraseñas mal cifradas. Este incidente destaca la importancia crítica de los sistemas de autenticación robustos y las graves consecuencias de la Autenticación Rota, una vulnerabilidad que sigue afectando a muchas aplicaciones web hoy en día y por eso forma parte del OWASP top 10.

La Autenticación Rota es una vulnerabilidad grave de seguridad que ocurre cuando las aplicaciones web implementan incorrectamente la autenticación y la gestión de sesiones. Este fallo puede llevar a accesos no autorizados, brechas de datos y cuentas de usuario comprometidas, como lo demostró el incidente de Adobe. En esta lección, exploraremos el concepto de Autenticación Rota, su impacto y cómo prevenir tales fallas de seguridad devastadoras.

Un Ejemplo Técnico Específico de Autenticación Rota

Veamos un ejemplo concreto de autenticación rota en una aplicación web. Consideremos el siguiente escenario que involucra un mecanismo defectuoso de restablecimiento de contraseña:

Funcionalidad Vulnerable de Restablecimiento de Contraseña

Imagina una aplicación web que permite a los usuarios restablecer sus contraseñas. El proceso funciona de la siguiente manera:

  1. El usuario solicita un restablecimiento de contraseña ingresando su dirección de correo electrónico.
  2. La aplicación genera un token de restablecimiento de contraseña y lo envía al correo del usuario.
  3. El usuario hace clic en el enlace de restablecimiento, que incluye el token como parámetro.
  4. El usuario es dirigido a una página donde puede ingresar una nueva contraseña.

Aquí está por qué este proceso de inicio de sesión es potencialmente problemático:

  1. Generación de Token Débil: Si el token de restablecimiento de contraseña es predecible o no es lo suficientemente aleatorio, un atacante podría adivinar o generar tokens válidos.

  2. Token en la URL: Enviar el token como un parámetro de la URL lo expone a varios riesgos:

    • Puede ser registrado en los logs del servidor, el historial del navegador o los logs de proxy.
    • Puede ser visible para cualquier persona que esté mirando sobre el hombro del usuario.
    • Podría compartirse de manera no intencionada si el usuario reenvía el enlace.
  3. Falta de Expiración del Token: Si el token no expira después de un corto período o después de su uso, un atacante que acceda al token podría utilizarlo indefinidamente.

  4. No Verificación del Usuario: La página de restablecimiento no verifica que el usuario que solicita el cambio de contraseña sea el mismo que inició el proceso de restablecimiento.

  5. Posibilidad de Enumeración: Si la aplicación se comporta de manera diferente cuando se ingresa un correo válido vs. inválido, podría permitir a los atacantes enumerar cuentas de usuario válidas.

  6. Comunicación Insegura: Si alguna parte de este proceso ocurre a través de HTTP en lugar de HTTPS, el token y la nueva contraseña podrían ser interceptados.

  7. Sin Limitación de Intentos: Sin límites en los intentos de restablecimiento de contraseña, un atacante podría abusar de esta funcionalidad para denegación de servicio o para forzar tokens de restablecimiento.

Estas vulnerabilidades podrían permitir que un atacante tome el control de cuentas de usuario explotando la funcionalidad de restablecimiento de contraseña, demostrando un claro caso de autenticación rota.

Ejemplo Específico

Supongamos que este es el enlace que se envía para restablecer la contraseña:

1https://example.com/reset-password?token=1234567890&user_id=42

Este enlace es vulnerable por varias razones:

  1. Token predecible: El token "1234567890" parece ser una simple secuencia numérica, que podría ser fácilmente adivinada o forzada.
  2. Exposición del ID de Usuario: Incluir el parámetro user_id en la URL expone directamente información sobre la estructura de las cuentas de usuario.
  3. Falta de cifrado: El token y el ID de usuario se envían como texto plano en la URL, haciéndolos susceptibles a intercepciones.
  4. Sin expiración: No hay indicación de cuándo expira este enlace, lo que podría permitir su uso indefinido si es interceptado.
  5. Enviado a través de HTTP: Si este enlace se envía a través de HTTP en lugar de HTTPS, es vulnerable a ataques de intermediarios (man-in-the-middle).

Un enlace más seguro de restablecimiento de contraseña podría verse así:

1https://example.com/reset-password?token=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

Esta versión mejorada:

  • Utiliza un token más largo y aleatorio (más difícil de adivinar).
  • No expone el ID de usuario.
  • Debe enviarse a través de HTTPS.
  • El token debe tener un tiempo de expiración corto (por ejemplo, 1 hora).
  • Debe ser de un solo uso y no reutilizable.

Recuerda, la seguridad del proceso de restablecimiento de contraseña no solo depende del enlace en sí, sino también de cómo se genera, almacena y procesa en el servidor.

Vulnerabilidades Comunes de Autenticación Rota

  1. Políticas de contraseña débiles Ejemplo: Un sistema que permite contraseñas como "123456" o "password"

  2. Relleno de credenciales Ejemplo: Un atacante utiliza una lista de combinaciones de correo/contraseña de una violación de datos en el Sitio A para intentar inicios de sesión en el Sitio B

  3. Ataques de fuerza bruta Ejemplo: Un atacante utiliza un script para probar miles de contraseñas comunes en una sola cuenta de usuario

  4. Fijación de sesión Ejemplo: Un atacante configura una ID de sesión en el navegador de un usuario, espera a que el usuario inicie sesión, y luego usa esa misma ID de sesión para secuestrar la sesión autenticada.

    Para elaborar:

    1. El atacante crea un enlace malicioso o usa una vulnerabilidad de cross-site scripting (XSS) para configurar una ID de sesión conocida en el navegador de la víctima.
    2. Esta ID de sesión generalmente se configura a través de una cookie o un parámetro de URL.
    3. La víctima luego inicia sesión en el sitio web legítimo, que asocia su sesión autenticada con la ID de sesión controlada por el atacante.
    4. Una vez que la víctima ha iniciado sesión, el atacante puede usar la misma ID de sesión para acceder a la cuenta de la víctima sin necesitar sus credenciales.
    5. Este ataque explota la falla del sitio web al no generar nuevas IDs de sesión al iniciar sesión o validar correctamente el origen de las IDs de sesión.
  5. Gestión insegura de sesiones Ejemplo: Un sitio web que almacena tokens de sesión en cookies fácilmente accesibles sin cifrado o expiración adecuada

  6. Falta de autenticación multifactor Ejemplo: Un sitio web bancario que solo requiere un nombre de usuario y contraseña para iniciar sesión, sin ningún paso de verificación adicional

Cómo Prevenir la Autenticación Rota

  1. Implementa políticas de contraseñas seguras.
  2. Utiliza autenticación multifactor.
  3. Implementa una gestión adecuada de sesiones.
  4. Limita los intentos fallidos de inicio de sesión.
  5. Utiliza protocolos de comunicación seguros (HTTPS).
  6. Implementa mecanismos seguros de recuperación de contraseñas.

Herramientas para Detectar Autenticación Rota

Existen varias herramientas que pueden ser utilizadas para identificar y probar vulnerabilidades de autenticación rota:

  1. Burp Suite

    • Escáner de vulnerabilidades web profesional con módulos específicos para probar autenticaciones.
    • Puede interceptar y modificar solicitudes para probar varios escenarios de autenticación.
    • Ejemplo de uso:
      # Usa el Intruder de Burp Suite para realizar un ataque de fuerza bruta
      1. Intercepta una solicitud de inicio de sesión
      2. Envíalo a Intruder
      3. Establece posiciones de payload para los campos de usuario y contraseña
      4. Carga listas de palabras para credenciales comunes
      5. Inicia el ataque y analiza los resultados
      
  2. **OWASP ZAP (Zed Attack Proxy

)**

  • Escáner de seguridad de aplicaciones web de código abierto
  • Incluye reglas de escaneo específicas para autenticación
  • Ejemplo de uso:
    # Usa el Escaneo Activo de ZAP para probar vulnerabilidades de autenticación
    1. Configura ZAP como proxy para tu navegador
    2. Navega a través de la aplicación objetivo, incluyendo el proceso de inicio de sesión
    3. Haz clic derecho en una URL en ZAP y selecciona "Atacar" -> "Escaneo Activo"
    4. Revisa la pestaña "Alertas" para cualquier hallazgo relacionado con autenticación
    
  1. Hydra

    • Herramienta de línea de comandos para ataques de fuerza bruta contra varios protocolos
    • Útil para probar la fortaleza de contraseñas y políticas de bloqueo de cuentas
    • Ejemplo de uso:
      1# Realiza un ataque de fuerza bruta contra un formulario web 2hydra -l admin -P /ruta/a/lista_de_palabras.txt example.com http-post-form "/login.php:username=^USER^&password=^PASS^:Login failed"
  2. Nmap

    • Herramienta de escaneo y descubrimiento de redes con scripts para probar autenticaciones
    • Ejemplo de uso:
      1# Usa el script http-brute de Nmap para probar credenciales débiles 2nmap -p80 --script http-brute --script-args 'http-brute.path=/login.php,userdb=users.txt,passdb=passwords.txt' example.com
  3. Metasploit

    • Marco de pruebas de penetración con módulos para probar autenticaciones
    • Ejemplo de uso:
      1# Usa el módulo auxiliary/scanner/http/http_login de Metasploit 2use auxiliary/scanner/http/http_login 3set RHOSTS example.com 4set RPORT 80 5set USERNAME admin 6set PASS_FILE /ruta/a/lista_de_palabras.txt 7set TARGETURI /login.php 8run
  4. Scripts Personalizados

    • Se pueden usar Python u otros lenguajes de scripting para crear herramientas personalizadas.
    • Ejemplo de script Python para probar gestión débil de sesiones:
      1import requests 2 3def test_session_fixation(url): 4 # Crear una sesión y obtener una ID de sesión 5 session = requests.Session() 6 response = session.get(url) 7 initial_session_id = session.cookies.get('session_id') 8 9 # Realizar el inicio de sesión (reemplazar con el proceso de inicio de sesión real) 10 login_data = {'username': 'testuser', 'password': 'testpass'} 11 response = session.post(url + '/login', data=login_data) 12 13 # Comprobar si la ID de sesión cambió después del inicio de sesión 14 post_login_session_id = session.cookies.get('session_id') 15 16 if initial_session_id == post_login_session_id: 17 print("¡Posible vulnerabilidad de fijación de sesión detectada!") 18 else: 19 print("La ID de sesión cambió después del inicio de sesión. Se observó buena práctica.") 20 21# Uso 22test_session_fixation('https://example.com')

Al usar estas herramientas, asegúrate de tener la autorización adecuada para probar los sistemas objetivo y cumplir con todas las leyes y regulaciones relevantes.