Investigadores de Sakurity (recomiendo leer los contenidos de su página web) han descubierto recientemente cómo evadir el sistema de autenticación en dos pasos de Google. Para el que todavía no conozca en qué consiste el sistema de autenticación en dos pasos (tengo pendiente una entrada sobre los factores de autenticación), se resume en que para acceder a una cuenta tienes que introducir además de una contraseña un código de n dígitos que recibes o generas por otro canal (normalmente desde tu smartphone) y que cambia cada cierto tiempo. Simplemente es una capa más de seguridad que puedes activar opcionalmente para proteger tus cuentas.
La vulnerabilidad para ser más concretos se encuentra en la API de Authy, esta además de ser utilizada por Google también es usada por Facebook entre muchos otros. Introduciendo simplemente la cadena de texto «../sms» en vez del código recibido se produce un traversal path en la propia API la cual devuelve como resultado un 200 Ok.
Esto ocurre porque al enviar la cadena desde la aplicación del cliente se codifica la barra a %2f y se llama a la API de Authy.
https://api.authy.com/protected/json/verify/..%2fsms/authy_id
Cuando recibe la petición la API ejecuta un módulo de protección contra ataques path traversal directory. El cuál lo que hace es dividir por barras «/» y eliminar el «../»
https://api.authy.com/protected/json/verify/../sms/authy_id
En este momento la petición queda modificada de esta manera.
https://api.authy.com/protected/json/sms/authy_id
Y al enviar un nuevo código la API devuelve un resultado 200 Ok
{"success":true,"message":"SMS token was sent","cellphone":"+1-XXX-XXX-XX85"}
Todas las librerías SDK de Authy estaban afectadas por esta vulnerabilidad, y digo estaban, porque evidentemente se reportó el pasado día 8 de Febrero y ya se ha solucionado. En la página web de Sakurity se profundiza en otra entrada sobre este tipo de ataques de inyección de formato.