Netfilter é mais uma vez vítima de outra vulnerabilidade

vulnerabilidade

Se exploradas, essas falhas podem permitir que invasores obtenham acesso não autorizado a informações confidenciais ou geralmente causem problemas

Mais uma vez, o subsistema Linux Kernel responsável por filtrar e modificar pacotes de rede esteve envolvido na detecção de vulnerabilidade. E o Netfilter virou sinal vermelho, já que notícias de problemas com esse componente do Linux são constantemente divulgadas.

Na ocasião, uma vulnerabilidade foi divulgada (já listado em CVE-2024-1086) no Netfilter, a qual permite que um usuário local execute código no nível do kernel e aumente privilégios no sistema. O problema está na dupla liberação de memória do módulo nf_tables, responsável por filtrar pacotes através de nftables.

Sobre vulnerabilidade é mencionado que:

O problema está em um bug na função nft_verdict_init(), que permite que valores positivos sejam usados ​​como códigos de erro DROP em ganchos, o que por sua vez pode fazer com que a função nf_hook_slow() seja chamada para liberar memória para um buffer que tem já foi liberado anteriormente usando a função free().

Este acontece quando uma operação NF_DROP falha e o kernel inicialmente interpreta NF_DROP, mas então libera o buffer e retorna o status NF_ACCEPT. Com isso, apesar de liberar o buffer associado ao pacote, seu processamento continua e é transferido para outro manipulador, que chama novamente a função de liberação de memória.

Para provar que a vulnerabilidade pode ser explorada, o pesquisador de segurança que descobriu esta vulnerabilidade e desenvolveu um protótipo funcional da exploração, que foi demonstrado nas versões atuais do Debian e Ubuntu com kernels Linux 5.14 a 6.6.

A exploração também foi testada em um ambiente com o kernel KernelCTF (Capture the Flag), que inclui patches adicionais para bloquear métodos típicos de exploração e é usado pelo Google em seu programa de recompensas para encontrar vulnerabilidades. A taxa de sucesso da exploração é estimada em 99,4%. O artigo que acompanha fornece uma descrição detalhada do processo de criação de uma exploração complexa de vários níveis e como contornar os mecanismos de proteção e contramedidas presentes no kernel para lidar com explorações.

Cabe mencionar que de acordo com as observações do pesquisador, é provável que todas as versões, desde pelo menos a versão do Linux 5.14.21 até a versão 6.6.14, são vulneráveis ​​à exploração, dependendo dos valores de configuração (kconfig). As ramificações estáveis ​​linux-5.15.y, linux-6.1.y e linux-6.6.y, e possivelmente linux-6.7.1, são afetadas por esta exploração, conforme observado no momento desta redação. No entanto, uma correção de bug foi lançada em fevereiro de 2024 para resolver esta vulnerabilidade em filiais estáveis.

É importante notar que o mesmo arquivo de configuração base foi usado para a maioria dos kernels base, e todas as versões mencionadas são suscetíveis ao bug PoC. A configuração base foi gerada com o kernel-hardening-checker.

Além disso, nota-se que, para kernels vanilla, alterações de configuração foram aplicadas CONFIG_INIT_ON_FREE_DEFAULT_ON  desde que foi desabilitado, o que ajuda a mitigar parte da exploração ao definir uma página para bytes nulos após ser liberada. Porém, CONFIG_INIT_ON_ALLOC_DEFAULT_ON permanece ativo nas principais distribuições como KernelCTF, Ubuntu e Debian, o que pode causar efeitos colaterais como detecção de bad_page() em versões começando com v6.4.0.

A taxa de sucesso da exploração é de 99,4%, com quedas ocasionais para 93,0% em determinados cenários. Esse sucesso pode variar um pouco dependendo da carga de trabalho do dispositivo. Considera-se que a exploração funciona para uma configuração específica se for bem-sucedida em todas as tentativas de teste e todas as falhas relacionadas tiverem sido investigadas e documentadas. Isso reduz a probabilidade de falsos positivos ao verificar a eficácia da exploração.

Finalmente, deve ser mencionado que a maioria das distribuições já possui o patch de correção e se você estiver interessado em saber mais sobre isso, você pode consultar os detalhes no link a seguir ou nas páginas específicas de cada distribuição, como DebianUbuntuGentooRHELSUSE y Fedora.