Abuso de Forgot_password

Tengo un usuario que está siendo atacado por alguien o por un script que golpea el endpoint de forgot_password muchas veces al día usando su dirección de correo electrónico. Esto ha estado ocurriendo durante varios días. Dado que esto envía correos electrónicos, también podría ser abusivo para el sistema. A partir del archivo de acceso de nginx (access.log), he rastreado la dirección IP de parte de este tiempo hasta otro usuario en el sistema y envié un mensaje de advertencia, pero eso podría no ayudar. También he añadido esta dirección IP a Admin > Logs > Screened IPs; sin embargo, no estoy seguro de qué hará eso, excepto prevenir el inicio de sesión temporalmente. La dirección IP puede cambiar y ha cambiado, y probablemente sea una dirección dinámica, pero también alguien podría activar una VPN y empezar de nuevo.

¿Alguien tiene alguna sugerencia sobre cómo manejar esto?

2 Me gusta

Hola Dan, si no te importa, tengo un par de preguntas primero.

  1. ¿Has suspendido al usuario?
  2. ¿Permites que cualquiera cree una cuenta o apruebas todas las cuentas nuevas?

Puedes suspender al usuario yendo a admin/users/list/active y haciendo clic en el nombre del usuario infractor. Una vez en su página de información, baja hasta Permisos y haz clic en Suspender. Asegúrate de que el usuario haya cerrado sesión, ya que la suspensión podría no hacerse efectiva hasta después de que lo haga. Si aún tiene la sesión iniciada, en la esquina superior derecha de esa misma página hay un cuadro azul para cerrar su sesión manualmente. Una vez que haya cerrado sesión, no podrá volver a entrar con sus credenciales anteriores.

Si apruebas las cuentas nuevas y el “culpable” continúa con su infracción (y estás seguro de quién es), el usuario tendrá que esperar a que apruebes la cuenta. Como ya tienes una (¿o más?) dirección(es) IP que ha usado, si aparece un nuevo usuario con esa IP, sabrás qué hacer. :wink:
También puedes visitar las preferencias del usuario y, bajo Cuenta, ver sus dispositivos usados recientemente, lo que también debería mostrar la(s) dirección(es) IP con la(s) que ha iniciado sesión. Eso podría darte más direcciones IP para filtrar.

Aquí es donde resulta útil que las cuentas necesiten aprobación.

:thinking: ¿Cómo accede esta persona al perfil de otro usuario para solicitar un restablecimiento de contraseña en primer lugar? Esa es la pregunta importante.

2 Me gusta

Visitando la página de “olvidé mi contraseña” e introduciendo su dirección de correo electrónico. Cualquiera puede hacerlo para cualquier usuario.

2 Me gusta

¿Exactamente cuántas veces al día?

2 Me gusta

Bien, “muchas” es relativo.

root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log
214
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.1
147
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.2.gz
181
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.3.gz
140
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.4.gz
134
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.5.gz
251
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.6.gz
110
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.7.gz
100
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.8.gz
gzip: access.log.8.gz: No such file or directory
0
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.9.gz 
1
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.10.gz 
0
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.11.gz 
0
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.12.gz 
0
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.13.gz 
0
root@forum-app:/var/log/nginx# zgrep -c forgot_password access.log.14.gz 
0

Obviamente, esta búsqueda no filtra las solicitudes legítimas. Revisé manualmente los registros de hoy y ayer y vi algunas solicitudes legítimas (no desde la dirección IP repetida). La gran mayoría provienen de una dirección IP repetida que cambia cada pocos días. No es muy grave para el sistema, pero sí para el usuario receptor. Creo que lo único que puedo hacer es configurar nginx para denegar por dirección IP, pero como esta cambia… tal vez, si la verifico y actualizo manualmente durante una o dos semanas, la persona dejará de intentarlo, aunque probablemente solo por un corto tiempo. La víctima dice que esto le ocurrió inicialmente hace unos 1.5 años.

3 Me gusta

Definitivamente es molesto si alguien decide activar la opción de “olvidé mi contraseña” una y otra vez en tu nombre… pero no podemos bloquear al usuario de los restablecimientos de contraseña por esto, ya que bloquear a alguien de los restablecimientos también es una forma de acoso. :thinking:

Creo que tenemos un límite de velocidad aquí del orden de varias veces por minuto; ¿puedes revisar esta ruta de código @riking y confirmar que sigue funcionando? Podríamos aumentarlo, pero eso no podría cubrir de forma segura “unas pocas veces al día”.

Además, creo que prohibir una dirección IP a través de Administración, Registros, Direcciones IP filtradas debería evitar que esa dirección IP solicite un restablecimiento de contraseña, y también deberíamos verificar que eso funcione como se espera @riking.

10 Me gusta

Soy yo quien recibe spam con solicitudes falsas.
Ocurre varias veces por hora

No hay opción para evitar que se me envíe un correo electrónico para restablecer la contraseña, aunque tengo la autenticación en dos pasos (2FA) activada con claves de restablecimiento.

Algunos sitios web que he visitado muestran tu dirección IP antes de que siquiera solicites un restablecimiento de contraseña, indicando que se enviará a tu correo electrónico.

Todo esto es una molestia muy menor, ya que rara vez reviso este correo electrónico para nada. Todos los correos están filtrados y configurados para “marcar mensaje como leído”, de modo que no parece que tenga que leerlos. Configuré el filtro en enero y solo hoy revisé la carpeta (etiqueta en Gmail).

3 Me gusta

La imagen que no pude incluir en la primera respuesta.
Cuando Gmail recibe más de un mensaje con el mismo asunto, los agrupa.
Supongo que después de 100 mensajes iguales, simplemente pasan a los siguientes 100.

5 Me gusta

Buena información. Hagamos algunos avances en esto mañana @riking

6 Me gusta

Una solución sencilla que tienes es cambiar tu correo de test@gmail.com a test+SOMESECRETONLYYOUKNOW@gmail.com.

Los correos de Discourse llegarán a tu Gmail habitual, pero nadie podrá enviarte solicitudes de restablecimiento de contraseña ni adivinar un hash seguro.

Creo que, en la práctica, esto es lo mejor que puedes hacer en este caso.

Podríamos limitar la frecuencia de estas solicitudes hasta una vez por semana y seguiría siendo molesto. Al usar el direccionamiento con +, eliminarás tu problema por completo.

12 Me gusta

Podemos limitar la tasa de solicitudes para un usuario específico, además de las solicitudes desde un lugar determinado (un límite que, como podemos ver, está funcionando bastante bien en este momento). ¿Quizás permitir hasta 2 tokens de restablecimiento no expirados antes de decir “por favor, solo espera el correo electrónico”?

6 Me gusta

Otra aproximación puede consistir en limitar temporalmente los correos electrónicos de restablecimiento de contraseña, por ejemplo, a 3 horas entre tokens.
En caso de que se solicite un correo electrónico de restablecimiento de contraseña antes de que finalice el período de enfriamiento, se puede mostrar un mensaje sencillo:
“Ya hemos enviado un correo electrónico de restablecimiento de contraseña; por favor, revisa tu bandeja de entrada. Si el correo no llega en las próximas 2 horas, contacta con el administrador del sitio para obtener ayuda en %contact_email%”.

2 Me gusta

Cambié el correo en el foro a ‘correo+algo@gmail.com’ y lo probé en modo incógnito con otro navegador. Aún así, logró pasar. Quizás porque la solicitud siempre se realiza solo con el nombre de usuario de origen y nunca con la dirección de correo real.

Por ahora, todas las solicitudes falsas han cesado, ya que Dan debe haber abordado el problema, ya sea en privado con el individuo o por otros medios.

Si tuvieras una opción de pregunta de seguridad (para activarla a nivel de usuario), estoy seguro de que reduciría todas las solicitudes, ya que el troll simplemente no sabría la respuesta. “¿Cuál es tu película favorita?” o “¿Tu restaurante favorito?”.

