No nos llame Nosotros le llamaremos: McAfee ATR encuentra una vulnerabilidad en Agora Video SDK


El equipo de McAfee Advanced Threat Research (ATR) está comprometido a descubrir problemas de seguridad tanto en software como en hardware para ayudar a los desarrolladores a ofrecer productos más seguros para empresas y consumidores. Recientemente investigamos y publicamos varios hallazgos sobre un robot personal llamado "temi", que se puede leer en detalle aquí. Un subproducto de nuestra investigación robótica fue una inmersión más profunda en un kit de desarrollo de software (SDK) de videollamadas creado por Agora.io. Los SDK de Agora se utilizan para la comunicación de voz y video en aplicaciones en múltiples plataformas. Varias de las aplicaciones móviles más populares que utilizan el SDK vulnerable incluyen aplicaciones sociales como eHarmony, Plenty of Fish, MeetMe y Skout, y aplicaciones de atención médica como Talkspace, Practo y Dr. First's Backline. A principios de 2020, nuestra investigación sobre Agora Video SDK condujo al descubrimiento de información confidencial enviada sin cifrar a través de la red. Este defecto CVE-2020-25605, puede haber permitido que un atacante espiara las llamadas de audio y video privadas en curso. En el momento de redactar este artículo, McAfee no tiene conocimiento de que se haya aprovechado esta vulnerabilidad en la naturaleza. Informamos esta investigación a Agora.io el 20 de abril de 2020 y la empresa, a partir del 17 de diciembre de 2020 lanzó un nuevo SDK, versión 3.2.1, que mitigó la vulnerabilidad y eliminó la correspondiente amenaza a los usuarios.

El cifrado se ha convertido cada vez más en el nuevo estándar de comunicación; a menudo incluso en los casos en que la privacidad de los datos no es explícitamente sensible. Por ejemplo, todos los navegadores modernos han comenzado a migrar a estándares más nuevos (HTTP / 2) que aplican el cifrado de forma predeterminada, un cambio completo con respecto a hace unos años, donde una cantidad significativa de tráfico de navegación se enviaba en texto sin cifrar y podía ser visto cualquier interesado. Si bien la necesidad de proteger información verdaderamente sensible, como datos financieros, registros médicos y otra información de identificación personal (PII) se ha estandarizado durante mucho tiempo, los consumidores esperan cada vez más la privacidad y el cifrado para todo el tráfico web y las aplicaciones. Además, cuando el cifrado es una opción proporcionada por un proveedor, debe ser fácil de implementar para los desarrolladores, proteger adecuadamente toda la información de la sesión, incluida la configuración y el desmontaje, y aun así cumplir con los muchos casos de uso de los desarrolladores. Estos conceptos básicos son los que nos llevaron a los hallazgos discutidos en este blog.

Hasta alcanzar lugares donde nadie ha ido antes

Como parte de nuestro análisis del ecosistema temi, el equipo revisó la aplicación de Android que se empareja con el robot temi. Durante este análisis, se descubrió una clave codificada en la aplicación.

Figura 1: ID de la aplicación codificada en la aplicación del teléfono temi

Esto planteó la pregunta: ¿Qué es esta clave y para qué se utiliza? Gracias al registro detallado proporcionado por los desarrolladores, teníamos un lugar para comenzar, https://dashboard.agora.io.

¿Qué es Agora?

De acuerdo con la sitio web – “Agora proporciona los SDK y los componentes básicos para permitir una amplia gama de posibilidades de participación en tiempo real” En el contexto de nuestro proyecto de robot inicial, simplemente proporciona la tecnología necesaria para realizar llamadas de audio y video. En un contexto más amplio, Agora se utiliza para una variedad de aplicaciones que incluyen social, minorista, juegos y educación, entre otras.

Agora permite a cualquier persona crear una cuenta y descargar sus SDK para probarlos desde su sitio web, que también proporciona una amplia documentación. Sus repositorios de GitHub también proporcionan proyectos de muestra detallados sobre cómo usar el producto. Esto es sorprendente para los desarrolladores, pero también muy útil para los investigadores de seguridad y los piratas informáticos. Usando los comentarios de registro del código anterior, podemos mirar la documentación para comprender qué es un ID de aplicación y para qué se usa.

Figura 2: Documentación de Agora sobre App ID

Las dos últimas frases de esta documentación realmente llamaron nuestra atención. Habíamos encontrado una clave que está codificada en una aplicación de Android que "cualquiera puede usar en cualquier Agora SDK" y es "prudente de salvaguardar".

Agora proporciona varios SDK diferentes con diferentes funcionalidades. Dado que encontramos Agora mediante el uso del SDK de vídeo, decidimos centrarnos únicamente en este SDK durante el resto de esta investigación. Simulando la mentalidad de un atacante, comenzamos a investigar para qué se podría usar este ID de aplicación o clave. Además, en el contexto del SDK de video, la pregunta evolucionó hacia si un atacante podría interactuar con este tráfico de video y audio.

