Skip to main content

SourMint: ejecución remota de código en iOS, hallazgos en Android y respuesta de la comunidad

blog tumbnail

15 de octubre de 2020

0 minutos de lectura

El equipo de investigación de Snyk está comprometido con ayudar a proteger los ecosistemas de desarrollo mediante la investigación y divulgación de posibles exposiciones de seguridad que podrían afectar a quienes desarrollan aplicaciones. Como parte de este esfuerzo continuo, Snyk aprovechó nueva información para investigar más a fondo el SDK de Mintegral. Esta investigación permitió descubrir hallazgos adicionales.

Los hallazgos más recientes incluyen la capacidad de Mintegral para ejecutar código de forma remota a través del SDK. Además, colaboramos con desarrolladores para ayudarlos a responder a nuestras divulgaciones, y tanto Mintegral como la comunidad de publicidad móvil han tenido reacciones destacables que también vale la pena resaltar. Esta es una actualización sobre los acontecimientos ocurridos desde nuestra divulgación inicial de los posibles problemas de seguridad y privacidad que identificamos en el SDK de publicidad de Mintegral.

En resumen:

  • Snyk identificó una posible funcionalidad de puerta trasera que permitiría la ejecución remota de código a través de anuncios mostrados por el SDK.

  • Identificamos una funcionalidad oculta de «seguimiento de descargas» en la versión para Android del SDK, que enviaba a Mintegral información sobre cualquier descarga realizada desde un dominio de Google, incluidas aplicaciones (APK), documentos de Google y otros recursos.

  • Mintegral ha tomado numerosas medidas para responder a las inquietudes señaladas en nuestras divulgaciones iniciales.

  • La respuesta de la comunidad de publicidad móvil fue rápida: varios actores eliminaron a Mintegral de sus plataformas.

Resumen

El 24 de agosto de 2020, Snyk anunció el descubrimiento de comportamientos sospechosos en la versión para iOS de un popular SDK de publicidad conocido como Mintegral. En ese momento, confirmamos con socios del sector de atribución publicitaria que, como mínimo, Mintegral parecía usar esta funcionalidad para recopilar grandes cantidades de datos y cometer fraude de atribución de anuncios. Nuestra investigación mostró que Mintegral utilizaba ofuscación de código y swizzling de métodos para modificar, sin que lo supiera el propietario de la aplicación, la funcionalidad de los métodos base del SDK de iOS. Además, nuestra investigación demostró que Mintegral registraba todas las solicitudes HTTP, incluidos sus encabezados, que incluso podían contener tokens de autorización u otros datos confidenciales.

Nuestro descubrimiento tuvo amplia cobertura en distintos medios de prensa y redes sociales. Como parte de la investigación, contactamos a los responsables de algunas de las aplicaciones más populares afectadas por este SDK para informarles de nuestros hallazgos. Colaboramos con varios desarrolladores que solicitaron más información y ayuda para entender las posibles amenazas para sus aplicaciones.

Desde entonces, Mintegral anunció que publicaría el código fuente de su SDK para el mercado. Aunque, al momento de escribir esto, solo los socios registrados pueden descargar el SDK, una importante editorial de videojuegos compartió el código fuente con nosotros para que lo analizáramos. También continuamos nuestra investigación examinando más a fondo las versiones para Android del SDK, en las que no habíamos encontrado comportamientos similares al momento de nuestra divulgación inicial.

Esto dio lugar a descubrimientos importantes que hacen necesario actualizar nuestra divulgación anterior. Además, Mintegral y la comunidad en general respondieron a la situación, y consideramos que un resumen de los acontecimientos era una buena forma de cerrar nuestra investigación sobre este SDK.

Nuevos hallazgos en iOS

Ejecución remota de código (RCE)

Después de que Mintegral anunciara que publicaría el código fuente de su SDK, analizamos los cambios realizados entre la versión anterior que habíamos examinado y la nueva versión publicada como código abierto. Al compararlas, encontramos cambios importantes que eliminaron funcionalidades peligrosas presentes en las versiones anteriores. En particular, descubrimos una puerta trasera que antes permitía a Mintegral invocar cualquier método estático nativo dentro de la aplicación y que también podía permitirle ejecutar código de forma remota en cualquier dispositivo que mostrara un anuncio a través de su SDK.

Como era de esperarse, nuestro análisis reveló que Mintegral eliminó la detección de depuradores y proxies que habíamos identificado y publicado en nuestra divulgación anterior. Sin embargo, en un análisis adicional descubrimos que también habían eliminado otras seis clases que no habíamos identificado antes:

  • MTGCommandDispatcher

  • MTGComponentCommands

  • MTGRemoteCommand

  • MTGRemoteCommandParameterModel

  • MTGRemoteCommandParser

  • MTGInvocationBoxing

