Skip to main content

SourMint : exécution de code à distance sur iOS, découvertes sur Android et réaction de la communauté

blog tumbnail

15 octobre 2020

0 minutes de lecture

L’équipe de recherche de Snyk s’engage à contribuer à la sécurité des écosystèmes de développement en recherchant et en signalant les expositions potentielles à des risques de sécurité susceptibles d’affecter les développeurs d’applications. Dans le cadre de ces travaux en cours, Snyk s’est appuyé sur de nouvelles informations pour approfondir ses recherches sur le SDK Mintegral. Ces recherches ont permis de mettre au jour de nouveaux éléments.

Les découvertes les plus récentes révèlent que Mintegral peut exécuter du code à distance via son SDK. Nous avons également travaillé avec des développeurs pour les aider à réagir à nos divulgations. Les réactions notables de Mintegral et de la communauté de la publicité mobile méritent aussi d’être soulignées. Cet article fait le point sur les événements survenus depuis notre divulgation initiale des problèmes potentiels de sécurité et de confidentialité que nous avons identifiés dans le SDK publicitaire Mintegral.

En bref :

  • Snyk a identifié une fonctionnalité potentielle de porte dérobée permettant l’exécution de code à distance via les publicités diffusées par le SDK.

  • Nous avons identifié une fonctionnalité cachée de « suivi des téléchargements » dans la version Android du SDK, qui signale à Mintegral tous les téléchargements provenant d’un domaine Google, notamment les applications (APK), les documents Google et d’autres ressources.

  • Mintegral a pris de nombreuses mesures pour répondre aux préoccupations soulevées dans nos divulgations initiales.

  • La communauté de la publicité mobile a réagi rapidement, plusieurs acteurs ayant notamment retiré Mintegral de leurs plateformes.

Résumé

Le 24 août 2020, Snyk a annoncé la découverte de comportements suspects dans la version iOS d’un SDK publicitaire populaire appelé Mintegral. À l’époque, nous avions confirmé auprès de partenaires spécialisés dans l’attribution publicitaire qu’au minimum, Mintegral semblait utiliser cette fonctionnalité pour collecter de grandes quantités de données et commettre des fraudes à l’attribution publicitaire. Nos recherches ont montré que Mintegral utilisait l’obfuscation du code et le swizzling de méthodes pour modifier, à l’insu du propriétaire de l’application, le fonctionnement des méthodes de base du SDK iOS. En outre, nos recherches ont démontré que Mintegral enregistrait toutes les requêtes HTTP, y compris leurs en-têtes, qui pouvaient contenir des jetons d’autorisation ou d’autres données sensibles.

Notre découverte a été largement relayée par différents médias et sur les réseaux sociaux. Dans le cadre de nos recherches, nous avons contacté les responsables de certaines des applications les plus populaires touchées par ce SDK afin de les informer de nos conclusions. Nous avons collaboré avec plusieurs développeurs qui nous ont demandé des informations complémentaires et de l’aide pour comprendre les menaces potentielles pesant sur leurs applications.

Depuis, Mintegral a annoncé l’ouverture du code source de son SDK au marché. À la date de rédaction de cet article, le SDK ne peut être téléchargé que par des partenaires inscrits, mais un important éditeur de jeux nous a communiqué le code source pour que nous puissions l’analyser plus en détail. Nous avons également poursuivi nos recherches en approfondissant l’étude des versions Android du SDK, dans lesquelles nous n’avions pas repéré de comportements similaires au moment de notre divulgation initiale.

Ces travaux ont abouti à des découvertes importantes qui nécessitent une mise à jour de notre divulgation précédente. Mintegral et l’ensemble de la communauté ont également réagi à la situation ; nous avons donc estimé qu’un récapitulatif des événements permettrait de conclure utilement nos recherches sur ce SDK.

Nouvelles découvertes sur iOS

Exécution de code à distance (RCE)