"Han hecho estudios, ya sabes. El 60% de las veces, la encriptación funciona siempre ".

Dado que Agora proporciona proyectos de muestra y permite cuentas de desarrollador gratuitas, la mejor manera de comprender qué posibles vectores de ataque existen es utilizar estas herramientas. Al examinar los proyectos de ejemplo de GitHub y la siguiente documentación asociada, podemos aprender exactamente qué se necesita y cómo un usuario normal está conectado a una videollamada.

Figura 3: Ejemplo de función initializeEngine del proyecto

Aquí vemos en el código de ejemplo el ID de la aplicación que se usa para crear un nuevo objeto "RtcEngine". Como se puede ver en la documentación, la creación de un RtcEngine es la base y el primer paso necesario para crear cualquier videollamada.

Figura 4: Documentación de Agora en RtcEngine

Si continuamos examinando el código de ejemplo y miramos los pasos de la documentación para conectarse a una llamada, llegamos a una función llamada "joinChannel".

Figura 5: Función joinChannel del programa de muestra de Agora

Esta función es responsable de conectar un usuario final a una llamada. En el código de ejemplo, hay cuatro parámetros, tres de los cuales están codificados y uno se puede establecer en nulo. Sin investigar mucho más, parece que si bien Agora enumera la ID de la aplicación como importante, no es el único componente necesario para unirse a una videollamada. Un atacante también necesitaría los valores pasados ​​a la API joinChannel para unirse a una llamada. Si asumimos que estos valores solo están codificados con el propósito de una aplicación de demostración, ¿cómo obtendría un atacante los otros valores necesarios? El código es un recurso increíble, pero cuando se trata de una conversación en red, la verdad está en los paquetes. Al ejecutar este código de ejemplo y capturar el tráfico con Wireshark, podemos comprender mejor cómo funciona este sistema.

Figura 6: Captura de Wireshark del tráfico de Agora

Al observar el tráfico, lo que se destaca de inmediato son los valores pasados ​​a joinChannel en el código de ejemplo anterior. Se envían en texto plano a través de la red, además del ID de aplicación necesario para iniciar RtcEngine. Teniendo en cuenta que esta es una aplicación de ejemplo, es importante comprender la diferencia entre un escenario de prueba y un escenario de producción. Como se indica en el código de la Figura 5, el parámetro "token" se establece en nulo. ¿Qué es un token en este contexto y afectaría eso a la seguridad de estos parámetros? Podemos usar la documentación de Agora para comprender que un token está diseñado para generarse aleatoriamente y brindar más seguridad para una sesión.

Figura 7: Documentación de Agora sobre tokens

Dado que los tokens son una opción, es importante que veamos cómo se ve el tráfico en un escenario donde el parámetro del token no es nulo. Es de esperar que el uso de un token sea lo que encontremos en producción o al menos sea lo que Agora recomienda en producción.

Figura 8: Documentación de Agora sobre autenticación de token

Ejecutando la aplicación de ejemplo nuevamente, esta vez usando un token y capturando tráfico, podemos descubrir que el token tampoco es un problema para un atacante.

Figura 9: Captura de Wireshark de la llamada de Agora con tokens

¡El token se envía en texto plano al igual que los otros parámetros! Es posible que haya notado que esta captura no muestra el ID de la aplicación; en este caso, el ID de la aplicación todavía se envía en texto plano, en un paquete diferente.

El espía que me amó

La información que se envía en texto plano a través de la red para iniciar una videollamada es una cosa, pero ¿puede un atacante usarla para espiar a un usuario? ¿La llamada apoyará a un tercero? ¿Se notificará al usuario de una nueva conexión? Para responder a estas preguntas, podemos utilizar las aplicaciones de ejemplo proporcionadas por Agora para ejecutar algunas pruebas. El siguiente diagrama muestra el escenario que vamos a intentar crear para probar.

Figura 10: Escenario de ataque de Ágora

El primer paso para un atacante que se encuentra en la red es poder identificar el tráfico de red adecuado que contiene la información confidencial. Con esta información de los paquetes de red, pueden intentar unirse a la llamada que está en curso. Utilizando un marco de Python llamado Scapy, creamos una capa de red en menos de 50 líneas de código para ayudar a identificar fácilmente el tráfico que le preocupa al atacante. Esto se hizo mediante la revisión del tráfico de videollamadas y la ingeniería inversa del protocolo. Al igual que muchas inversiones, esto se hace mediante el uso de pistas de contexto y mucho "adivinar y comprobar". Las cadenas nos ayudan a identificar el uso de ciertos campos y proporcionan pistas sobre cuáles podrían ser los campos que los rodean. En algunos casos, los campos aún se desconocen; sin embargo, esto es normal. Un atacante o investigador solo necesita descifrar un paquete suficiente para hacer posible un ataque.