Descubrimos que MTGBaseBridgeWebView, que se usa ampliamente en el SDK para comunicarse con JavaScript, permite ejecutar funciones arbitrarias y código nativo de la aplicación. Pudimos crear una prueba de concepto que mostró cómo la puerta trasera permite a Mintegral invocar cualquier función y ejecutar código arbitrario a través del SDK. Esto supone una vulneración importante del modelo de seguridad del dispositivo y de la privacidad del usuario, y constituye una infracción directa de las políticas de Apple.

Diagrama que muestra cómo los datos privados de los usuarios fluyen desde los servidores de Mintegral hacia el código nativo y una carga maliciosa de banner en el UIWebView de Mintegral.

Para conocer todos los detalles, consulta el informe técnico de la investigación.

Remote Code Execution using Mintegral's MTGInvocationBoxing

El 2 de octubre comunicamos nuestros nuevos hallazgos a Apple y, un día después, el 3 de octubre, Apple envió una notificación a los desarrolladores de las aplicaciones afectadas para informarles que su aplicación estaba expuesta a la ejecución remota de código a través de la clase del SDK de Mintegral. La notificación pidió a los desarrolladores que corrigieran el problema y publicaran una nueva versión en el plazo de una semana para agilizar la revisión.

Hola:

Te escribimos para informarte sobre nueva información relacionada con tu aplicación.

Tras volver a evaluar tu aplicación, determinamos que no cumple con las pautas de revisión de la App Store. En concreto, detectamos que infringe lo siguiente:

Pauta 2.5.2 - Rendimiento - Requisitos de softwareTu aplicación incluye la clase MTGInvocationBoxing, que permite la ejecución remota de código.

Próximos pasos

Modifica tu aplicación para eliminar el uso de la clase MTGInvocationBoxing y envía una nueva versión para su revisión.

Para garantizar que tu aplicación siga estando disponible en la App Store, envía una actualización en el plazo de una semana a partir de la fecha de este mensaje.

Si no recibimos en el plazo de una semana una actualización que cumpla con las pautas de revisión de la App Store, tu aplicación se retirará de la venta.

Ten en cuenta que, si se determina que tu aplicación no cumple con los requisitos por cualquier motivo y se rechaza una vez transcurrido el plazo indicado, se retirará de la venta hasta que se envíe, apruebe y publique en la App Store una actualización que cumpla con los requisitos.

Es posible que las futuras entregas de esta aplicación requieran más tiempo de revisión y que la aplicación no pueda optar a una revisión acelerada.

Si tienes alguna pregunta sobre esta información, responde a este mensaje para hacérnoslo saber.

Saludos cordiales, Revisión de la App Store

Seguimiento de solicitudes HTTP y OpenURL

Después de nuestra divulgación anterior, Mintegral había desactivado los métodos de recopilación de datos mediante su funcionalidad de configuración remota. Sin embargo, en nuestra investigación posterior descubrimos que habían vuelto a activar esa funcionalidad sospechosa unas semanas después. Lo observamos en varias aplicaciones populares que habíamos analizado inicialmente y también lo confirmamos en una gama más amplia de aplicaciones con ayuda de NowSecure.

La configuración que se entregó al SDK durante la inicialización tenía las tres opciones activadas:

  • cudl - HTTP request tracking

  • cud - OpenURL tracking

  • cspn - StoreKit methods tracking

Esto significa que la amplia recopilación de datos y el envío de registros a Mintegral volvieron a estar activos en todas las aplicaciones que usaban una versión del SDK anterior a la 6.6.0.0. En muchos casos, esto puede ocurrir sin el consentimiento del desarrollador, ya que esta funcionalidad del SDK siempre estaba activada, incluso si el desarrollador o la plataforma de mediación no la habilitaban.

Hallazgos sobre el SDK de Android

Tras completar la investigación y la divulgación sobre el SDK de iOS, nuestro equipo de investigación centró su atención en las versiones para Android. Aunque al principio habíamos observado indicios de que la versión para Android incluía una funcionalidad similar, con esta nueva información analizamos el código en profundidad y encontramos nuevos hallazgos. Para conocer todos los detalles técnicos, consulta el informe técnico de la investigación sobre la versión para Android del SDK.

En primer lugar, el equipo de investigación de Snyk descubrió que varios elementos del código del SDK están ofuscados con el mismo tipo de mecanismo de codificación patentado que se usó para ofuscar el código en la versión para iOS del SDK. Una vez más, aunque se parece a la codificación Base64 estándar, presenta diferencias sutiles que impiden decodificar las cadenas con un codificador o decodificador Base64 común.

