Atualização de segurança do Android corrige vulnerabilidades Stagefright descobertas pela Trend Micro

A descoberta da primeira vulnerabilidade Stagefright em julho passado acabou sendo apenas o começo de muitos problemas de segurança para os usuários de Android.

O boletim de segurança mais recente para dispositivos Nexus, divulgado no começo deste mês, inclui atualizações para 15 vulnerabilidades de execução de código remoto relacionadas ao libstagefright, todas marcadas como críticas. Nós descobrimos quatro das vulnerabilidades mencionadas acima (todas afetando a versão Lollipop 5.1 e anteriores):

• CVE-2015-3823

• CVE-2015-6600

• CVE-2015-3871

• CVE-2015-3872

Detalhes das quatro vulnerabilidades

CVE-2015-3823

Essa vulnerabilidade permite que os agressores realizem ataques de negação de serviço (DoS) no programa MediaServer do Android. Isso faz com que o sistema do dispositivo reinicie e esgote toda a vida útil de sua bateria. Esse bug é um integer overflow na análise sintática do Matroska (MKV). Foi antes classificada como uma vulnerabilidade moderada mas o Google elevou sua classificação para crítica.

CVE-2015-6600

Esse bug está relacionado à análise sintática de MP4. Especificamente, uma verificação de limite está faltando na caixa “stsz/stz2” durante a extração do arquivo MP4.

Figura 1. Bug integer overflow na caixa “stsz/stz2”

Como o “max_size” pode ser controlado pelo agressor, um possível integer overflow pode acontecer na atribuição marcada em vermelho, onde o meta está faltando com a chave “kKeyMaxInputSize”, contendo um valor pequeno inesperado.

Figura 2. O valor pequeno inesperado é usado para alocar heap

Então, durante a análise da fonte MP4, o valor excessivo (overflow) é recuperado para alocar heap buffers para uso futuro, levando a um heap buffer overflow típico.

Usamos uma simples PoC (prova de conceito) para provar isso. Usando um arquivo MP4 especialmente elaborado (deformado com o primeiro tamanho da amostra de áudio para 0xFFFFFFFF), uma corrupção do heap é detectada e o MediaServer falha quando o arquivo é aberto.

Figura 3. Amostra POC

CVE-2015-3871

Essa vulnerabilidade também está relacionada à análise sintática do MP4. Dessa vez, uma verificação de limite está faltando na caixa ““mean/name/data” durante a extração do arquivo MP4. Como o “size” pode ser controlado pelo agressor, há a possibilidade de integer overflow quando o pointer buffer puder ser alocado com um buffer zero quando “size=SIZE_MAX”.

Figura 4. Integer overflow quando “size = SIZE_MAX”

Esse bug pode levar à corrupção de memória quando escrito no buffer pointer e possivelmente causar uma execução de código arbitrário.

CVE-2015-3872

Esse bug está no manuseio de estrutura de buffer de mídia do Real Time Streaming Protocol (RTSP ). Como o “offset” e o“payloadLength” podem ser controlados maliciosamente, um possível integer overflow pode contornar a verificação de conformidade “memcpy” e, finalmente, levar a um heap buffer overflow. Uma execução de código arbitrário também pode explorar essa vulnerabilidade.

Figura 5. Um integer overflow pode contornar a verificação de conformidade antes de “memcpy”

Protegendo seus dispositivos Android

Aconselhamos os usuários a instalarem as atualizações imediatamente em seus dispositivos Android assim que estiverem disponíveis. Instalar os patches de segurança mais recentes diminui a possibilidade de seus dispositivos ficarem vulneráveis a diferentes ataques.

Note que a disponibilização das atualizações para dispositivos que não sejam da linha Nexus depende das operadoras e fabricantes. Instalar soluções de segurança como o Trend Micro Mobile Security (TMMS), que pode detectar ameaças tentando usar essa vulnerabilidade e executar um dos cenários apresentados, pode aumentar bastante a segurança dos dispositivos.

Também recomendamos que os fabricantes do dispositivo corrijam seus dispositivos regularmente para impedir que seus usuários sofram ataques que usam essas vulnerabilidades.

Cronograma de divulgação

CVE-2015-3823

• 29 de maio, 2015: A vulnerabilidade foi enviada ao Google.

• 05 de outubro, 2015: O Google publicou a vulnerabilidade.

CVE-2015-6600

• 31 de julho, 2015: A vulnerabilidade foi enviada ao Google.

• 12 de agosto, 2015: O Google confirmou e aceitou a divulgação.

• 05 de outubro, 2015: O Google publicou a vulnerabilidade.

CVE-2015-3871

• 6 de agosto, 2015: A vulnerabilidade foi enviada ao Google.

• 05 de outubro, 2015: O Google publicou a vulnerabilidade.

CVE-2015-3872

• 19 de agosto, 2015: A vulnerabilidade foi enviada ao Google.

• 05 de outubro, 2015: O Google publicou a vulnerabilidade.