CVE-2021-28663
Prioriza la corrección. Ella está bajo explotación confirmada por CISA y tiene prueba de concepto pública.
Apply updates per vendor instructions.
Resumen
Falha de use-after-free (CWE-416) no driver de kernel da GPU Arm Mali, presente nas famílias Bifrost, Valhall e Midgard. Permite que um processo local sem privilégios manipule operações de memória da GPU para escalar privilégios até root e/ou vazar dados de memória do kernel. Está no catálogo KEV da CISA com exploração confirmada em campo, o que a torna prioridade mesmo sem menção pública a uma campanha específica.
Detalle técnico
A vulnerabilidade é uma condição de use-after-free no gerenciamento de memória do driver de kernel do Mali GPU. O driver expõe operações via ioctl que permitem a um processo em espaço de usuário criar, mapear e liberar regiões de memória da GPU (GPU_VA) que são compartilhadas com páginas físicas. O problema surge quando o driver não trata corretamente o ciclo de vida dessas regiões: é possível criar um alias de páginas físicas sem que o mapeamento correspondente na GPU (gpu_mapping) seja atualizado, e em seguida alterar as flags da região original para torná-la elegível para descarte (evictable) — os dados são liberados enquanto ainda existe uma referência válida (o alias) apontando para o mesmo espaço físico.
O atacante controla os parâmetros das chamadas ioctl que criam e modificam regiões de memória GPU (allocation, aliasing, mudança de flags como BASE_MEM_DONT_NEED). Isso dá controle sobre o timing e o conteúdo do que fica acessível após a liberação — condição clássica para escalonar de leitura de memória liberada (information disclosure) até corrupção de memória do kernel explorável para execução de código com privilégios elevados.
O fornecedor (Arm) não publicou um write-up técnico detalhado do bug em si — o advisory é um aviso de segurança padrão referenciando as versões afetadas. A mecânica documentada publicamente vem de pesquisadores que reverso-engenheiraram o driver e de uma PoC pública, não do texto do fornecedor.
Cómo se explota
A exploração conhecida publicamente (PoC) usa a sequência: alocar uma região de memória GPU e mapeá-la (mmap) para obter um endereço virtual correspondente a páginas físicas; criar um alias dessas páginas físicas sem fazer mmap dele, de forma que o contador gpu_mapping da região original permaneça em 1; então mudar as flags da região original para BASE_MEM_DONT_NEED, fazendo o driver tratá-la como descartável e liberá-la; por fim, mapear (mmap) o alias, que ainda aponta para a memória física supostamente liberada, obtendo acesso de leitura (RDONLY) do lado da CPU a conteúdo de memória que não deveria mais estar acessível. Essa técnica demonstra vazamento de informação; escalonamento completo a root exige encadear a primitiva de UAF com corrupção controlada de estruturas do kernel, o que está fora do escopo da PoC pública disponível.
Pré-requisito real: o atacante precisa de capacidade de executar código como usuário local não privilegiado no dispositivo (um app instalado, por exemplo, em Android) com acesso ao nó de dispositivo do driver Mali (/dev/mali0 ou equivalente) para emitir as chamadas ioctl relevantes. Não é uma falha explorável remotamente sem essa execução local prévia — o vetor CVSS AV:N reflete a convenção de scoring do NVD para drivers de GPU acessíveis por apps, não significa que um atacante na rede possa disparar a falha sem interação local.
A presença no catálogo KEV da CISA confirma exploração em campo, típica de cadeias de escalonamento de privilégio usadas para comprometer dispositivos móveis Android após um vetor de entrada inicial (app malicioso, exploit de navegador, etc.) que entrega a capacidade de executar as chamadas ioctl no driver Mali.
Versiones
Cómo protegerse
A correção do fornecedor consiste em atualizar o driver de kernel do Mali GPU para a versão r29p0 para as linhas Bifrost (r0p0 até r28p0) e Valhall (r19p0 até r28p0). Para a linha Midgard (r4p0 até r30p0), o texto oficial da CVE não especifica explicitamente qual versão corrige a falha nesta entrada — confirme diretamente no Arm Security Updates a versão de destino antes de assumir que r31p0 ou qualquer outra resolve o problema.
Como o driver Mali é distribuído por fabricantes de SoC e integrado por OEMs (não é atualizável direto pelo usuário final na maioria dos dispositivos Android), a correção efetiva depende do fornecedor do chipset/dispositivo incorporar o patch do Arm e distribuí-lo via atualização de firmware/kernel do fabricante. Isso cria uma janela de exposição prolongada em dispositivos que não recebem mais atualizações.
Não há mitigação de configuração equivalente a desabilitar a GPU sem perda funcional severa em uso normal; restringir instalação de apps não confiáveis reduz a superfície de entrega mas não elimina o risco, já que qualquer processo local com acesso ao nó do driver pode tentar a exploração. WAF ou controles de rede não mitigam esta falha, por ser uma vulnerabilidade de kernel local.
Cómo detectar
Não há assinatura de rede confiável, pois a exploração ocorre localmente via chamadas ioctl ao driver de kernel do Mali GPU, sem tráfego de rede associado. Em nível de host, sinais possíveis incluem: chamadas ioctl anômalas ou sequências incomuns de alocação/aliasing/liberação de memória GPU vindas de processos sem privilégio elevado, crashes ou comportamento anômalo do driver mali (kernel oops/panic relacionados a memória da GPU), e presença de binários ou artefatos correspondentes à PoC pública (ex.: mali_poc) no dispositivo. Sem instrumentação específica do driver ou EDR com visibilidade de kernel, a detecção confiável é limitada.