Après l’annonce de Mintegral concernant l’ouverture du code source de son SDK, nous avons analysé les modifications apportées entre la version précédente que nous avions étudiée et la nouvelle version publiée en open source. Cette comparaison a révélé des changements importants qui supprimaient des fonctionnalités dangereuses présentes dans les versions précédentes. Nous avons notamment découvert une porte dérobée qui permettait auparavant à Mintegral d’appeler n’importe quelle méthode statique native de l’application, mais qui pouvait également lui permettre d’exécuter du code à distance sur tout appareil affichant une publicité via son SDK.

Sans surprise, notre analyse a révélé que Mintegral avait supprimé les fonctions anti-débogage et de détection des proxys que nous avions identifiées et présentées dans notre divulgation précédente. Toutefois, une analyse plus approfondie nous a permis de constater que six autres classes, que nous n’avions pas identifiées auparavant, avaient également été supprimées :

  • MTGCommandDispatcher

  • MTGComponentCommands

  • MTGRemoteCommand

  • MTGRemoteCommandParameterModel

  • MTGRemoteCommandParser

  • MTGInvocationBoxing

Nous avons constaté que MTGBaseBridgeWebView, largement utilisé dans le SDK pour communiquer avec JavaScript, permet d’exécuter des fonctions arbitraires et du code natif de l’application. Nous avons pu créer une preuve de concept montrant comment cette porte dérobée permet à Mintegral d’appeler n’importe quelle fonction et d’exécuter du code arbitraire via le SDK. Il s’agit d’une atteinte importante au modèle de sécurité de l’appareil et à la confidentialité des utilisateurs, qui contrevient directement aux règles d’Apple.

Schéma montrant des données privées d’utilisateurs transitant des serveurs de Mintegral vers du code natif, ainsi qu’une charge utile de bannière malveillante dans l’UIWebView de Mintegral.

Pour en savoir plus, consultez notre rapport technique.

Remote Code Execution using Mintegral's MTGInvocationBoxing

Nous avons signalé nos nouvelles découvertes à Apple le 2 octobre. Le lendemain, le 3 octobre, Apple a envoyé une notification aux développeurs des applications concernées pour les informer que leur application était exposée à une exécution de code à distance via une classe du SDK Mintegral. La notification demandait aux développeurs de corriger le problème et de publier une nouvelle version sous une semaine afin de bénéficier d’un examen accéléré.

Bonjour,

Nous vous écrivons pour vous communiquer de nouvelles informations concernant votre application.

Après réévaluation, nous avons constaté que votre application n’est pas conforme aux consignes d’examen de l’App Store. Plus précisément, elle enfreint la règle suivante :

Règle 2.5.2 - Performances - Exigences logiciellesVotre application inclut la classe MTGInvocationBoxing, qui permet l’exécution de code à distance.

Étapes suivantes

Veuillez modifier votre application pour supprimer l’utilisation de la classe MTGInvocationBoxing, puis soumettre une nouvelle version pour examen.

Pour éviter toute interruption de la disponibilité de votre application sur l’App Store, veuillez soumettre une mise à jour dans la semaine suivant la date de ce message.

Si nous ne recevons pas, dans un délai d’une semaine, une mise à jour conforme aux consignes d’examen de l’App Store, votre application sera retirée de la vente.

Veuillez noter que si votre application est jugée non conforme pour quelque raison que ce soit et qu’elle est rejetée après l’expiration du délai accordé, elle sera retirée de la vente jusqu’à ce qu’une mise à jour conforme soit soumise, approuvée et publiée sur l’App Store.

Les prochains envois de cette application pourraient nécessiter un délai d’examen plus long, et celle-ci ne pourra pas bénéficier d’un examen accéléré.

Si vous avez des questions à ce sujet, veuillez répondre à ce message pour nous en informer.

Cordialement, App Store Review

Suivi des requêtes HTTP et d’OpenURL

Après notre divulgation précédente, Mintegral avait désactivé les méthodes de collecte de données via sa fonctionnalité de configuration à distance. Toutefois, au cours de nos recherches ultérieures, nous avons découvert que cette fonctionnalité suspecte avait été réactivée quelques semaines plus tard. Nous l’avons observé dans plusieurs applications populaires que nous avions échantillonnées au départ, et nous l’avons également confirmé sur un éventail plus large d’applications avec l’aide de NowSecure.

