Enviar códigos de un solo uso por correo es peor que usar contraseñas
(blog.danielh.cc)- Recientemente, muchos servicios han adoptado el método de inicio de sesión con códigos de 6 dígitos por correo electrónico o número de teléfono
- El usuario ingresa su correo o número de teléfono, recibe un código de verificación de 6 dígitos y lo introduce para iniciar sesión
- Este método provoca vulnerabilidades graves en la seguridad de las cuentas
- Un atacante puede simplemente introducir el correo electrónico de otra persona en un servicio legítimo para solicitar el envío de un código de verificación
- Esto genera el problema de que al usuario le resulta difícil saber si el código recibido realmente corresponde a una situación en la que debe usarse o si se trata de un intento de phishing
- Las herramientas tradicionales de prevención de phishing, como los password managers (administradores de contraseñas), no son efectivas
- En la práctica, este método de códigos de verificación sigue siendo explotado de forma continua
- En el inicio de sesión de cuentas de Minecraft operado por Microsoft también se usa un método similar
- En diversas comunidades en línea y medios como Reddit y YouTube se han reportado múltiples casos de robo de cuentas
Conclusión
El método de autenticación por correo electrónico con códigos de 6 dígitos es más vulnerable de lo esperado en términos de seguridad
- En comparación con el sistema tradicional de contraseñas, el riesgo de phishing aumenta considerablemente
- Aunque se introdujo para mejorar la experiencia del usuario o la seguridad, en la práctica puede provocar resultados peores
3 comentarios
No me identifica mucho, porque me parece que es un truco que solo funciona en circunstancias muy específicas.
Si usas passkeys y luego pierdes el dispositivo, de verdad sería súper complicado...
Opiniones de Hacker News
El patrón de ataque funciona así
1) El usuario se registra en un sitio fraudulento
2) Ese sitio le indica: “Te enviamos un código de inicio de sesión del sitio GOOD por correo; ingrésalo”
3) El sitio fraudulento inicia en el sitio GOOD el flujo de “iniciar sesión con código de un solo uso por correo” usando el correo del usuario
4) El sitio GOOD le envía al usuario el código de inicio de sesión por correo
5) El usuario ve que el correo viene de GOOD, confía en él e ingresa el código
6) El usuario introduce el código en el sitio fraudulento
7) El sitio fraudulento usa ese código para iniciar sesión en el sitio GOOD haciéndose pasar por el usuario
Por eso, el método de autenticación de “enviar códigos de un solo uso por correo” es muy vulnerable al phishing
El método de “hacer clic en un enlace dentro del correo” es un poco mejor, porque es más incómodo y sospechoso que el usuario copie y pegue ese enlace en el sitio fraudulento
Aun así, si un servicio de correo popular empieza de repente a bloquear esos correos de inicio de sesión o incluso los enlaces mismos, muchos usuarios podrían quedarse sin poder iniciar sesión
Passkeys es la forma más correcta de hacerlo
El soporte de passkeys en los administradores de contraseñas está mejorando cada vez más
Incluso si pierdes el dispositivo donde guardaste tus passkeys y con eso pierdes todas, sigo convencido de que es mucho más seguro que el esquema tradicional de contraseñas
Prefiero que la abuela tenga que ir al banco para recuperar acceso a su cuenta antes de que alguien le robe todo su dinero con phishing
El problema de las passkeys es más complejo que simplemente “si pierdes el dispositivo, pierdes el acceso” (según la configuración, puede haber solución incluso si se pierde el dispositivo)
El mayor problema es la attestation
Permite que los servicios bloqueen a quienes usan herramientas que aumentan la libertad del usuario, como soluciones de autenticación de código abierto
Las passkeys y los protocolos tipo challenge-response originalmente podían haber sido una mejora enorme para reemplazar las contraseñas
Pero en la práctica están diseñados de una manera que fortalece todavía más el dominio de BigTech y reduce la libertad del usuario
Sobre eso de que “es mejor que la abuela vaya al banco a recuperar la cuenta”
Hay que pensar qué pasa si alguien la amenaza con un arma, la obliga a desbloquear la cuenta y además le roba todo el dinero
En el país del tercer mundo donde vivo, el robo de smartphones es tan grave que incluso 2FA resulta inviable en la práctica
Una vez me tocó recuperar 2FA y fue un infierno
Con contraseñas, desde cualquier lugar bastaba con entrar a Bitwarden y listo
Configuré una passkey en github y confirmé que está guardada en Chrome
Cuando intento iniciar sesión en github con la passkey, Chrome muestra una ventana emergente pidiendo el PIN del administrador de contraseñas de Google
No sé cuál es ese PIN y tampoco encuentro forma de restablecerlo
No hay ninguna indicación sobre ese PIN ni en el perfil de Google, ni en el administrador de contraseñas, ni en la configuración de seguridad
En cuanto a la idea de que está bien que la abuela vaya al banco para recuperar la cuenta
Yo sí puedo ir personalmente al banco o al help desk de TI de una empresa para recuperar una cuenta,
pero no puedo ir a las oficinas centrales de Google, Facebook o Xitter para que hagan eso
Las passkeys ligadas al dispositivo tienen una probabilidad muy alta de fallar en casos así
La mayoría de los usuarios ni siquiera piensa en este tipo de situaciones
Las passkeys por sí solas no bastan
La idea es no repetir los mismos errores de siempre
El administrador de contraseñas debería ser la base, y solo en casos realmente excepcionales (por ejemplo, cuentas de correo o cuentas financieras) habría que introducir MFA dedicado
También creo que la configuración de MFA debería obligar a establecer al menos 3 métodos, y requerir usar 2 o más de ellos
Si no admite casi todos los métodos —códigos impresos, apps de autenticación independientes del sistema operativo, llaves de hardware como yubikey, etc.— entonces ese MFA no vale la pena
Recibo cuatro veces al día correos de notificación de solicitud de restablecimiento de contraseña de mi cuenta Microsoft
Son correos con un número de 6 dígitos, y con eso se puede recuperar la cuenta
Al final, eso significa que un atacante puede intentar secuestrar mi cuenta 4 veces al día con una probabilidad de 1 en un millón cada vez
Si lo intenta contra miles de cuentas, cada día puede romper algunas gratis
Incluso envié un reporte de seguridad sobre esto, pero se negaron a actuar diciendo que matemáticamente no demostraba suficientemente la vulnerabilidad
Así que lo único que queda es aguantar el spam y rezar para que no me roben la cuenta
Lo resolví agregando un alias de inicio de sesión
Bloqueé el inicio de sesión con el correo original de la cuenta (el correo público) y dejé que solo se pueda iniciar sesión con un alias que es una cadena aleatoria privada
Desde entonces no he vuelto a ver ni un solo intento de inicio de sesión externo
[Cómo configurarlo: account.microsoft.com > Tu información > preferencias de inicio de sesión > agregar correo > agregar alias y establecerlo como predeterminado > en preferencias de inicio de sesión elegir permitir solo el alias]
A mí me pasó lo mismo
Sospecho que quizá tenga que ver con haber tenido que usar Microsoft Teams
Si un atacante usara este método contra 125,000 cuentas, podría sacar una cuenta al día en promedio
Si no apunta a una cuenta concreta sino al conjunto completo, la eficiencia por tiempo invertido es bastante buena
Para resolver esto, en vez de un límite fijo de 4 intentos, habría que aplicar exponential backoff aumentando el tiempo de espera con cada fallo
A mí también me siguen llegando mensajes parecidos desde una cuenta vieja de Instagram
“¿Tienes problemas para iniciar sesión? ¡Haz clic aquí para cambiar tu contraseña!”
Me pasó exactamente lo mismo con una cuenta vieja e inútil
Revisé las direcciones IP de los intentos de inicio de sesión y venían de varios ISP de todo el mundo, en su mayoría desde redes /16 distintas entre sí
Si hasta para una cuenta “inútil” están movilizando una botnet, me preocupa cuánto peor debe ser para la gente realmente expuesta a amenazas
Agregué 2FA y se resolvió por completo
Todavía no sé cómo descubrieron ese flujo de inicio de sesión con código de 6 dígitos (porque a mí siempre me dejaba entrar directo después de poner la contraseña)
Aun así, desde que agregué 2FA no he vuelto a ver un solo intento adicional
Los códigos 2FA también los guardo en el administrador de contraseñas
Me alegra que ya no puedan atacar la “contraseña” automática de 6 dígitos de Microsoft (¡ni siquiera letras, solo números!)
Lo peor de este tipo de autenticación es que empeora todavía más los hábitos y expectativas de los usuarios
Si usas un administrador de contraseñas moderno como 1password, es mucho más fácil, seguro y rápido que los tokens por correo
Solo hay que prestar un poco de atención durante la configuración inicial y la verificación en unos cuantos dispositivos
Igual que cuando te mudas y haces copias de la llave, creo que solo puedes quedarte tranquilo después de guardar la contraseña en el administrador y comprobar que ya se sincronizó en otros dispositivos
La gente sí puede hacerlo
Sin saber de cifrado ni del concepto de 2FA, basta con dar clic en “crear nueva contraseña” y usar la contraseña aleatoria que guarda la app
Con las passkeys pasa lo mismo, solo que hay que pensar no en guardarlas en el almacenamiento interno del dispositivo, sino con respaldo y recuperación en mente
Irónicamente, el método antiguo (correo y contraseña) en realidad funciona mejor
Como el administrador de contraseñas autocompleta de inmediato, en la práctica es mucho más rápido
Las passkeys incluso podrían ser más rápidas que eso
A mí también me frustra, pero el 80% de la gente no técnica a mi alrededor parece totalmente ignorante en temas de seguridad y vive resignada
El único caso más o menos exitoso que he visto es escribir los datos de la cuenta en una libretita y asegurarse de que la contraseña tenga números y letras
Entiendo cuál es el problema de este flujo
Por lo que he visto, este esquema de contraseña de un solo uso es para la gente no técnica que me rodea la forma de autenticación más familiar después de la contraseña
En el pueblito donde vivo, los administradores de contraseñas o las passkeys son todavía más difíciles; aunque les expliques en persona cómo usarlos, simplemente no logran entenderlos
El modelo mental les resulta demasiado ajeno, y la UX es demasiado compleja para que la comprendan
Hasta que aparezca algo que el público entienda de forma intuitiva, creo que la contraseña y este método “problemático” de código de un solo uso van a seguir dominando por pura simplicidad
Incluso si usas una contraseña buena, la recuperación de cuenta cuando “olvidas” la contraseña suele usar exactamente este mismo patrón de código de un solo uso
Al final, un atacante solo tiene que actuar como si la hubiera “olvidado” y termina iniciando sesión a través de ese flujo de recuperación
Yo también uso el sistema de código de un solo uso para iniciar sesión en un servicio que hice
Pero como no es un servicio sensible, el objetivo no es endurecer al máximo la autenticación
Incluso yo lo llamo ICGAFAS (“I Couldn't Give A Factor” Auth System), dejando claro desde el principio que no me importa mucho la seguridad
La autenticación basada en correo también añade trabajo para los administradores, como lidiar con problemas de envío y entrega de SMTP
Al final, para evitar listas negras o filtros de spam, la realidad es que tienes que usar un servicio relay de terceros
Me molesta muchísimo que tantos servicios estén obligando este método de código de un solo uso en lugar del clásico correo+PW o el inicio de sesión social
Yo quiero que me dejen usar mi contraseña de 100 caracteres
Tú no eres el usuario objetivo
Más bien formas parte de una minoría muy poco común
A largo plazo hay que pensar en una solución que pueda conectar con “la mayoría”
No creo que las contraseñas largas, como una de 100 caracteres, tengan mucho sentido
La longitud termina truncándose según el key length que realmente usa la criptografía por debajo
Revisé si este tipo de autenticación está oficialmente permitido en los documentos de NIST (NIST 800-63b section 5.1.2.1)
Si se considera un “Look-up Secret Authenticator”, no parece haber ningún problema especial
En esencia, se está abusando de un método que originalmente significaba códigos de autenticación preentregados (como códigos de recuperación), usándolo en tiempo real y como única opción
Sí creo que este método es vulnerable al phishing, pero tampoco es fácil afirmar tajantemente que sea más peligroso que el esquema tradicional de usuario/contraseña
Por ejemplo, si se pide un código de 6 dígitos enviado al correo del usuario, este no puede distinguir si el código es para un inicio de sesión legítimo o uno falso
Eso sí, el atacante también podría engañar al usuario con una página que solo parezca convincente, como una cuenta de Google
Al final, creo que el verdadero futuro está en la autenticación resistente al phishing
Tuve que borrar mi cuenta de gofundme porque hoy, de la nada, me atrapó en uno de estos ciclos de autenticación
Usé la cuenta durante varios años e hice donaciones, pero ahora exigen obligatoriamente número de teléfono y código MFA, sin ofrecer opción de negarse
Al final completé todo el proceso y desactivé la cuenta
Me parece una autenticación innecesaria para la vida; puedo vivir sin gofundme
Últimamente estoy buscando casa y la app de Zillow hace lo mismo: exige iniciar sesión y además pide MFA cada vez que quiero leer un mensaje
La sesión expira en una hora
Ya estoy harto de este tipo de autenticación
Es un mundo completamente loco
Ticketmaster hace algo parecido
No acepta números de Google Voice y solo exige números vinculados a una SIM
Mi número de SIM no es más que un “detalle de implementación” que cambia con frecuencia, pero ahora, sin ese número, ya no puedo iniciar sesión en la cuenta
En la práctica, eso significa renunciar a comprar boletos así o arriesgarte a quedar fuera de tu cuenta cada vez que cambias de SIM
Google activó 2FA por su cuenta en mi cuenta, y como el número de teléfono registrado era uno antiguo, quedé completamente bloqueado fuera de la cuenta
Cuando un servicio cambia sin previo aviso la contraseña y la autenticación secundaria, si estás de viaje sin el teléfono asociado a la cuenta, podrías perder el acceso para siempre
La mayoría de los servicios considera que la autenticación secundaria es más segura que mi contraseña aleatoria de 20 caracteres (guardada en un administrador de contraseñas local)
Pero esos métodos de autenticación secundaria al final son cosas tan poca cosa como SMS en texto plano o correo en texto plano
Leí esta frase cuatro veces y aun así no la entendí
Era algo como: “Si un atacante envía la dirección de correo del usuario a un servicio legítimo y solicita un código de 6 dígitos, el usuario no puede saber si ese código corresponde a un inicio de sesión real”