Estoy planeando integrar la autenticación de truecaller para mi aplicación, ya que los reclamos de truecaller proporcionan autenticación sin contraseña y sin errores, pero el flujo de autenticación no me parece bien.
Describiré brevemente el proceso:
- La aplicación realiza una llamada al servidor de truecaller utilizando el SDK de truecaller
- El servidor Truecaller devuelve una respuesta con una carga útil que contiene el número de teléfono del usuario y la información de perfil, la firma (PKI) y el algoritmo de firma
- La aplicación envía estos datos a su propio backend.
- El servidor backend de la aplicación obtiene una clave pública de url de truecaller y valida que la respuesta sea solo del servidor de truecaller.
- Si la firma coincide, considera que la autenticación es exitosa.
La carga útil de Truecaller no tiene ningún reclamo de audiencia. Todo el flujo no tiene ningún mecanismo de validación de back-end, pero tienen un nonce que puede ser enviado a sdk por la API de back-end de la aplicación y luego verificarse cuando la carga útil de truecaller va al back-end para su validación. Puede encontrar más detalles aquí
Pero esto no parece ser útil. Considere el escenario: AppA y AppB están instaladas en el teléfono del usuario. De alguna manera, AppB conoce a los usuarios comunes para ambas aplicaciones. Cuando algún usuario común intenta iniciar sesión en AppB, primero realiza una llamada a la API de AppA que le da el nonce. Ahora, AppB usa el mismo nonce y obtiene la respuesta de truecaller. AppB reproduce el mismo archivo de acceso a AppA y obtiene el token de acceso para AppA y la cuenta está comprometida.
Hablé sobre esta situación al equipo de truecaller y me pidieron que usara safetynet attestaion para asegurarme de que la solicitud se haya originado solo en mi solicitud.
No soy un desarrollador de Android y no estoy seguro de si esto será a prueba de balas, ya que de todos modos dependeré de los datos del cliente y no puedo correr ese riesgo. ¿Puedo confiar en este método?
Revisé los documentos de la API para safetynet, pero creo que aún se puede interrumpir porque la autenticación depende de la carga útil del truecaller y no de la respuesta de la safetynet. Safetynet solo puede garantizar la integridad del dispositivo y la apk.
Considere el mismo escenario en el que el propietario de AppB 'tiene AppA instalada en su teléfono. Dirige el tráfico a través de algún servidor proxy (agrega un certificado ssl comodín a su teléfono para descifrar el tráfico), ahora inicia el flujo de autenticación a través de AppA, pero detiene la llamada a la API final que contiene la carga útil de la red de seguridad y otros datos. Extrae la carga útil de la red de seguridad y la combina con otros datos que ya tiene. Ahora el servidor 'A' lo considerará una solicitud legítima. Por lo tanto, creo que reducirá la superficie de ataque pero no puede mitigarla por completo.
Por favor, corrígeme si me equivoco.