La configuration transmise au SDK lors de son initialisation activait les trois indicateurs :

  • cudl - HTTP request tracking

  • cud - OpenURL tracking

  • cspn - StoreKit methods tracking

Cela signifie que la vaste collecte de données et leur transmission à Mintegral étaient de nouveau actives dans toutes les applications utilisant une version du SDK antérieure à la version 6.6.0.0. Dans bien des cas, cela peut se produire sans le consentement du développeur, car cette fonctionnalité du SDK était toujours activée, même si le développeur ou la plateforme de médiation ne l’avait pas activée.

Découvertes concernant le SDK Android

Après avoir terminé nos recherches et notre divulgation sur le SDK iOS, notre équipe de recherche s’est intéressée aux versions Android. Nous avions d’abord relevé des signes indiquant que la version Android comportait des fonctionnalités similaires. À la lumière de ces nouvelles informations, une analyse plus approfondie du code a permis de faire de nouvelles découvertes. Pour connaître tous les détails techniques, consultez le rapport technique sur la version Android du SDK.

Tout d’abord, l’équipe de recherche de Snyk a découvert que plusieurs éléments du code du SDK étaient obfusqués à l’aide du même mécanisme d’encodage propriétaire que celui utilisé pour obfusquer le code de la version iOS du SDK. Là encore, bien que cet encodage ressemble à l’encodage Base64 standard, de subtiles différences empêchent de décoder les chaînes à l’aide d’un encodeur/décodeur Base64 classique.

Après avoir utilisé l’utilitaire interne du SDK pour décoder les chaînes et les données obfusquées, nos chercheurs ont découvert plusieurs méthodes qui vérifient si un débogueur ou un proxy d’interception, quel qu’il soit, est actif afin de capturer les communications réseau. Comme dans la version iOS du SDK, les fonctions de journalisation du SDK Android sont désactivées lorsqu’un débogueur ou un proxy réseau est détecté. Le site web que l’équipe de recherche avait identifié comme destinataire des données enregistrées était également référencé dans le SDK Android.

En poursuivant leur enquête, les chercheurs ont localisé l’implémentation d’un gestionnaire de diffusion à l’écoute de deux intents. Le premier gestionnaire fait partie du mécanisme de détection du débogage mentionné précédemment. Le second, ACTION_PACKAGE_ADDED, est déclenché lorsqu’une nouvelle application est installée sur l’appareil. Le code du SDK Mintegral exécuté en réponse à cet intent vérifie si un package a été ajouté. Le SDK peut ainsi recevoir des données sur chaque application installée sur l’appareil via le Play Store.

Code Java présentant la méthode onReceive() d’AppReceiver qui traite les intents PACKAGE_ADDED dans le SDK mIntegral.
Code de la méthode onReceive() dans le SDK mIntegral

Mais le SDK va plus loin et peut également recueillir des informations sur les autres téléchargements effectués en dehors du Play Store. La classe AlphabObserver, qui étend la classe ContentObserver, contient une méthode qui capture les URI ouverts sur l’appareil. Cette méthode analyse l’URI pour vérifier qu’il s’agit d’une requête de téléchargement et, si celle-ci ne figure pas déjà dans la base de données des applications du SDK, elle l’y ajoute.

Ces comportements sont finalement similaires à ceux observés dans la version iOS du SDK. La principale différence est que le SDK, en écoutant un intent de diffusion, peut recevoir des données sur des installations d’applications qui n’ont pas été lancées par l’application hôte dans laquelle il est intégré. En clair, si une seule application sur l’appareil d’un utilisateur utilise le SDK Mintegral, cette instance du SDK peut voir toutes les installations d’applications et tous les téléchargements effectués sur l’appareil. La vidéo ci-dessous montre comment l’URL d’un document Google ouvert sur l’appareil est transmise à Mintegral.

