Skip to main content

SourMint: execução remota de código no iOS, descobertas no Android e resposta da comunidade

blog tumbnail

15 de outubro de 2020

0 minutos de leitura

A equipe de pesquisa da Snyk está comprometida em ajudar a proteger os ecossistemas de desenvolvimento, investigando e divulgando possíveis exposições de segurança que possam afetar quem desenvolve aplicativos. Como parte desse trabalho contínuo, a Snyk usou novas informações para realizar pesquisas adicionais sobre o SDK da Mintegral. Com isso, foram descobertas novas vulnerabilidades.

As descobertas mais recentes incluem a capacidade de a Mintegral executar código remotamente por meio do SDK. Além disso, trabalhamos com desenvolvedores para ajudar na resposta às nossas divulgações, e houve reações relevantes tanto da Mintegral quanto da comunidade de publicidade para dispositivos móveis que também merecem destaque. Esta é uma atualização sobre os acontecimentos desde nossa divulgação inicial dos possíveis problemas de segurança e privacidade que identificamos no SDK de publicidade da Mintegral.

Em resumo:

  • A Snyk identificou uma possível funcionalidade de backdoor que permite a execução remota de código por meio de anúncios exibidos pelo SDK.

  • Identificamos uma funcionalidade oculta de “rastreamento de downloads” na versão Android do SDK, que enviava à Mintegral informações sobre quaisquer downloads feitos de domínios do Google, incluindo aplicativos (APK), documentos do Google e outros recursos.

  • A Mintegral tomou diversas medidas em resposta às preocupações destacadas em nossas divulgações iniciais.

  • A comunidade de publicidade para dispositivos móveis reagiu rapidamente, com vários participantes removendo a Mintegral de suas plataformas.

Resumo

Em 24 de agosto de 2020, a Snyk anunciou a descoberta de comportamentos suspeitos na versão para iOS de um popular SDK de publicidade chamado Mintegral. Na época, confirmamos com parceiros da área de atribuição de publicidade que, no mínimo, a Mintegral parecia usar essa funcionalidade para coletar grandes volumes de dados e cometer fraude de atribuição de anúncios. Nossa pesquisa mostrou que a Mintegral usava ofuscação de código e method swizzling para modificar, sem o conhecimento de quem era responsável pelo aplicativo, o funcionamento de métodos básicos do SDK do iOS. Além disso, nossa pesquisa comprovou que a Mintegral registrava todas as solicitações HTTP, incluindo seus cabeçalhos, que poderiam conter tokens de autorização ou outros dados confidenciais.

Nossa descoberta teve ampla repercussão em diversos veículos de imprensa e nas redes sociais. Como parte da pesquisa, entramos em contato com as equipes responsáveis por alguns dos aplicativos mais populares afetados pelo SDK para informá-las sobre nossas descobertas. Também trabalhamos com vários desenvolvedores que solicitaram mais informações e ajuda para entender as possíveis ameaças aos seus aplicativos.

Desde então, a Mintegral anunciou que abriria o código-fonte de seu SDK para o mercado. Embora, até o momento desta publicação, o SDK só possa ser baixado por parceiros cadastrados, uma grande publicadora de jogos compartilhou o código-fonte conosco para uma análise mais aprofundada. Também continuamos nossa pesquisa, investigando melhor as versões Android do SDK, nas quais não havíamos encontrado comportamentos semelhantes na época da divulgação inicial.

Isso levou a descobertas importantes que exigem uma atualização da nossa divulgação anterior. Além disso, a Mintegral e a comunidade em geral reagiram à situação, e consideramos que um resumo dos acontecimentos seria uma boa maneira de concluir nossa pesquisa sobre esse SDK.

Novas descobertas no iOS

Execução remota de código (RCE)

Depois que a Mintegral anunciou que disponibilizaria seu SDK como código aberto, analisamos as mudanças entre a versão anterior, que havíamos examinado, e a nova versão publicada como código aberto. Nessa comparação, encontramos mudanças significativas que removeram funcionalidades perigosas presentes nas versões anteriores. Mais importante, descobrimos um backdoor que antes permitia à Mintegral invocar qualquer método estático nativo dentro do aplicativo e que também poderia permitir a execução remota de código em qualquer dispositivo que exibisse um anúncio pelo SDK.

Como era de se esperar, nossa análise constatou que a Mintegral removeu os mecanismos de detecção de depuradores e proxies que havíamos identificado e divulgado em nossa publicação anterior. Porém, uma análise adicional revelou que a empresa também removeu outras seis classes que ainda não havíamos identificado:

  • MTGCommandDispatcher

  • MTGComponentCommands

  • MTGRemoteCommand

  • MTGRemoteCommandParameterModel

  • MTGRemoteCommandParser

  • MTGInvocationBoxing

