Vulnerabilidades no subsistema eBPF do kernel Linux

Foi identificada uma vulnerabilidade (CVE-2021-29154) no subsistema eBPF, que permite executar manipuladores para rastreamento, análise do funcionamento dos subsistemas e gerenciamento de tráfego, executados dentro do kernel Linux em uma máquina virtual especial com JIT, que permite um usuário local para executar seu código no nível do kernel. O problema aparece até o lançamento 5.11.12 (inclusive) e ainda não foi corrigido nas distribuições (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). A correção está disponível como patch.

Segundo os pesquisadores que identificaram a vulnerabilidade, eles conseguiram desenvolver um protótipo funcional do exploit para sistemas x32 de 64 e 86 bits, que pode ser usado por um usuário sem privilégios. No entanto, a Red Hat observa que a gravidade do problema depende se a chamada do sistema eBPF está acessível ao usuário. Por exemplo, no RHEL e na maioria das outras distribuições Linux na configuração padrão, a vulnerabilidade pode ser explorada se o BPF JIT estiver habilitado e o usuário tiver direitos CAP_SYS_ADMIN. Como solução alternativa, é recomendado desabilitar o BPF JIT usando o comando: echo 0 > /proc/sys/net/core/bpf_jit_enable

O problema é causado por um erro no cálculo do deslocamento das instruções de desvio durante o processo de geração do código de máquina do compilador JIT. Em particular, ao gerar instruções de desvio, não leva em consideração que o deslocamento pode mudar após passar pelo estágio de otimização. Essa falha pode ser usada para gerar código de máquina anômalo e executá-lo no nível do kernel.

Vale ressaltar que esta não é a única vulnerabilidade no subsistema eBPF recentemente. No final de março, foram identificadas mais duas vulnerabilidades no kernel (CVE-2020-27170, CVE-2020-27171), possibilitando o uso do eBPF para contornar a proteção contra vulnerabilidades da classe Spectre, que permitem determinar o conteúdo da memória do kernel como resultado da criação de condições para a execução especulativa de determinadas operações. O ataque Spectre requer a presença de uma determinada sequência de comandos em código privilegiado que leva à execução especulativa de instruções. No eBPF foram encontradas diversas formas de gerar tais instruções através de manipulações com programas BPF transmitidos para execução.

A vulnerabilidade CVE-2020-27170 é causada pela manipulação do ponteiro no verificador BPF que faz com que operações especulativas acessem uma área fora dos limites do buffer. A vulnerabilidade CVE-2020-27171 se deve a um erro de underflow de número inteiro ao trabalhar com ponteiros, levando ao acesso especulativo a dados fora do buffer. Esses problemas já foram corrigidos nas versões 5.11.8, 5.10.25, 5.4.107, 4.19.182 e 4.14.227 do kernel, e também foram incluídos nas atualizações do kernel para a maioria das distribuições Linux. Os pesquisadores prepararam um protótipo de exploração que permite a um usuário sem privilégios extrair dados da memória do kernel.

Fonte: opennet.ru

Adicionar um comentário