Se exploradas, essas falhas podem permitir que invasores obtenham acesso não autorizado a informações confidenciais ou geralmente causem problemas
Alguns dias atrás um grupo de pesquisadores revelou por meio de uma postagem no blog, informações sobre uma vulnerabilidade que eles detectaram (já catalogado como CVE-2023-20569) e que afeta os processadores AMD baseados nas microarquiteturas EPYC e Ryzen.
Menciona-se que a vulnerabilidade, com a palavra-chave "Inception", permite que um usuário local sem privilégios determine o conteúdo da memória dos processos de outros usuários ao utilizar sistemas de virtualização, o que basicamente permite extrair informações de outros sistemas convidados.
O que é Inception e como é explorado?
em Inception, é mencionado que esta vulnerabilidade é uma combinação de:
- Especulação fantasma: podemos acionar uma previsão incorreta sem nenhuma ramificação na origem da previsão incorreta.
- Treinamento em Execução Transitória: Podemos manipular previsões erradas futuras por meio de uma previsão errada anterior que acionamos.
Já que com ele é possível gerar o stack overflow de endereços de retorno (RAS) em uma estrutura que é atualizada em modo especulativo em um estágio em que o processador apenas prevê uma possível chamada à instrução CALL.
A pilha RAS tem tamanho fixo e é circular, ou seja, faz um loop e após o último elemento muda para o início. Um invasor pode criar condições nas quais o preditor de ramificação executa especulativamente um grande número de CALLs previstas incorretamente, o suficiente para estourar a pilha RAS e sobrescrever os pontos de retorno previstos corretamente colocados no topo da pilha.
Como resultado disso, os itens da pilha inicial podem ser substituídos pelos valores escolhidos pelo invasor, o que levará ao uso desses valores substituídos durante a execução especulativa da instrução RET no contexto de outro processo.
É mencionado que, depois disso, o processador determinará que a previsão do desvio não foi garantida e reverterá a operação ao seu estado original, mas os dados processados durante a execução especulativa ficarão no cache e nos buffers da microarquitetura. Se um bloco executado por engano realizar um acesso à memória, sua execução especulativa levará à instalação no cache geral e à leitura dos dados da memória.
A vulnerabilidade Phantom é usada para “envenenar” a previsão de ramificação (CVE-2022-23825) identificado pelos mesmos pesquisadores, que permite criar condições para prever um desvio fictício sem instruções de desvio e influenciar o buffer de previsão de desvio sem a instrução "ret".
Para iniciar uma predição errada e estouro da pilha RAS, é usada a instrução XOR usual, cujo efeito no buffer de predição de ramificação durante um ataque fantasma é semelhante a uma chamada recursiva à instrução CALL. Para a substituição controlada do valor requerido no início da pilha RAS, é proposto o método TTE (Training in Transient Execution), que permite influenciar a previsão futura de transições a partir de previsões errôneas anteriores.
Cabe mencionar que para a demonstração, os pesquisadores prepararam um exploit que pode ser usado por um usuário local sem privilégios para fazer o hash da senha do usuário root, armazenado no arquivo /etc/shadow e carregado na memória ao autenticar no sistema.
Ataque foi demonstrado em um sistema Ubuntu 22.04 totalmente atualizado com um kernel 5.19 em um computador com um processador da família AMD Zen 4. O desempenho do vazamento de dados da exploração é de 39 bytes por segundo. O conteúdo de /etc/shadow foi determinado com sucesso em 6 de 10 tentativas de explorar a vulnerabilidade. Cada tentativa durou cerca de 40 minutos.
Como já mencionado no início, Inception afeta processadores baseados nas microarquiteturas EPYC e Ryzen, das quais as microarquiteturas Zen1 e Zen2, proteção baseada em instrução IBPB (usada para proteger contra ataques Spectre), podem ser usadas para bloquear a manifestação de uma vulnerabilidade . Enquanto para os processadores da família Zen3 e Zen4, não há correções de proteção e uma atualização de microcódigo é necessária para bloquear a vulnerabilidade neles.
Finalmente, é mencionado que Inception corrige e atualização de firmware já estão incluídos em versões recentes do kernel do Linux, embora após a distribuição das correções, também foi proposta uma versão revisada mais eficiente dos patches, que até agora não foram aceitos no kernel.
Se estiver interessado em saber mais sobre o assunto, pode consultar os detalhes no link a seguir