Malicious Mintegral SDK Leaks Data on Android

Snyk a communiqué à Google les détails de ses découvertes concernant le SDK Mintegral. Google a pris la question au sérieux et poursuit son enquête. Google a confirmé l’exactitude de l’analyse technique du code fournie par Snyk. Cependant, Google n’a pas encore indiqué si, et de quelle manière, il comptait réagir à la situation.

Réaction de la communauté

Depuis notre divulgation initiale, à la fin du mois d’août, l’écosystème et la communauté ont réagi de manière significative. De son côté, Mintregral a nié toute faute. Dans un article de blog publié par la suite, Mintegral a indiqué que l’ampleur inhabituelle de sa collecte de données visait à permettre à son SDK de mieux adapter les publicités à chaque utilisateur. Le 26 août 2020, ou aux alentours de cette date, Mintegral a apporté de nombreux changements à sa politique de confidentialité. Dans une annonce ultérieure, Mintegral a indiqué qu’elle ouvrait le code source de son SDK au marché.

AppsFlyer et Singular, deux grands fournisseurs de mesure mobile (MMP), ont réagi en publiant leurs propres analyses et en améliorant leurs offres de lutte contre la fraude afin de détecter et de prévenir les attaques de détournement d’installations. Singular a publié un article de blog intitulé « SourMint ? Comment se protéger contre la fraude au détournement de clics sur iOS ». Dans cet article, l’entreprise a analysé et mis en évidence des signes d’activité de détournement de clics sur certains réseaux basés sur des SDK, et comparé les taux d’activité suspecte avant et après notre publication.

Avant notre divulgation, ces applications présentaient un nombre important de clics suspectés d’avoir été détournés. Cependant, après la publication de notre divulgation, ils ont observé une forte baisse des faux clics en moins de 24 heures.

Tableau comparant les taux de clics avant et après la publication, qui montre une forte baisse pour les réseaux concernés A, B et C.
Une diminution spectaculaire des faux clics après l’heure de publication de mintregral

Selon une annonce publiée sur son site le 3 septembre 2020, MoPub, la plateforme mobile de publication et de monétisation de Twitter, a supprimé Mintegral de la liste de ses partenaires réseau dans son annonce initialement publiée le 26 février 2020. De plus, dans sa documentation sur la médiation, MoPub classe désormais Mintegral parmi les réseaux obsolètes et indique qu’il doit être « supprimé de tous les segments d’inventaire et éléments de campagne ».

La plateforme de médiation ironSource a également réagi à la divulgation de SourMint. Voici sa déclaration :

Des rapports récents ont formulé de graves accusations à l’encontre de Mintegral. ironSource a mené sa propre enquête et, au vu de ses conclusions, la plateforme de médiation ironSource a mis fin à tous les services et à toute l’assistance produit liés à Mintegral.

Plateforme de médiation ironSource

Conclusions

En définitive, la situation concernant SourMint est très claire. Il ne fait aucun doute que le SDK de Mintegral recourt à diverses techniques pour dissimuler son comportement aux développeurs, aux équipes chargées de l’examen de l’App Store et aux analystes indépendants en sécurité. Ces comportements cachés s’appuient sur des techniques permettant au SDK d’exécuter du code arbitraire sur les appareils iOS et d’accéder à bien plus de données sur l’activité des utilisateurs que nécessaire pour l’attribution publicitaire, exposant ainsi des informations potentiellement privées à Mintegral. Ces données sont consultées en dehors du SDK lui-même, ce qui rend leur collecte très suspecte.

Au fil des ans, l’équipe de recherche en sécurité de Snyk a identifié et divulgué de manière responsable des milliers de vulnérabilités dans des packages open source, signalé la porte dérobée malveillante présente dans le très populaire package npm event-stream et couvert plusieurs autres cas de composants malveillants. Au terme de nos recherches sur SourMint, nous sommes heureux de constater les retombées de notre travail : les fonctionnalités que nous avons identifiées et signalées ont été supprimées du SDK, le détournement de clics et la fraude à l’attribution ont cessé, et le SDK est désormais open source. Enfin, nous nous réjouissons de la sensibilisation accrue à ce problème au sein de la communauté du développement mobile, ainsi que de la rapidité avec laquelle des entreprises du secteur de la publicité mobile ont agi pour protéger leurs utilisateurs.

