No Netfilter, um subsistema do núcleo Linux usado para filtrar e modificar pacotes de rede, foi descoberta uma vulnerabilidade (CVE-2024-1086) que permite a um usuário local executar código no nível do kernel e elevar suas permissões no sistema. O problema é causado por uma liberação dupla de memória (double-free) no módulo nf_tables, que permite a operação do filtro de pacotes nftables. O pesquisador de segurança que identificou a vulnerabilidade desenvolveu e publicou um protótipo funcional de exploit.
A efetividade do exploit foi demonstrada em versões recentes do Debian e Ubuntu com núcleos Linux 5.14 — 6.6, bem como em um ambiente com o núcleo KernelCTF (Capture the Flag), que inclui patches adicionais para bloquear métodos padrão de funcionamento de exploits e é utilizado pela Google em seu programa de recompensas para a descoberta de vulnerabilidades. A taxa de sucesso do exploit é avaliada em 99,4%. Em um artigo acompanhante, o processo de criação de um complexo exploit de múltiplos níveis e a violação das defesas e mecanismos de combate à ação de exploits presentes no kernel são analisados em detalhes.

O problema está relacionado a um erro na função nft_verdict_init(), que permite o uso de valores positivos como código de erro para rejeição de pacotes (DROP) em hooks, o que pode ser utilizado para chamar, na função nf_hook_slow(), uma operação de liberação de memória para um buffer que já havia recebido uma chamada para free(). O problema surge quando a operação NF_DROP é gerada incorretamente e o kernel inicialmente interpreta NF_DROP, mas depois libera o buffer e retorna o status NF_ACCEPT. Essa situação resulta em que, apesar da liberação do buffer associado ao pacote, seu processamento não é interrompido e é passado para outro manipulador que, por sua vez, chama a função de liberação de memória novamente.
A vulnerabilidade aparece a partir da versão 3.15 do núcleo Linux, mas o exploit funciona com núcleos a partir da versão 5.14. A correção da vulnerabilidade foi proposta na versão 6.8-rc1 do núcleo Linux e, no final de fevereiro, foi integrada nas branches estáveis 5.15.149, 6.1.76 e 6.6.15. Para acompanhar a correção da vulnerabilidade nos distribuições, podem ser visitadas as páginas: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.
Além disso, pode ser destacada uma série de vulnerabilidades no módulo ksmbd, que oferece uma implementação de sistema de arquivos integrada no núcleo Linux. servidor com base no protocolo SMB: A vulnerabilidade CVE-2024-26592 permite a execução remota de código com privilégios de kernel em sistemas com o módulo ksmbd ativado, sem autenticação. O problema é causado por uma condição de corrida no código de manipulação de conexões TCP, que ocorre devido à falta de bloqueios adequados ao trabalhar com o objeto.
A vulnerabilidade CVE-2023-52440 também permite a execução remota de código com privilégios de kernel, mas é causada por um overflow de buffer ao processar chaves de sessão inválidas devido à falta de verificação adequada do tamanho dos dados recebidos do usuário antes de copiá-los para um buffer de tamanho fixo.
As vulnerabilidades (1, 2, 3) CVE-2024-26594, CVE-2023-52442 e CVE-2023-52441 no ksmbd permitem, sem autenticação, a determinação do conteúdo da memória do kernel. A vulnerabilidade CVE-2024-26594 é causada pela verificação incorreta de dados ao processar tokens SMB2 Mech recebidos, resultando no retorno de dados fora da área do buffer. A vulnerabilidade CVE-2023-52442 é causada pela falta de verificação adequada dos dados de entrada ao processar solicitações encadeadas. A vulnerabilidade CVE-2023-52441 é causada pela falta de verificação necessária dos dados de entrada ao processar solicitações de negociação de conexão SMB2.
As vulnerabilidades CVE-2024-26594 e CVE-2024-26592 foram corrigidas no kernel 6.8 e em atualizações corretivas das versões estáveis anteriores 6.1.75, 6.6.14, 6.7.2. As demais vulnerabilidades foram corrigidas no kernel 6.5 e nas atualizações 5.15.145, 6.1.53, 6.4.16.
Em conclusão, vale mencionar a ativação da nova equipe de desenvolvedores do núcleo Linux, criada para analisar a presença de vulnerabilidades e avaliar a relação entre os patches no núcleo e os problemas de segurança. Em fevereiro, os desenvolvedores do núcleo estabeleceram seu próprio serviço CNA (Autoridade de Numeração CVE), que recebeu a autoridade de atribuir identificadores CVE a vulnerabilidades de forma independente. Antes disso, a atribuição de CVEs e a análise da relação entre os patches e possíveis vulnerabilidades era responsabilidade dos desenvolvedores de distribuições, e, no núcleo, as potenciais vulnerabilidades não eram destacadas e figuravam junto com correções normais. Os resultados do trabalho do novo serviço superaram todas as expectativas — diariamente, até várias dezenas de novas vulnerabilidades são marcadas no núcleo, que anteriormente não eram identificadas como problemas de segurança. Por exemplo, em 26 de março, novos identificadores CVE foram atribuídos a 14 vulnerabilidades que anteriormente não eram consideradas como problemas de segurança, e em 25 de março — 41 vulnerabilidades.
Fonte: opennet.ru
