Vulnerabilidade na pilha IPv6 do kernel Linux que permite execução remota de código

Foram divulgadas informações sobre a vulnerabilidade CVE-2023-6200) na pilha de rede do kernel Linux, que, sob certas circunstâncias, permite que um invasor de uma rede local consiga a execução de seu código enviando um pacote ICMPv6 especialmente projetado com uma mensagem RA (Router Advertisement) destinada a anunciar informações sobre o roteador.

A vulnerabilidade só pode ser explorada a partir da rede local e aparece em sistemas com suporte IPv6 habilitado e o parâmetro sysctl “net.ipv6.conf.<network_interface_name>.accept_ra” ativo (pode ser verificado com o comando “sysctl net.ipv6.conf | grep accept_ra”) , que está desabilitado por padrão no RHEL e Ubuntu para interfaces de rede externas, mas habilitado para a interface de loopback, que permite um ataque do mesmo sistema.

A vulnerabilidade é causada por uma condição de corrida quando o coletor de lixo processa registros fib6_info obsoletos, o que pode levar ao acesso a uma área de memória já liberada (use-after-free). Ao receber um pacote ICMPv6 com uma mensagem de anúncio de roteador (RA, Router Advertisement), a pilha de rede chama a função ndisc_router_discovery(), que, se a mensagem RA contiver informações sobre o tempo de vida da rota, chama a função fib6_set_expires() e preenche o gc_link estrutura. Para limpar entradas obsoletas, use a função fib6_clean_expires(), que desanexa a entrada em gc_link e limpa a memória usada pela estrutura fib6_info. Nesse caso, chega um determinado momento em que a memória da estrutura fib6_info já foi liberada, mas o link para ela continua na estrutura gc_link.

A vulnerabilidade apareceu a partir do branch 6.6 e foi corrigida nas versões 6.6.9 e 6.7. O status de correção da vulnerabilidade nas distribuições pode ser avaliado nestas páginas: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. Entre as distribuições que enviam pacotes com o kernel 6.6, podemos notar Arch Linux, Gentoo, Fedora, Slackware, OpenMandriva e Manjaro; em outras distribuições, é possível que a mudança com erro seja portada para pacotes com ramificações de kernel mais antigas (por por exemplo, no Debian é mencionado que o pacote com kernel 6.5.13 é vulnerável, enquanto a mudança problemática apareceu no branch 6.6). Como solução alternativa de segurança, você pode desativar o IPv6 ou definir os parâmetros “net.ipv0.conf.*.accept_ra” como 6.

Fonte: opennet.ru

Adicionar um comentário