Pour les développeurs d’applications, cela souligne la nécessité de vérifier la fiabilité des plateformes de monétisation qu’ils choisissent. Même avec une analyse détaillée du code, il peut être très difficile de repérer des comportements malveillants ou inattendus. Il incombe en dernier ressort au développeur de l’application d’informer les utilisateurs de la collecte de données. Inclure à son insu des SDK qui accèdent à de grandes quantités de données peut donc exposer le propriétaire de l’application à des sanctions pour non-respect des règles des boutiques d’applications. Nous espérons que cette divulgation a permis de mieux comprendre les enjeux et que les développeurs d’applications sont désormais davantage conscients des mesures nécessaires pour protéger les données privées de leurs utilisateurs.

Chronologie

Date

Étape

5 août

L’équipe de recherche de Snyk découvre que le SDK iOS de Mintegral collecte excessivement des données et détourne des clics

17 août

Snyk divulgue ses conclusions à Apple de manière responsable

24 août

Snyk publie ses conclusions sur Sour Mint pour iOS 

25 août

Mintegral publie une déclaration niant les accusations visant son SDK

3 septembre

IronSource annonce le retrait de Mintegral de sa plateforme de médiation

3 septembre

Mintegral publie la version 6.5.0.0 de son SDK iOS, qui supprime le composant malveillant et caché _CXX_CXX_OperationPKTask

4 septembre

La plateforme de médiation MoPub (Twitter) annonce la révocation de l’agrément de Mintegral sur sa plateforme

4 septembre

Mintegral annonce son intention de publier son SDK en open source

4 septembre

L’équipe de recherche de Snyk découvre une fonctionnalité cachée de suivi des téléchargements dans la version Android du SDK

9 septembre

Snyk divulgue ses conclusions concernant le SDK Android à Google de manière responsable

10 septembre

Mintegral publie la version 6.6.0.0 de son SDK iOS, qui supprime le composant de porte dérobée MTGRemoteCommandParser

22 septembre

Snyk obtient le code source de la version 6.6.0.0 du SDK iOS et effectue une analyse différentielle

23 septembre

Snyk découvre que Mintegral a supprimé de son SDK Android le module de suivi des téléchargements Google

30 septembre

Grâce à une analyse différentielle, Snyk découvre une porte dérobée dans la version iOS du SDK permettant l’exécution de code à distance (RCE)

2 octobre

Snyk divulgue ses nouvelles conclusions concernant iOS à Apple de manière responsable

3 octobre

Apple avertit les éditeurs concernés et leur demande de supprimer le code permettant l’exécution de code à distance (RCE)

15 octobre

Snyk publie ses dernières conclusions concernant iOS et Android

Lire la suite

Blog

Les modèles de pointe ont trouvé les vulnérabilités. Seul l’attaquant a trouvé les chaînes d’exploitation.

L’analyse statique a détecté les failles, mais seuls des tests d’attaque en conditions réelles ont prouvé comment elles pouvaient être enchaînées pour provoquer des compromissions. Comparaison d’Evo COS, de Claude Security et de Claude Code Security.

feature insights context
Blog

Les attaques autonomes sont déjà là. La défense doit suivre leur rythme.

Les attaquants autonomes réduisent la fenêtre de défense. Découvrez comment la découverte, la correction, la validation et la prévention continues peuvent aider les équipes de sécurité à suivre le rythme.

Blog

Votre backlog de vulnérabilités n’est plus une dette technique, c’est une surface d’attaque

Un backlog de vulnérabilités qui s’allonge est plus qu’une dette technique : c’est une surface d’attaque. Découvrez pourquoi les anciennes hypothèses de risque, les attaquants automatisés et les vulnérabilités en chaîne exigent une nouvelle approche.