Descobrimos que MTGBaseBridgeWebView, amplamente usado no SDK para se comunicar com JavaScript, permite executar funções arbitrárias e código nativo do aplicativo. Conseguimos criar uma prova de conceito que mostrou como o backdoor permite à Mintegral invocar qualquer função e executar código arbitrário por meio do SDK. Isso representa uma violação grave do modelo de segurança do dispositivo e da privacidade do usuário, além de contrariar diretamente as políticas da Apple.

Diagrama que mostra dados privados de usuários sendo enviados dos servidores da Mintegral para o código nativo e um payload malicioso de banner na UIWebView da Mintegral.

Para ver todos os detalhes, consulte o relatório técnico da pesquisa.

Remote Code Execution using Mintegral's MTGInvocationBoxing

Divulgamos nossas novas descobertas à Apple em 2 de outubro e, no dia seguinte, 3 de outubro, a empresa enviou uma notificação aos desenvolvedores dos aplicativos afetados, informando que seus aplicativos estavam expostos à execução remota de código por meio de uma classe do SDK da Mintegral. A notificação pediu que os desenvolvedores corrigissem o problema e publicassem uma nova versão em até uma semana para análise prioritária.

Olá,

Estamos entrando em contato para informar que há novas informações sobre seu aplicativo.

Após uma nova avaliação, constatamos que seu aplicativo não está em conformidade com as Diretrizes de Revisão da App Store. Especificamente, identificamos a seguinte violação:

Diretriz 2.5.2 — Desempenho — Requisitos de softwareSeu aplicativo inclui a classe MTGInvocationBoxing, que permite a execução remota de código.

Próximas etapas

Altere seu aplicativo para remover o uso da classe MTGInvocationBoxing e envie uma nova versão para análise.

Para evitar que seu aplicativo fique indisponível na App Store, envie uma atualização em até uma semana a partir da data desta mensagem.

Se não recebermos uma atualização em conformidade com as Diretrizes de Revisão da App Store dentro de uma semana, seu aplicativo será removido da venda.

Observe que, se seu aplicativo for considerado fora de conformidade por qualquer motivo e for rejeitado após o prazo informado, ele será removido da venda até que uma atualização em conformidade seja enviada, aprovada e publicada na App Store.

Envios futuros deste aplicativo poderão levar mais tempo para serem analisados, e o aplicativo não poderá receber análise prioritária.

Se tiver alguma dúvida sobre estas informações, responda a esta mensagem para nos avisar.

Atenciosamente, Equipe de Revisão da App Store

Rastreamento de solicitações HTTP e OpenURL

Após nossa divulgação anterior, a Mintegral desativou os métodos de coleta de dados por meio da funcionalidade de configuração remota. Porém, em pesquisas posteriores, descobrimos que a empresa reativou essa funcionalidade suspeita algumas semanas depois. Observamos isso em vários aplicativos populares que havíamos analisado inicialmente e também confirmamos o comportamento em um conjunto mais amplo de aplicativos com a ajuda da NowSecure.

A configuração enviada ao SDK durante a inicialização tinha os três sinalizadores ativados:

  • cudl - HTTP request tracking

  • cud - OpenURL tracking

  • cspn - StoreKit methods tracking

Isso significa que, em todos os aplicativos com uma versão do SDK anterior à 6.6.0.0, a coleta extensa de dados e o envio de registros à Mintegral foram reativados. Em muitos casos, isso pode acontecer sem o consentimento do desenvolvedor, pois essa funcionalidade do SDK sempre esteve ativada, mesmo quando o desenvolvedor ou a plataforma de mediação não a habilitava.

Descobertas sobre o SDK para Android

Após concluir a pesquisa e a divulgação sobre o SDK para iOS, nossa equipe voltou a atenção para as versões Android. Embora inicialmente tivéssemos encontrado indícios de que a versão Android continha funcionalidades semelhantes, essas novas informações nos levaram a examinar o código mais a fundo e encontrar outros problemas. Para ver todos os detalhes técnicos, consulte o relatório técnico sobre a versão Android do SDK.

Em primeiro lugar, a equipe de pesquisa da Snyk descobriu que vários elementos do código do SDK são ofuscados usando o mesmo mecanismo proprietário de codificação empregado para ofuscar o código na versão iOS do SDK. Mais uma vez, embora se pareça com a codificação Base64 padrão, há diferenças sutis que impedem o uso de um codificador/decodificador Base64 comum para decodificar as strings.

Ao usar o utilitário interno do SDK para decodificar strings e dados ofuscados, nossos pesquisadores encontraram vários métodos que verificam se há um depurador em execução ou algum proxy de interceptação ativo para capturar comunicações de rede. Assim como na versão iOS do SDK, os comportamentos de registro da versão Android são desativados quando um depurador ou proxy de rede é detectado. O mesmo site que a equipe de pesquisa identificou como destino dos dados registrados também foi mencionado no SDK para Android.