Al usar la utilidad interna del SDK para decodificar cadenas y datos ofuscados, nuestros investigadores descubrieron varios métodos que comprueban si hay un depurador en ejecución o algún tipo de proxy de interceptación que capture las comunicaciones de red. Al igual que en la versión para iOS del SDK, el registro de actividad del SDK de Android se desactiva si detecta un depurador o un proxy de red. En el SDK de Android también se hacía referencia al mismo sitio web que el equipo de investigación había identificado como destino de esos registros.

A medida que el equipo de investigación avanzaba en su análisis, logró localizar la implementación de un controlador de difusión que escucha dos intents. El primer controlador forma parte del esquema de detección de depuradores mencionado anteriormente. El segundo, ACTION_PACKAGE_ADDED, se activa cuando se instala una nueva aplicación en el dispositivo. El código del SDK de Mintegral que se ejecuta como resultado de este intent comprueba si se agregó un paquete. En definitiva, esto permite que el SDK reciba datos sobre todas las aplicaciones que se instalan en el dispositivo a través de Play Store.

Código Java que muestra el método onReceive() de AppReceiver, que maneja intents PACKAGE_ADDED en el SDK de mIntegral.
Código del método onReceive() en el SDK de mIntegral

Sin embargo, el SDK va más allá y también puede recopilar información sobre otras descargas que se realizan fuera de Play Store. La clase AlphabObserver, que amplía la clase ContentObserver, incluye un método que captura los URI que se abren en el dispositivo. El método analiza el URI para comprobar que se trate de una solicitud de descarga y, si aún no está en la base de datos de aplicaciones del SDK, lo agrega.

En definitiva, los comportamientos son similares a los observados en la versión para iOS del SDK. Sin embargo, la diferencia clave es que, como el SDK escucha un intent de difusión, puede recibir datos sobre instalaciones de aplicaciones que no se iniciaron desde la aplicación principal en la que se incluyó el SDK. En esencia, si una sola aplicación del dispositivo de un usuario utiliza el SDK de Mintegral, esa instancia del SDK puede ver todas las instalaciones y descargas que se realizan en el dispositivo. El siguiente video muestra cómo se envía a Mintegral la URL de un documento de Google que se abre en el dispositivo.

Malicious Mintegral SDK Leaks Data on Android

Snyk informó a Google sobre los detalles de nuestros hallazgos en el SDK de Mintegral. Google tomó el asunto en serio y continúa investigándolo. Google confirmó que el análisis técnico del código que proporcionó Snyk es correcto. Sin embargo, todavía no ha hecho declaraciones sobre si responderá a la situación ni sobre cómo lo hará.

Respuesta de la comunidad

Desde nuestra divulgación inicial a finales de agosto, el ecosistema y la comunidad han respondido considerablemente. Por su parte, Mintregral negó haber cometido irregularidades. En una publicación posterior del blog, Mintegral indicó que el nivel inusual de recopilación de datos tenía como objetivo ayudar a su SDK a adaptar mejor los anuncios a cada usuario. Alrededor del 26 de agosto de 2020, Mintegral realizó numerosos cambios en su política de privacidad. Más adelante, anunció que publicaría el código fuente de su SDK para el mercado.

AppsFlyer y Singular, dos importantes proveedores de medición móvil (MMP), respondieron con sus propios análisis e implementaron mejoras en sus productos antifraude para detectar y prevenir ataques de secuestro de instalaciones. Singular publicó una entrada de blog titulada «¿SourMint? Cómo protegerte del fraude por secuestro de clics en iOS». En la publicación, analizaron y encontraron pruebas de actividad de secuestro de clics en algunas redes basadas en SDK, y compararon la tasa de actividad sospechosa antes y después de nuestra publicación.

Lo que descubrieron fue que, antes de nuestra divulgación, esas aplicaciones mostraban un nivel significativo de clics sospechosos secuestrados. Sin embargo, después de que nuestra divulgación se hiciera pública, observaron una drástica disminución de los clics falsos en menos de 24 horas desde la publicación.

Tabla que compara las tasas de clics antes y después de la publicación; muestra una marcada disminución en las redes afectadas A, B y C.
Una disminución drástica de los clics falsos después de la hora de publicación de mintregral

Según un aviso publicado en su sitio web el 3 de septiembre de 2020, la plataforma de publicación y monetización móvil de Twitter, MoPub, eliminó la mención de Mintegral como socio de red de su anuncio, publicado originalmente el 26 de febrero de 2020. Además, en su documentación de mediación, MoPub ahora incluye a Mintegral como una red obsoleta e indica que debe “eliminarse de todos los segmentos de inventario y las líneas de pedido”.

La plataforma de mediación de IronSource también respondió a la noticia de la divulgación de SourMint. Declaró lo siguiente:

Informes recientes plantearon acusaciones graves sobre Mintegral. ironSource realizó su propia revisión y, de acuerdo con nuestros hallazgos, la plataforma de mediación de ironSource puso fin a todos los servicios y al soporte de productos relacionados con Mintegral.

