No subsistema eBPF, que permite executar manipuladores para rastreamento, análise de desempenho de subsistemas e controle de tráfego, operando dentro do núcleo do Linux em uma máquina virtual especial com JIT, foi detectada uma vulnerabilidade (CVE-2021-29154) que permite a um usuário local executar seu código em nível de kernel. O problema se manifesta até a versão 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 um patch.
Segundo os pesquisadores que descobriram a vulnerabilidade, eles conseguiram desenvolver um protótipo funcional de exploit para sistemas x86 de 32 e 64 bits, que pode ser usado por usuários não privilegiados. A empresa Red Hat observa que o perigo do problema depende da disponibilidade do sistema de chamada eBPF para o usuário. Por exemplo, no RHEL e na maioria das outras distribuições Linux na configuração padrão, a vulnerabilidade pode ser explorada quando o BPF JIT está habilitado e o usuário possui direitos CAP_SYS_ADMIN. Como medida de contorno, recomenda-se desativar 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 para comandos de ramificação durante a geração de código de máquina pelo compilador JIT. Em particular, durante a geração de instruções de ramificação, não se leva em conta que o deslocamento pode mudar após o estágio de otimização. Essa falha pode ser utilizada para formar um código de máquina anômalo e executá-lo em nível de kernel.
Notavelmente, esta não é a única vulnerabilidade no subsistema eBPF recentemente. No final de março, duas outras vulnerabilidades (CVE-2020-27170, CVE-2020-27171) foram descobertas no núcleo, permitindo o uso de eBPF para contornar as proteções contra vulnerabilidades da classe Spectre, permitindo a determinação do conteúdo da memória do kernel devido à criação de condições para a execução especulativa de determinadas operações. Um ataque Spectre requer a presença em código privilegiado de uma determinada sequência de comandos que leva à execução especulativa de instruções. No eBPF, foram encontrados vários meios de gerar tais instruções por meio de manipulações com os programas BPF executáveis.
A vulnerabilidade CVE-2020-27170 é causada pela presença de manipulações de ponteiros no verificador BPF, que levam a operações especulativas que acessam regiões fora dos limites do buffer. A vulnerabilidade CVE-2020-27171 está relacionada a um erro de aritmética inteira (underflow) ao trabalhar com ponteiros, o que resulta em acesso especulativo a dados fora do buffer. Os problemas mencionados já foram corrigidos nas versões do núcleo 5.11.8, 5.10.25, 5.4.107, 4.19.182 e 4.14.227, e também foram incluídos nas atualizações do núcleo da maioria das distribuições Linux. Pesquisadores prepararam um protótipo de exploit que permite que um usuário não privilegiado extraia dados da memória do núcleo.
Fonte: opennet.ru
