Na subsistema eBPF, que permite executar manipuladores dentro do núcleo Linux em uma máquina virtual especial com JIT, foi encontrada uma vulnerabilidade (CVE-2021-4204), que permite que um usuário local não privilegiado obtenha elevação de privilégios e execute seu código no nível do núcleo Linux. O problema se manifesta a partir do núcleo Linux 5.8 e ainda não foi corrigido (inclui a versão 5.16). O estado da formação de atualizações para resolver o problema nos distribuições pode ser acompanhado nas seguintes páginas: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Foi anunciado que um exploit funcional será publicado em 18 de janeiro (os usuários e desenvolvedores têm uma semana para corrigir a vulnerabilidade).
A vulnerabilidade é causada por uma verificação inadequada dos eBPF programas transmitidos para execução. O subsistema eBPF fornece funções auxiliares, cuja correção do uso é verificada por um verificador especial. Algumas funções exigem a transmissão do valor PTR_TO_MEM como argumento e, para evitar possíveis estouros de buffer, o verificador deve conhecer o tamanho da memória associada ao argumento. Para as funções bpf_ringbuf_submit e bpf_ringbuf_discard, as informações sobre o tamanho da memória transmitida não foram reportadas ao verificador, o que poderia ser explorado para sobrescrever áreas de memória fora do buffer ao executar código eBPF especialmente formatado.
Para realizar um ataque, o usuário deve ser capaz de carregar seu programa BPF, e muitas das novas distribuições Linux bloqueiam essa possibilidade por padrão (também o acesso não privilegiado ao eBPF agora é proibido por padrão no próprio núcleo, a partir da versão 5.16). Por exemplo, a vulnerabilidade pode ser explorada na configuração padrão no Ubuntu 20.04 LTS, mas em ambientes Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 e Fedora 33, isso ocorre apenas se o administrador definiu o parâmetro kernel.unprivileged_bpf_disabled como 0. Como uma solução alternativa para bloquear a vulnerabilidade, pode-se proibir a execução de programas BPF por usuários não privilegiados com o comando 'sysctl -w kernel.unprivileged_bpf_disabled=1'.
Fonte: opennet.ru
