Bypass Sistema de doble factor de Authy.com
Segun cuenta Egor Homakov, un investigador de seguridad independiente de Sakurity, quien reveló la vulnerabilidad de "inyección" que afectó el servicio Authy a través de una biblioteca de código abierto de uso común.
Con tan solo digitar ../sms pueden pasar por alto el segundo factor es utilizado por 2FA authy.com.
el proceso de trabajar con authy es simple y consta de dos llamadas a la API:
- El cliente solicita un nuevo Token http://api.authy.com/protected/json/sms/AUTHY_ID?api_key=KEY donde AUTHY_ID es el identificador públicamente disponible asociado con la cuenta de usuario corriente. Respuesta esperada : {"success":true,"message":"SMS token was sent","cellphone":"+1-XXX-XXX-XX85"} con estado 200
- El usuario envía la señal de vuelta y el cliente comprueba si el elemento es válido con http://api.authy.com/protected/json/verify/SUPPLIED_TOKEN/AUTHY_ID?api_key=KEY y autentica con el segundo factor si la API responde con el estado 200.
Sólo se puede insertar VALID_TOKEN_FOR_OTHER_AUTHY_ID/OTHER_AUTH_ID# se tendria que sobrescribir la ruta y hacer el envío del cliente de modo que esto siempre devuelva el estado 200.cualquier cosa despues del Hash # es ignorado.
/protected/json/verify/VALID_TOKEN_FOR_OTHER_AUTHY_ID/OTHER_AUTH_ID Es imposible distinguir petición forjada a partir de una válida en el servidor porque #/AUTHY_ID no se envía.
Despues descubrio un Bug interesante en authy-python: urllib.quote el cual codifica todos los caracteres excepto una barra y qué se puede hacer con una barra? Puede tratar de insertar /../? como ya deben saber, /../, /%2e%2e/ significa "subir un directorio" en los navegadores. Sin embargo, el servidor no tiene que tener esta característica.
ver tabla URLencode
FUNCIONAMIENTO:
- El atacante digita "../SMS" en el campo del token de verificacion
- La aplicación cliente lo codifica como "..%2fsms" y hace una llamada a la API para Authy - https://api.authy.com/protected/json/verify/..%2fsms/authy_id.
- Path_traversal middleware decodifica la ruta a: https://api.authy.com/protected/json/verify/../sms/authy_id divide por barras y elimina el directorio frente a /...
- actualmente Authy API ve la ruta modificada https://api.authy.com/protected/json/sms/authy_id simplemente envía otro SMS al authy_id y responde con el estado 200. {"success":true,"message":"SMS token was sent","cellphone":"+1-XXX-XXX-XX85"}.
- Toda la biblioteca SDK de Authy consideran el estado 200 como respuesta exitosa.
Fuente:
http://sakurity.com/blog/2015/03/15/authy_bypass.html
0 comentarios :
Comentarios en GooglePlus
Reacciones en G+