Plataforma de mediación de IronSource

Conclusiones

En definitiva, la situación de SourMint está muy clara. Es innegable que el SDK de Mintegral utiliza diversas técnicas para ocultar el comportamiento de su SDK a los desarrolladores, a la revisión de App Store y a las revisiones de seguridad independientes. Estos comportamientos ocultos emplean técnicas que permiten al SDK ejecutar código arbitrario en dispositivos iOS y acceder a muchos más datos sobre la actividad de los usuarios de los necesarios para atribuir anuncios, lo que expone información potencialmente privada a Mintegral. Se accede a estos datos desde fuera del propio SDK, lo que hace que su recopilación resulte muy sospechosa.

A lo largo de los años, el equipo de investigación de seguridad de Snyk ha identificado y divulgado de manera responsable miles de vulnerabilidades en paquetes de código abierto, ha denunciado la puerta trasera maliciosa en el popular paquete npm event-stream y ha cubierto varios otros casos de componentes maliciosos. Al concluir la investigación de SourMint, nos alegra ver el impacto de nuestro trabajo: se eliminó del SDK la funcionalidad que identificamos y divulgamos, se detuvieron el secuestro de clics y el fraude de atribución, y el SDK pasó a ser de código abierto. Por último, nos complace ver que ha aumentado la conciencia sobre este problema en la comunidad de desarrollo móvil, y que empresas del sector de la publicidad móvil actuaron rápidamente para proteger a sus usuarios.

Para los desarrolladores de aplicaciones, esto pone de relieve la necesidad de asegurarse de que las plataformas de monetización que eligen sean confiables. Incluso con un análisis detallado del código, puede ser muy difícil detectar comportamientos maliciosos o inesperados. La responsabilidad de notificar a los usuarios sobre la recopilación de datos recae, en última instancia, en el desarrollador de la aplicación. Por eso, incluir sin saberlo SDK que acceden a grandes cantidades de datos, como este, puede hacer que el propietario de la aplicación infrinja las políticas de las tiendas de aplicaciones. Esperamos que esta divulgación haya ayudado a comprender mejor el panorama general y que ahora los desarrolladores de aplicaciones tengan más conciencia de las medidas necesarias para proteger la privacidad de sus usuarios.

Cronología

Fecha

Etapa

5 de agosto

El equipo de investigación de Snyk identifica que el SDK de iOS de Mintegral recopila datos en exceso y secuestra clics

17 de agosto

Snyk divulga los hallazgos a Apple de manera responsable

24 de agosto

Snyk publica los hallazgos sobre Sour Mint para iOS 

25 de agosto

Mintegral publica una declaración en la que niega las acusaciones sobre su SDK

3 de septiembre

IronSource anuncia que eliminará Mintegral de su plataforma de mediación

3 de septiembre

Mintegral publica la versión 6.5.0.0 del SDK para iOS, que elimina el componente malicioso y oculto _CXX_CXX_OperationPKTask

4 de septiembre

La plataforma de mediación MoPub (Twitter) anuncia que retira la certificación de Mintegral en su plataforma

4 de septiembre

Mintegral anuncia sus planes de publicar el código fuente de su SDK

4 de septiembre

El equipo de investigación de Snyk identifica una función oculta de seguimiento de descargas en la versión para Android del SDK

9 de septiembre

Snyk reporta de manera responsable a Google los hallazgos sobre el SDK para Android

10 de septiembre

Mintegral publica la versión 6.6.0.0 del SDK para iOS, que elimina el componente de puerta trasera MTGRemoteCommandParser

22 de septiembre

Snyk obtiene el código fuente de la versión 6.6.0.0 del SDK para iOS y realiza un análisis de diferencias

23 de septiembre

Snyk identifica que Mintegral eliminó el módulo de seguimiento de descargas de Google de su SDK para Android

30 de septiembre

Mediante un análisis de diferencias, Snyk identifica una puerta trasera en la versión para iOS del SDK que permite la ejecución remota de código (RCE)

2 de octubre

Snyk divulga los nuevos hallazgos sobre iOS a Apple de manera responsable

3 de octubre

Apple notifica a los editores afectados y les pide que eliminen el código que permite la ejecución remota de código (RCE)

15 de octubre

Snyk publica los hallazgos más recientes sobre iOS y Android

Leer más

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

Blog

Tu backlog de vulnerabilidades ya no es deuda técnica: es una superficie de ataque

Un backlog de vulnerabilidades en crecimiento es más que deuda técnica: es una superficie de ataque. Descubre por qué las suposiciones obsoletas sobre el riesgo, los atacantes automatizados y los hallazgos encadenados requieren un nuevo enfoque.