Uma grande porcentagem de dispositivos inteligentes, em uso atualmente, utiliza o Qualcomm Snapdragon SoCs (sistemas em chip). O site da empresa tem uma nota dizendo que mais de um bilhão de dispositivos estão equipados com processadores ou modems Snapdragon. Infelizmente, muitos desses dispositivos contêm falhas de segurança que podem permitir que um agressor tenha um acesso a raiz do aparelho. Obter acesso a raiz de um dispositivo é muito valioso; permite que o agressor ganhe acesso a vários recursos que não teria sob circunstâncias normais.
Recentemente descobrimos vulnerabilidades afetando dispositivos Android, com o Snapdragon, que podem ser exploradas por um agressor para obter acesso ao dispositivo alvo simplesmente executando um aplicativo malicioso. Essas vulnerabilidades agora foram corrigidas pelo Google; relatamos esses problemas a eles de forma privada permitindo que um patch fosse criado e distribuído ao público. Porém, dada a natureza fragmentada da correção de vulnerabilidades em dispositivos móveis e na Internet das Coisas (IoT), muitos usuários podem não conseguir receber a atualização de segurança necessária e continuar em risco, entre outras coisas, de exposição de informações.
Com o número de dispositivos com SoCs incorporados explodindo com o crescimento da IoT, antecipamos que esses tipos de vulnerabilidades se tornarão um problema maior, desafiando a postura de segurança em geral da Internet das Coisas.
CVE-2016-0819
Descobrimos essa vulnerabilidade em particular que é descrita como um bug de lógica quando um objeto dentro do kernel é liberado. Um nó é apagado duas vezes antes de ser liberado. Isso causa um vazamento de informações e um problema de Use After Free no Android. (Problemas de UAF são famosos por estarem no coração de exploits, especialmente no Internet Explorer).
CVE-2016-0805
Essa vulnerabilidade reside na função get_krait_evtinfo. (Krait se refere ao núcleo do processador usado por vários processadores Snapdragon). Essa função devolve um índice para um arranjo; porém, a validação das entradas dessa função não é suficiente. Por isso, quando o arranjo krait_functions é acessado pelas funções krait_clearpmu and krait_evt_setup, resulta em um acesso fora dos limites. Isso pode ser útil como parte de um ataque múltiplo de exploits.
Ganhando acesso a raiz
Usando esses dois exploits, uma pessoa pode obter acesso a um dispositivo Android que utiliza o Snapdragon. Isso pode ser feito através de um aplicativo malicioso no dispositivo. Para impedir mais ataques que podem visar vulnerabilidades não corrigidas, ou vulnerabilidades semelhantes que ainda não foram descobertas, estamos divulgando os detalhes completos desse ataque.
Quais dispositivos estão vulneráveis?
A chamada de sistema perf_event_open (que foi usada nesse ataque) está aberta na maioria dos smartphones. Mas, os fornecedores podem personalizar bastante o kernel e as políticas SELinux de seus dispositivos, dificultando identificar quais dispositivos estão vulneráveis.
Segundo o boletim de segurança do Google, de fevereiro, a CVE-2016-0805 afeta versões anteriores, 4.4.4 a 6.0.1. Não podemos testar amplamente todos os dispositivos Android, mas nossos próprios testes indicam que os seguintes dispositivos foram afetados:
- Nexus 5
- Nexus 6
- Nexus 6P
- Samsung Galaxy Note Edge
Acreditamos que qualquer dispositivo Android que utilize o Snapdragon com um kernel versão 3.10 pode estar em risco. Como dito antes, como muitos desses dispositivos não estão mais sendo corrigidos ou nunca receberam nenhum patch, eles seriam deixados em uma situação insegura sem nenhuma correção futura.
Sumário
Esse ataque permite que um agressor consiga os privilégios de qualquer código executado no dispositivo alvo. Porém, esse cenário ainda depende do agressor colocar o código maliciosos no dispositivo primeiro. Os usuários devem tomar muito cuidado ao instalar aplicativos de fontes não confiáveis, especialmente fora do Play Store.
Aconselhamos aos usuários do Android verificar com os fabricantes se uma atualização está disponível para corrigir essas falhas.