Username Enumeration Prevention

Mitiga los ataques de enumeración de nombres de usuario suprimiendo los mensajes de error en los formularios de restablecimiento de contraseña y convirtiendo las respuestas 403 Acceso Denegado en 404 No Encontrado en las rutas de perfil de usuario.

username_enumeration_prevention
18,560 sites
59
drupal.org

Install

Drupal 11, 10, 9 v8.x-1.4
composer require 'drupal/username_enumeration_prevention:8.x-1.4'
Drupal 8 v8.x-1.3
composer require 'drupal/username_enumeration_prevention:8.x-1.3'

Overview

Username Enumeration Prevention es un módulo enfocado en la seguridad que protege los sitios Drupal contra ataques de enumeración de nombres de usuario. La enumeración de nombres de usuario es una técnica utilizada por actores maliciosos para identificar nombres de usuario válidos en aplicaciones web, que luego pueden usarse en ataques posteriores como credential stuffing, ataques de fuerza bruta o ingeniería social.

El módulo funciona a través de dos mecanismos principales: Primero, modifica el formulario de restablecimiento de contraseña para evitar que muestre mensajes que revelen si un nombre de usuario o dirección de correo electrónico existe en el sistema. Mensajes como "%name está bloqueado o aún no ha sido activado" y "%name no se reconoce como nombre de usuario o dirección de correo electrónico" se ocultan a los usuarios finales mientras se registran para los administradores. Segundo, implementa un event subscriber que convierte las respuestas HTTP 403 Acceso Denegado en respuestas 404 No Encontrado en todas las rutas relacionadas con usuarios, evitando que los atacantes distingan entre usuarios inexistentes y usuarios a los que simplemente no pueden acceder.

El módulo también proporciona advertencias en el informe de estado en tiempo de ejecución si los usuarios anónimos tienen el permiso "access user profiles", ya que esta configuración eludiría las protecciones del módulo.

Features

  • Suprime los mensajes de error en el formulario de restablecimiento de contraseña que podrían revelar nombres de usuario o direcciones de correo electrónico válidos
  • Convierte las respuestas HTTP 403 Acceso Denegado en 404 No Encontrado en el perfil de usuario y rutas relacionadas con usuarios
  • Registra los intentos de restablecimiento de contraseña de usuarios bloqueados para revisión administrativa sin exponer información a los atacantes
  • Mantiene la funcionalidad de protección contra inundaciones mientras suprime los mensajes de error relacionados que podrían ayudar a la enumeración
  • Proporciona verificación de requisitos en tiempo de ejecución advirtiendo si los usuarios anónimos pueden acceder a perfiles de usuario
  • Compatible con Drupal 9.5, 10 y 11

Use Cases

Prevención de enumeración mediante restablecimiento de contraseña

Cuando un atacante intenta enumerar nombres de usuario válidos enviando el formulario de restablecimiento de contraseña con varios nombres de usuario, normalmente recibe mensajes diferentes para nombres de usuario válidos vs inválidos. Con este módulo, todos los envíos reciben la misma respuesta independientemente de si el nombre de usuario existe, está bloqueado o es inválido. Esto evita que los atacantes construyan una lista de cuentas de usuario válidas.

Protección de URLs de perfil de usuario

Sin este módulo, un atacante podría enumerar IDs de usuario válidos visitando /user/1, /user/2, etc. - los usuarios existentes devolverían 403 Acceso Denegado mientras que los usuarios inexistentes devuelven 404. Con este módulo, ambos escenarios devuelven 404, haciendo imposible distinguir entre ellos.

Cumplimiento con estándares de seguridad

Las organizaciones que siguen estándares de seguridad como las directrices de OWASP que recomiendan prevenir la enumeración de usuarios pueden implementar este módulo como parte de su estrategia de fortalecimiento de seguridad.

Protección contra la preparación de credential stuffing

Los atacantes frecuentemente enumeran nombres de usuario válidos antes de lanzar ataques de credential stuffing. Al prevenir la enumeración de nombres de usuario, este módulo dificulta que los atacantes preparen ataques dirigidos contra cuentas válidas conocidas.

Tips

  • Revisa las configuraciones de Views y visualización de contenido que podrían exponer nombres de usuario a través de la información 'Enviado por' en nodos y comentarios
  • Considera usar el módulo Security Kit para deshabilitar el autocompletado del navegador en formularios de inicio de sesión
  • Recuerda que el equipo de seguridad de Drupal no considera la enumeración de nombres de usuario como una vulnerabilidad crítica, pero puede ser una preocupación para sitios de alta seguridad
  • El módulo registra los intentos de restablecimiento de contraseña de usuarios bloqueados - revisa tus registros periódicamente para detectar actividad sospechosa
  • Prueba la efectividad del módulo intentando restablecer contraseñas para usuarios inexistentes y bloqueados desde una sesión anónima

Technical Details

Hooks 2
hook_form_user_pass_alter

Modifica el formulario de restablecimiento de contraseña para agregar una validación personalizada que suprime los mensajes de error de enumeración de nombres de usuario

hook_requirements

Implementa requisitos en tiempo de ejecución para verificar si los usuarios anónimos tienen el permiso 'access user profiles', lo cual eludiría las protecciones del módulo

Troubleshooting 4
El módulo está instalado pero los usuarios aún pueden enumerar nombres de usuario a través de URLs de perfil

Verifica el informe de estado en /admin/reports/status. Si muestra una advertencia sobre el acceso de usuarios anónimos a perfiles, elimina el permiso 'access user profiles' del rol anónimo en /admin/people/permissions.

Los correos electrónicos de restablecimiento de contraseña no se están enviando

El módulo no impide que se envíen correos de restablecimiento de contraseña a usuarios válidos. Si los correos no se envían, verifica la configuración de tu sistema de correo, los filtros de spam y asegúrate de que la cuenta de usuario exista y esté activa. El módulo solo suprime los mensajes de error, no la funcionalidad real.

Los mensajes de control de inundaciones no se muestran

Este es el comportamiento esperado. El módulo suprime intencionalmente los mensajes de control de inundaciones porque podrían revelar que un nombre de usuario es válido (un atacante sabría que encontró un usuario válido si recibe limitación de velocidad). La protección contra inundaciones sigue funcionando del lado del servidor.

El informe de estado muestra una advertencia sobre el acceso anónimo a perfiles pero necesito este permiso

Si tu sitio requiere que los usuarios anónimos vean perfiles, entiende que esto crea una vulnerabilidad inherente de enumeración de nombres de usuario que este módulo no puede mitigar completamente. Considera si este permiso es realmente necesario para tu caso de uso.

Security Notes 5
  • Los usuarios con el permiso 'access user profiles' aún pueden enumerar nombres de usuario visitando URLs /user/UID - el módulo solo puede convertir 403 en 404, no prevenir el acceso por completo
  • La información 'Enviado por' en nodos y comentarios puede exponer nombres de usuario - considera ajustar la configuración de visualización o usar hooks de format_username
  • Las Views que muestran información de usuario pueden exponer nombres de usuario - audita tus configuraciones de Views
  • El autocompletado del navegador puede revelar nombres de usuario - usa el módulo Security Kit para deshabilitar esta función
  • Este módulo aborda un vector de enumeración de nombres de usuario; una estrategia de seguridad integral debe abordar todos los puntos potenciales de exposición