À medida que a investigação avançava, a equipe de pesquisa localizou a implementação de um manipulador de broadcasts que escuta duas intents. O primeiro manipulador faz parte do mecanismo de detecção de depuração mencionado anteriormente. O segundo, ACTION_PACKAGE_ADDED, é acionado quando um novo aplicativo é instalado no dispositivo. O código do SDK da Mintegral executado em resposta a essa intent verifica se um pacote foi adicionado. Com isso, o SDK pode receber dados sobre todos os aplicativos instalados no dispositivo pela Play Store.

Código Java que mostra o método onReceive() de AppReceiver tratando intents PACKAGE_ADDED no SDK mIntegral.
Código do método onReceive() no SDK mIntegral

Mas o SDK vai além e também consegue coletar informações sobre outros downloads feitos fora da Play Store. A classe AlphabObserver, que estende a classe ContentObserver, contém um método que captura URIs abertos no dispositivo. Esse método analisa o URI para verificar se corresponde a uma solicitação de download e, se ainda não estiver no banco de dados de aplicativos do SDK, adiciona-o.

Em última análise, os comportamentos são semelhantes aos observados na versão iOS do SDK. A principal diferença é que, por escutar uma intent de broadcast, o SDK consegue receber dados sobre instalações de aplicativos que não foram iniciadas pelo aplicativo que o inclui. Na prática, se ao menos um aplicativo no dispositivo de um usuário usar o SDK da Mintegral, essa instância do SDK terá visibilidade sobre todas as instalações e os downloads de aplicativos feitos no dispositivo. O vídeo a seguir mostra como o URL de um documento do Google aberto no dispositivo é enviado à Mintegral.

Malicious Mintegral SDK Leaks Data on Android

A Snyk comunicou à Google os detalhes das descobertas sobre o SDK da Mintegral. A empresa levou o assunto a sério e continua investigando. A Google confirmou que a análise técnica do código fornecida pela Snyk está correta. No entanto, ainda não se pronunciou sobre se pretende responder à situação e de que forma.

Resposta da comunidade

Desde nossa divulgação inicial, no fim de agosto, o ecossistema e a comunidade reagiram de forma significativa. A Mintegral, por sua vez, negou qualquer irregularidade. Em uma publicação posterior no blog, a empresa afirmou que o nível incomum de coleta de dados tinha o objetivo de ajudar seu SDK a exibir anúncios mais relevantes para os usuários. Por volta de 26 de agosto de 2020, a Mintegral fez várias alterações em sua política de privacidade. Em um comunicado posterior, anunciou que abriria o código-fonte de seu SDK para o mercado.

A AppsFlyer e a Singular, duas importantes empresas de mensuração para dispositivos móveis (MMPs), responderam com suas próprias análises e implementaram melhorias em suas ofertas antifraude para detectar e impedir ataques de sequestro de instalações. A Singular publicou um artigo no blog intitulado “SourMint? Como se proteger contra fraudes de sequestro de cliques no iOS”. Na publicação, analisou e encontrou indícios de atividades de sequestro de cliques em algumas redes baseadas em SDK e comparou a taxa de atividade suspeita antes e depois da nossa divulgação.

O que descobriram foi que, antes da nossa divulgação, esses aplicativos apresentavam um nível significativo de cliques suspeitos, possivelmente sequestrados. No entanto, após a divulgação pública, observaram uma queda drástica nos cliques falsos em menos de 24 horas.

Tabela que compara as taxas de cliques antes e depois da publicação, mostrando quedas acentuadas nas redes afetadas A, B e C.
Uma redução drástica nos cliques fraudulentos após o horário de publicação da mintregral

De acordo com um aviso publicado em seu site em 3 de setembro de 2020, a plataforma de publicação e monetização móvel do Twitter, MoPub, removeu a menção à Mintegral como parceira de rede do anúncio publicado originalmente em 26 de fevereiro de 2020. Além disso, em sua documentação de mediação, a MoPub agora lista a Mintegral como uma rede descontinuada, indicando que ela deve ser “removida de todos os segmentos de inventário e itens de linha”.

A plataforma de mediação da ironSource também se manifestou sobre a divulgação do SourMint. A empresa declarou:

Relatos recentes levantaram acusações graves sobre a Mintegral. A ironSource conduziu sua própria análise e, com base em nossas conclusões, a plataforma de mediação da ironSource encerrou todos os serviços e o suporte a produtos relacionados à Mintegral.

Plataforma de mediação da ironSource

Conclusões