Figura 11: Filtro Agora Scapy

El código anterior identifica, analiza y muestra en forma legible por humanos, solo la información importante en los tres tipos de paquetes principales descubiertos en el tráfico de Agora. Desde aquí, podemos automatizar el escenario descrito en la Figura 10 usando Python con algunas modificaciones a las aplicaciones de ejemplo. ¡Funciona totalmente! El siguiente video de demostración muestra a un atacante olfateando el tráfico de la red para recopilar la información de la llamada y luego iniciando su propia aplicación de video Agora para unirse a la llamada, completamente desapercibido para los usuarios normales.

(incrustar) https://www.youtube.com/watch?v=ApphMr2k5QE (/ incrustar)

Además de usar un token, ¿existían otras medidas de seguridad disponibles para los desarrolladores que pudieran haber mitigado el impacto de esta vulnerabilidad? Per Agora's documentación, el desarrollador tiene la opción de cifrar una videollamada. También probamos esto, y el ID de la aplicación, el nombre del canal y el token todavía se envían en texto sin formato cuando la llamada está encriptada. Un atacante aún puede obtener estos valores; sin embargo, no pueden ver el video ni escuchar el audio de la llamada. A pesar de esto, el atacante aún puede utilizar el ID de la aplicación para realizar sus propias llamadas a costa del desarrollador de la aplicación. En la siguiente sección discutiremos por qué, aunque el cifrado está disponible, no se adopta ampliamente, lo que hace que esta mitigación sea en gran medida poco práctica.

¿Me estás hablando? ¿Estás hablando conmigo?

Esta investigación comenzó con el descubrimiento de un ID de aplicación codificado en "temi", el robot personal que estábamos investigando. Agora documenta claramente en su sitio web que esta ID de aplicación debe "mantenerse segura", lo que descubrimos como una vulnerabilidad mientras investigábamos sobre temi. Sin embargo, un examen más detallado muestra que incluso si temi hubiera mantenido este valor seguro, se envía en texto sin cifrar a través de la red junto con todos los demás valores necesarios para unirse a la llamada. Entonces, ¿cómo afecta esto a otros consumidores del Agora SDK fuera de temi?

El sitio web de Agora afirma: "Los SDK interactivos de voz, video y mensajería de Agora están integrados en aplicaciones móviles, web y de escritorio en más de 1.700 millones de dispositivos en todo el mundo". Para asegurarnos de que nuestras comparaciones fueran razonables, solo miramos otras aplicaciones de Android que usaban el SDK de video. También nos centramos en aplicaciones con una base de instalación muy grande.

Para ofrecer una muestra rápida de las aplicaciones en Google Play que utilizan Agora, centrémonos en MeetMe, Skout, Nimo TV y, por supuesto, temi. Google Play informa el número de instalaciones en 50 millones + cada una para MeetMe y Skout, 10 millones + para Nimo TV y más de 1000 para temi. Al examinar el código descompilado de las aplicaciones, podemos determinar fácilmente que estas cuatro aplicaciones tienen ID de aplicación codificados y no habilitan el cifrado. Vemos un código muy similar al siguiente en todas las aplicaciones:

Figura 12: función joinChannel de aplicaciones de Android que no utilizan cifrado

La línea más importante aquí es la llamada a setEncryptionSecret a la que se le está pasando el parámetro "nulo". Podemos hacer referencia a la documentación de Agora para comprender más sobre esta llamada.

Figura 13: Documentación de Agora en setEncryptionSecret

Aunque se están llamando a las funciones de cifrado, los desarrolladores de la aplicación inhabilitando el cifrado basado en esta documentación. Un desarrollador que preste mucha atención podría preguntar si este es el único lugar donde se llama a la API. ¿Podría establecerse en otro lugar? El equipo buscó en el código descompilado todas las aplicaciones revisadas y no pudo encontrar ninguna otra instancia de la llamada a la API, lo que nos lleva a creer que esta es la única llamada que se está realizando. Teniendo esto en cuenta, el tráfico de texto sin cifrar tiene un mayor impacto que va mucho más allá de una aplicación de robot personal para millones, potencialmente miles de millones, de usuarios. Sin el cifrado habilitado y la información de configuración transmitida en texto sin cifrar, un atacante puede espiar a una gran variedad de usuarios.

