Como extensión de la respuesta de Adam, vale la pena señalar dónde se encuentran las vulnerabilidades.
Aparte de los problemas con la intercepción de mensajes en ruta (no conozco una gran cantidad de información sobre los sistemas internos de enrutamiento telefónico, o lo fácil que sería manipularlos), la gran diferencia es que los SMS / Llamadas son típicamente al dispositivo, y tienden a evitar muchas restricciones de acceso (la mayoría de los mensajes SMS aparecen como notificaciones en una pantalla de bloqueo, y no conozco muchos teléfonos que requieren el código de acceso para responder).
Sin embargo, una aplicación sería un sistema de extracción, la persona necesitaría acceder al sistema operativo de los teléfonos, abrir la aplicación y solicitar el código. Eso significa que las funciones de seguridad del teléfono refuerzan la seguridad del producto.
Considere el escenario en el que el teléfono de un empleado es robado (no está fuera del alcance de la posibilidad), y que el perpetrador puede saber / adivinar / deducir la contraseña del empleado. Una vez que se realiza la comprobación, se realiza la llamada telefónica / se envía SMS y se accede a ellos fácilmente sin tocar los controles de acceso del teléfono (o transfiriendo la tarjeta SIM, si es lo que se necesita). Sin embargo, el mismo autor no podría acceder a la aplicación y no podría iniciar sesión.
Hay una extensión de este mismo problema relacionado con la simultaneidad. Si está utilizando un código generado por una aplicación, se puede ingresar al mismo tiempo que el nombre de usuario y la contraseña, lo que significa que los 3 deben ser correctos, y no se puede dar una pista sobre el campo incorrecto si hay una coincidencia no se encontró.
Debido a que las llamadas y los SMS se envían, el nombre de usuario y la contraseña deben verificarse antes de la autenticación del segundo factor, lo que le da al atacante el conocimiento de que sus credenciales se han adivinado correctamente.