Janus Exploit permite que invasores modifiquem aplicativos sem afetar assinaturas

A vulnerabilidade Janus permite que invasores modifiquem aplicativos sem afetar suas assinaturas. Foi descoberto pelo GuardSquare e corrigido pelo Google.

O Android está instalado em um grande número de dispositivos e isso o torna alvo de invasores mal-intencionados. Vulnerabilidades no sistema operacional móvel do Google continuam a ser descobertas todos os meses, mas a boa notícia é que o Google geralmente é diligente em corrigi-los em patches de segurança regulares que são oferecidos aos OEMs, que os enviam para dispositivos.

Recentemente, pesquisadores de segurança descobriram uma vulnerabilidade que enganou os usuários para que permitissem que invasores gravassem a tela de seus dispositivos. Essa exploração específica foi corrigida no Android Oreo, mas os analistas da GuardSquare relatou recentemente outra vulnerabilidade séria que afeta aplicativos Android assinados por esquemas de assinatura mais antigos.

GuardSquareO relatório da empresa afirma que Janovulnerabilidade (CVE-2017-13156) no Android permite que invasores modifiquem o código em aplicativos sem afetar suas assinaturas. O relatório continua dizendo que a raiz da vulnerabilidade é que um arquivo pode ser um arquivo APK válido e um arquivo DEX válido ao mesmo tempo.

Janus aproveita o fato de que bytes extras passam despercebidos em arquivos APK e arquivos DEX. O GuardSquare relatório explica que um arquivo APK é um arquivo ZIP que pode conter bytes arbitrários no início, antes e entre suas entradas ZIP. O esquema de assinatura JAR leva em consideração apenas as entradas ZIP, ignorando quaisquer bytes extras ao calcular ou verificar a assinatura do aplicativo.

Ele continua explicando que um arquivo DEX, por outro lado, pode conter bytes arbitrários no final - após as seções regulares de strings, classes, definições de métodos, etc. Portanto, um arquivo pode ser um arquivo APK válido e um arquivo DEX válido ao mesmo tempo.

GuardSquare também menciona que um elemento-chave da vulnerabilidade é um recurso “inofensivo” da máquina virtual Dalvik/ART. O relatório afirma que, em teoria, o tempo de execução do Android carrega o arquivo APK, extrai seu arquivo DEX e então executa seu código. Porém, na prática, a máquina virtual (VM) pode carregar e executar tanto arquivos APK quanto arquivos DEX. O problema é que quando a VM obtém um arquivo APK, ela ainda analisa os bytes mágicos no cabeçalho para decidir que tipo de arquivo é: DEX ou APK. Ao encontrar um cabeçalho DEX, ele carrega o arquivo como um arquivo DEX. Se não encontrar um cabeçalho, ele carrega o arquivo como um arquivo APK contendo uma entrada zip com um arquivo DEX. Assim, ele pode interpretar mal arquivos DEX/APK duplos.

GuardSquare diz que um invasor pode aproveitar esse recurso de dualidade da VM para adicionar um arquivo DEX malicioso a um arquivo APK normal sem afetar sua assinatura. O tempo de execução do Android aceitará o arquivo APK como uma atualização válida para uma versão anterior legítima do aplicativo, mas a VM Dalvik carregará o código do arquivo DEX, que foi injetado com código malicioso.

Normalmente, sempre que um usuário instala uma versão atualizada de um aplicativo, a assinatura do aplicativo é verificada pelo tempo de execução do Android para garantir que corresponde à versão mais antiga. Quando a verificação é positiva, a aplicação atualizada obtém as permissões que foram concedidas à aplicação original. Dessa forma, os invasores podem usar a vulnerabilidade Janus para contornar o processo de verificação de assinatura e instalar código não verificado nos dispositivos de usuários desavisados.

O que é ainda pior é que esse código não verificado pode obter acesso a permissões poderosas. Isto dá origem a algumas possibilidades graves. GuardSquare afirma:

“Um invasor pode substituir um aplicativo confiável com altos privilégios (um aplicativo de sistema, por exemplo) por uma atualização modificada para abusar de suas permissões. Dependendo do aplicativo visado, isso pode permitir que o hacker acesse informações confidenciais armazenadas no dispositivo ou até mesmo assuma completamente o controle do dispositivo. Alternativamente, um invasor pode passar um clone modificado de um aplicativo confidencial como uma atualização legítima [que] pode parecer e se comportar como o aplicativo original, mas injetar comportamento malicioso.”

A empresa acrescentou que, até o momento, não havia visto nenhum aplicativo explorando o Janus na natureza. A outra boa notícia é que a vulnerabilidade exige que o usuário instale uma atualização maliciosa de uma fonte fora da Google Play Store. Portanto, os usuários que limitam as instalações de aplicativos na Play Store estão protegidos.

A vulnerabilidade Janus afeta dispositivos com Android 5.0+. Os aplicativos que foram assinados com o esquema de assinatura APK v1 são afetados. APKs assinados com esquema de assinatura v2 estão protegidos contra a vulnerabilidade. Isso requer que os APKs sejam executados em dispositivos compatíveis com o esquema de assinatura mais recente (Android 7.0 e mais recente). O esquema v2 é protegido porque, diferentemente do esquema v1, ele considera todos os bytes do arquivo APK.

“Versões mais antigas de aplicativos e aplicativos mais recentes executados em dispositivos mais antigos permanecem suscetíveis. Os desenvolvedores devem pelo menos sempre aplicar o esquema de assinatura v2," GuardSquare estados.

GuardSquare relatou esse problema ao Google em 31 de julho de 2017 e recebeu confirmação no mesmo dia. O relatório da empresa diz que o Google lançou um patch para seus parceiros em novembro e publicou o bug (CVE-2017-13156) no Android Security Bulletin em 4 de dezembro de 2017. A vulnerabilidade tem foi corrigido no patch de segurança do Android de dezembro de 2017. Separadamente, os aplicativos F-Droid de seu repositório oficial foram confirmados como seguros. Por último, foi confirmado que a vulnerabilidade foi corrigida em APKMirror.


Fonte: GuardSquare