Aunque Agora no debería haber estado enviando esta información sensible sin cifrar, si ofrece una opción de tráfico cifrado, ¿por qué no se está utilizando? Esto al menos protegería el video y el audio de la llamada, aunque un atacante pueda unirse. Si bien es imposible estar seguro, una razón podría deberse a que las opciones de cifrado de Agora requieren una clave previamente compartida, que se puede ver en sus aplicaciones de ejemplo publicadas en GitHub. El Agora SDK en sí no proporcionó ninguna forma segura de generar o comunicar la clave precompartida necesaria para la llamada telefónica y, por lo tanto, esto se dejó en manos de los desarrolladores. Muchos modelos de llamadas que se utilizan en las aplicaciones quieren que el usuario pueda llamar a cualquier persona sin contacto previo. Esto es difícil de implementar en un SDK de video después del lanzamiento, ya que no se incluyó un mecanismo integrado para compartir claves. También vale la pena señalar que, en general, la velocidad y la calidad de una videollamada es más difícil de mantener mientras se usa el cifrado. Estas pueden ser algunas de las razones por las que estos desarrolladores de aplicaciones han optado por no utilizar el cifrado para el vídeo y el audio. Ahora que el SDK maneja de manera adecuada y transparente el cifrado de la configuración de llamadas, los desarrolladores tienen la oportunidad de aprovechar un método de comunicación más seguro para el tráfico. Además, los desarrolladores aún tienen la opción de agregar cifrado completo para proteger aún más las transmisiones de video y audio.

Agora ha publicado una lista de mejores prácticas para todos sus desarrolladores y socios aquí, que incluye el uso de cifrado cuando sea posible. En general, recomendamos seguir las mejores prácticas de seguridad de los proveedores, ya que están diseñadas para aplicarse directamente al producto o servicio. En este caso, la vulnerabilidad aún existiría; sin embargo, su eficacia sería extremadamente limitada si se siguieran las mejores prácticas publicadas. Aunque hemos descubierto que las recomendaciones de Agora no se estaban adoptando en gran medida, Agora se ha estado comunicando activamente con los clientes durante todo el proceso de divulgación de vulnerabilidades para garantizar que sus procesos y procedimientos recomendados se implementen ampliamente.

Adrian, lo logramos. Lo hicimos.

La privacidad es siempre una de las principales preocupaciones de los consumidores, pero también sigue siendo un vector de amenaza atractivo para los atacantes. Si miramos las dos aplicaciones más grandes que investigamos (MeetMe y Skout), ambas están clasificadas para audiencias maduras (17+) para "conocer gente nueva" y ambas anuncian más de 100 millones de usuarios. MeetMe también menciona "coquetear" en la tienda Google Play y su sitio web tiene testimonios sobre personas que conocen al "amor de su vida". Aunque no se anuncian explícitamente como aplicaciones de citas, sería razonable sacar la conclusión de que es al menos una de sus funciones. En el mundo de las citas en línea, una violación de la seguridad o la capacidad de espiar las llamadas podría dar lugar a un chantaje o acoso por parte de un atacante. Otras aplicaciones de desarrollo de Agora con bases de clientes más pequeñas, como el robot temi, se utilizan en numerosas industrias, como los hospitales, donde la capacidad de espiar las conversaciones podría provocar la filtración de información médica confidencial.

Uno de los objetivos del equipo de investigación avanzada de amenazas de McAfee es identificar e iluminar un amplio espectro de amenazas en el panorama complejo y en constante evolución actual. Según la política de divulgación responsable de McAfee, McAfee ATR informó a Agora tan pronto como se confirmó que la vulnerabilidad era explotable. Agora fue muy receptiva y receptiva a la recepción de esta información y avanzó aún más en sus capacidades de seguridad actuales al proporcionar a los desarrolladores una opción de SDK (versión 3.2.1) para cifrar la información de configuración de llamada inicial, mitigando esta vulnerabilidad. Hemos probado este nuevo SDK y podemos confirmar que mitiga por completo CVE-2020-25605. En el momento de redactar este informe, McAfee no tiene conocimiento de que se explote esta vulnerabilidad en la naturaleza, lo que demuestra otra poderosa historia de éxito en la mitigación de un problema que puede haber afectado a millones de usuarios antes de que se utilice con fines maliciosos. Nuestra asociación con Agora dio como resultado el lanzamiento de un SDK más seguro que ha permitido a los desarrolladores de varias empresas producir aplicaciones de videollamadas más seguras. Recomendamos encarecidamente a cualquier equipo de desarrollo que utilice el SDK de Agora que se actualice a la última versión, siga las mejores prácticas descritas por Agora e implemente el cifrado completo siempre que sea posible.

Detalles de la vulnerabilidad

CVE: CVE-2020-25605
Clasificación CVSSv3: 7.5 / 6.7
Cadena CVSS: AV: N / AC: L / PR: N / UI: N / S: U / C: H / I: N / A: N / E: P / RL: O / RC: C
Descripción CVE: La transmisión en texto claro de información confidencial en Agora Video SDK anterior a 3.1 permite a un atacante remoto obtener acceso al audio y video de cualquier videollamada de Agora en curso mediante la observación del tráfico de red en texto claro.





Enlace a la noticia original