Gracias a todos por sus rápidas respuestas al intentar resolver este problema, que, lamentablemente, suena como el primero y, ojalá, el último.

3 Me gusta

Supongo que el problema es que se puede rastrear un foro para obtener nombres de usuario y luego iniciar una tormenta de ‘olvidé mi contraseña’ para acosar.

¿Quizás añadamos un modo en el que sea necesario escribir el correo electrónico exactamente para poder usar la opción ‘olvidé mi contraseña’? ‘Olvidé mi contraseña estricto’, desactivado por defecto.

Siento que incluso ser acosado una vez por semana es demasiado; no podemos resolver esto simplemente limitando la tasa de solicitudes.

11 Me gusta

¿Existe alguna forma de ofrecer uno o dos “regalitos” de restablecimiento primero, antes de exigir la escritura exacta, dentro de un cierto período de tiempo? ¿O quizás añadir la exigencia de escritura exacta solo a una cuenta individual después de varios restablecimientos, pero de forma automática y global? :thinking:

Algunos de nosotros literalmente no tenemos ni idea de qué día es, mucho menos recordar sin fallo nuestro correo exacto con facilidad.

:crossed_fingers: @Chinaski, espero que esto se resuelva rápida y definitivamente para ti.

8 Me gusta

Gracias a todos por responder. Espero que lo anterior funcione, ya que parece el remedio más directo en este momento, pero no lo he probado desde que las molestias han disminuido. (El usuario potencialmente atacante dice que desactivó los invitados en su WiFi, pero no podemos estar seguros de que esa fuera la fuente.)

2 Me gusta

Con miles de usuarios activos (aún estamos en proceso de migrar a Discourse), entiendo perfectamente tu frustración. Esto sucede con mucha frecuencia: la gente olvida qué correo electrónico utilizó, etc. Esto ha sido, con diferencia, una de las solicitudes de soporte más comunes a lo largo de los años; es una locura.

2 Me gusta

Requerir la introducción del correo electrónico para la función de ‘olvidé mi contraseña’ seguramente nunca será una opción predeterminada.

Pero si un foro está bajo asedio como en el caso del OP, podría ser un interruptor sencillo que activarías durante unas semanas para eliminar este molesto hackeo.

5 Me gusta

Según

He endurecido las reglas para que, en el peor de los casos, un usuario solo pueda obtener 6 restablecimientos al día. Esto debería limitar los correos electrónicos en cierta medida.

También seguí el consejo de @riking aquí y respetamos los correos electrónicos filtrados, por lo que si bloqueas una IP como administrador, esa IP ya no podrá participar en esta fiesta.

Una gran omisión aquí, @riking, que podría ayudar un poco en la autogestión, es que el correo electrónico de “restablecimiento de contraseña” no incluye la dirección IP de la persona que lo inició:

@codinghorror, ¿qué opinas de agregar la dirección IP del iniciador en los correos de restablecimiento de contraseña (podríamos incluso ocultarla un poco)? Esto permitiría una autogestión mucho mejor.

Jane es atacada
Jane notifica al administrador del sitio que 12.12.12.12 sigue restableciendo contraseñas
El administrador bloquea 12.12.12.12

Las personas tienen acceso a muchas direcciones IP, por lo que esto aún puede convertirse en un juego de gato y ratón, pero al menos es mejor que antes y los límites son más estrictos.

Facebook utiliza este truco, que de alguna manera apoyo implementar:

Esto les permite evitar incluir direcciones IP en el correo electrónico; simplemente lo rastrean del lado del servidor y el enlace contiene un ID en la base de datos. Esto significa que puede convertirse en una operación de un solo clic para bloquear a un abusador.

Para dar contexto, Facebook requiere correo electrónico para el restablecimiento de contraseña (ni siquiera tienen restablecimiento de contraseña en el sentido tradicional; simplemente es iniciar sesión mediante correo electrónico).

10 Me gusta

Revisé 100 de las solicitudes falsas y encontré un patrón, posible uso de un script.
Este patrón es consistente en las 100 solicitudes falsas dentro de un mismo grupo en Gmail.

3 Me gusta