Em última análise, a situação do SourMint é muito clara. Não há dúvida de que o SDK da Mintegral usa várias técnicas para ocultar seu comportamento de desenvolvedores, da análise da App Store e de análises de segurança independentes. Os comportamentos ocultos empregam técnicas que permitem ao SDK executar código arbitrário em dispositivos iOS e acessar muito mais dados sobre a atividade dos usuários do que seria necessário para atribuir anúncios, expondo informações potencialmente privadas à Mintegral. Esses dados são acessados fora do próprio SDK, o que torna sua coleta muito suspeita.

Ao longo dos anos, a equipe de pesquisa de segurança da Snyk identificou e divulgou de forma responsável milhares de vulnerabilidades em pacotes de código aberto, identificou o backdoor malicioso no popular pacote npm event-stream e abordou diversos outros casos de componentes maliciosos. Ao concluir a pesquisa sobre o SourMint, ficamos felizes em ver o impacto do nosso trabalho: a funcionalidade que identificamos e divulgamos foi removida do SDK, o sequestro de cliques e a fraude de atribuição foram interrompidos, e o código-fonte do SDK foi aberto. Também é ótimo ver que a comunidade de desenvolvimento móvel está mais consciente do problema, e que empresas do setor de publicidade móvel agiram rapidamente para proteger seus usuários.

Para desenvolvedores de aplicativos, isso reforça a necessidade de verificar se as plataformas de monetização escolhidas são confiáveis. Mesmo com uma análise detalhada do código, pode ser muito difícil identificar comportamentos maliciosos ou inesperados. A responsabilidade por informar os usuários sobre a coleta de dados é, em última análise, do desenvolvedor do aplicativo. Por isso, incluir sem saber SDKs que acessam grandes volumes de dados pode levar o proprietário do aplicativo a violar as políticas das lojas de aplicativos. Esperamos que esta divulgação ajude a esclarecer o panorama geral e que os desenvolvedores de aplicativos estejam mais cientes das medidas necessárias para proteger os dados privados de seus usuários.

Cronologia

Data

Etapa

5 de agosto

A equipe de pesquisa da Snyk identifica que o SDK para iOS da Mintegral coleta dados em excesso e sequestra cliques

17 de agosto

A Snyk divulga as descobertas à Apple de forma responsável

24 de agosto

A Snyk publica as descobertas sobre o SourMint para iOS

25 de agosto

A Mintegral publica um comunicado negando as acusações sobre o SDK

3 de setembro

A ironSource anuncia a remoção da Mintegral de sua plataforma de mediação

3 de setembro

A Mintegral lança a versão 6.5.0.0 do SDK para iOS, removendo o componente oculto e malicioso _CXX_CXX_OperationPKTask

4 de setembro

A plataforma de mediação MoPub (Twitter) anuncia a descontinuação da certificação da Mintegral em sua plataforma

4 de setembro

A Mintegral anuncia planos de abrir o código-fonte do SDK

4 de setembro

A equipe de pesquisa da Snyk identifica uma funcionalidade oculta de rastreamento de downloads na versão para Android do SDK

9 de setembro

A Snyk divulga as descobertas sobre o SDK para Android ao Google de forma responsável

10 de setembro

A Mintegral lança a versão 6.6.0.0 do SDK para iOS, removendo o componente de backdoor MTGRemoteCommandParser

22 de setembro

A Snyk obtém o código-fonte da versão 6.6.0.0 do SDK para iOS e realiza uma análise comparativa

23 de setembro

A Snyk identifica que a Mintegral removeu o módulo de rastreamento de downloads do Google de seu SDK para Android

30 de setembro

Por meio de uma análise comparativa, a Snyk identifica um backdoor na versão para iOS do SDK que permite a execução remota de código (RCE)

2 de outubro

A Snyk divulga as novas descobertas sobre iOS à Apple de forma responsável

3 de outubro

A Apple notifica os publishers afetados e solicita a remoção do código que permite a execução remota de código (RCE)

15 de outubro

A Snyk publica as descobertas mais recentes sobre iOS e Android

Leia mais

Blog

Modelos de ponta encontraram as vulnerabilidades. Só o atacante encontrou as cadeias.

A análise estática encontrou as falhas, mas só os testes de ataque em aplicações ativas provaram como elas poderiam ser encadeadas para causar invasões. Uma comparação entre Evo COS, Claude Security e Claude Code Security.

feature insights context
Blog

Os ataques autônomos já chegaram. A defesa precisa acompanhar o ritmo.

Os atacantes autônomos estão reduzindo o tempo disponível para a defesa. Saiba como a descoberta, a correção, a validação e a prevenção contínuas ajudam as equipes de segurança a acompanhar esse ritmo.

Blog

Seu backlog de vulnerabilidades não é mais uma dívida técnica — é uma superfície de ataque

Um backlog crescente de vulnerabilidades é mais do que uma dívida técnica: ele é uma superfície de ataque. Entenda por que suposições de risco desatualizadas, atacantes automatizados e descobertas encadeadas exigem uma nova abordagem.