
Problema de segurança no firmware do hipervisor de alguns chipsets Qualcomm mais antigos
CVE-2022-22063 é um problema de segurança no firmware do hipervisor de alguns chipsets mais antigos da Qualcomm. Um componente de hardware desprotegido (o "boot remapper") pode ser abusado para obter acesso total de leitura/escrita ao hipervisor a partir de um sistema operacional modificado (escalonamento de privilégios). Explorar o problema é trivial nas plataformas afetadas, já que não é necessário conhecimento sobre a versão específica do firmware (por exemplo, endereços ou variáveis).
Nota: Embora a Qualcomm tenha fornecido correções aos clientes (com tempo de sobra para lançar atualizações), muitos dispositivos afetados já são bastante antigos e podem não receber a correção do fornecedor. O problema só pode ser explorado a partir de um sistema operacional modificado ou comprometido (usando outro problema de segurança). Manter o sistema operacional atualizado e seguro pode ser suficiente mesmo que o firmware seja vulnerável.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HO problema também foi divulgado no [Boletim de Segurança de Dezembro de 2022 da Qualcomm].
O problema depende de uma combinação de hardware e software em execução no alvo afetado:
hyp no armazenamento interno).APCS_BOOT_START_ADDR_NSEC), que não é protegida pelo hipervisor e, portanto, é acessível pelo kernel do sistema operacional com menos privilégios (por exemplo, Linux).Existem vários outros chipsets que provavelmente possuem o hardware afetado (por exemplo, MSM8909 e MSM8953), mas eles não possuem um firmware de hipervisor separado que possa ser comprometido.
Escalonamento de Privilégios: Dado um kernel de sistema operacional já comprometido (por exemplo, Linux), o problema permite elevar trivialmente os privilégios ao nível do hipervisor (EL1 -> EL2 no ARM). Toda a memória gerenciada pelo hipervisor pode ser lida ou gravada. Isso quebra o isolamento de diferentes domínios de segurança ou máquinas virtuais gerenciadas pelo hipervisor (se houver, dependendo da configuração).
(Consulte também: [Uma introdução ao controle de acesso em plataformas Qualcomm Snapdragon])
Inicialização Segura (Secure Boot): A maioria dos dispositivos Qualcomm disponíveis na produção usa inicialização segura para impedir a modificação não autorizada do firmware. O firmware é assinado criptograficamente e verificado pela cadeia de inicialização. O problema permite modificar ou até mesmo substituir completamente o firmware do hipervisor carregado em tempo de execução a partir de um sistema operacional modificado (seja por meio do "desbloqueio do bootloader" oficialmente suportado ou outra exploração).
(Consulte também: [Visão Geral Técnica da Qualcomm sobre Inicialização Segura e Autenticação de Imagem (v1.0)] e (v2.0))
Nota: O problema foi originalmente encontrado na plataforma Qualcomm Snapdragon 410 (MSM8916). Algumas das explicações a seguir podem ser específicas do MSM8916, por exemplo:
No entanto, o conceito geral se aplica de forma semelhante a todas as plataformas afetadas.
A arquitetura ARMv8-A de 64 bits define 4 níveis de privilégio ("níveis de exceção", EL). Existem níveis separados que são normalmente usados para aplicações, kernels de sistemas operacionais e um hipervisor:
A CPU alterna entre os níveis durante exceções, por exemplo, devido a uma interrupção recebida. Também é possível alternar entre alguns dos níveis usando instruções especiais, como a Chamada de Hipervisor (hvc).
(Consulte também: [Modelo de Exceção AArch64])
O hipervisor pode hospedar uma ou várias máquinas virtuais com kernels de sistemas operacionais separados. Cada máquina virtual pode receber sua própria visão da memória usando tradução de segundo estágio. Todos os acessos à memória de uma máquina virtual passam por dois estágios de tradução: o primeiro é gerenciado pelo sistema operacional (virtual), enquanto o segundo estágio é gerenciado pelo hipervisor. A memória usada pelo hipervisor ou por outras máquinas virtuais pode ser ocultada omitindo-a das tabelas de tradução.
(Consulte também: [Virtualização AArch64], [Gerenciamento de memória AArch64])
O firmware do hipervisor da Qualcomm executa em EL2 e usa tradução de segundo estágio para impedir o acesso à memória do hipervisor a partir do kernel do sistema operacional principal executando em EL1 (geralmente Linux). Observe que nessa configuração a tradução de segundo estágio é usada principalmente para proteção de memória, sem tradução de endereços. O sistema operacional principal obtém acesso direto à maioria dos componentes de hardware no espaço de entrada/saída mapeada em memória (MMIO), por exemplo, o controlador SD ou o subsistema de câmera. O acesso à memória que pertence ao hipervisor/EL2 (hyp) e ao monitor seguro/EL3 (parte de tz) é restrito:
O boot remapper não está relacionado à virtualização: ele é necessário durante a fase inicial da inicialização de um núcleo da CPU. Nesta plataforma de hardware, os núcleos da CPU sempre iniciam a execução no endereço 0x0. O boot remapper é um componente de hardware extra construído ao redor da CPU que remapeia os primeiros 64 ou 128 KiB (0x00000 - 0x20000) para uma região de memória configurável.
Por padrão, o boot remapper aponta para a ROM de inicialização (o primeiro código que executa quando o dispositivo é iniciado). Posteriormente, o mapeamento é alterado para que os outros núcleos da CPU iniciem imediatamente a execução no firmware EL3 (parte de tz) que foi carregado na RAM:
Observe como o endereço acessado pela CPU (dentro de tz) é acessível usando dois endereços físicos diferentes: o endereço real na RAM (0x8650xxxx) e o endereço remapeado usando o boot remapper (0x0000xxxx).
Na verdade, existem duas instâncias separadas do boot remapper: