Vulnerabilidade explorável remotamente na pilha TCP do núcleo Linux

A empresa Anthropic revelou uma vulnerabilidade crítica (CVE-2026-98432) no stack TCP do núcleo Linux, que permite a execução remota de código através do envio de pacotes especialmente formatados. Um exploit funcional foi declarado, permitindo a execução de código no nível do núcleo e a obtenção remota de privilégios root no sistema. O exploit preparado é adequado para atacar sistemas com processos de servidor que aceitam conexões através de sockets de rede que suportam o uso do protocolo MPTCP (Multipath TCP). O suporte ao MPTCP pode ser ativado na vinculação a sockets de rede específicos, o que é feito por padrão na biblioteca padrão da linguagem Go, a partir da versão Go 1.24 (fevereiro de 2025).

O exploit preparado pode ser aplicado ao uso de qualquer aplicativo de servidor na linguagem Go, incluindo o servidor HTTP Caddy, desde que haja a possibilidade de enviar pacotes de rede para o socket de escuta criado por eles. Como a vulnerabilidade está presente no stack IPv4 e não é específica para o MPTCP, não se exclui a possibilidade de criar exploits que funcionem sem depender do MPTCP, mas tais exploits ainda não foram demonstrados. Por exemplo, é possível explorar a vulnerabilidade ao processar solicitações de migração de sockets, disponível em configurações com o parâmetro net.ipv4.tcp_migrate_req=1 ou ao usar programas eBPF com a opção BPF_SK_REUSEPORT_SELECT_OR_MIGRATE.

A vulnerabilidade é causada por uma condição de corrida que ocorre durante o processamento simultâneo de solicitações SYN retransmitidas ao estabelecer uma conexão TCP. Como a função tcp_v4_syn_recv_sock() passa parâmetros do socket filho a partir da estrutura ireq->ireq_opt por referência, e não por cópia, em determinadas circunstâncias, pode ocorrer uma situação em que a memória reservada para as estruturas inet_opt e ireq_opt com os parâmetros do socket já foi liberada, mas as opções associadas a ela continuam a ser utilizadas (uso após liberação).

A exploração remota é realizada através do envio de uma série de solicitações de rede sincronizadas no tempo. O exploit criado é aplicável também a núcleos que utilizam aleatorização de endereços (KASLR), mas atingir a janela de condição de corrida leva um tempo considerável e requer um grande número de tentativas. A exploração é facilitada pelo fato de que não atingir a janela de condição de corrida resulta apenas na redefinição da sessão de estabelecimento da conexão (handshake), e não na falha do núcleo, permitindo tentativas infinitas. No protótipo do exploit criado, o ataque levou cerca de uma hora — 48 minutos para determinar a disposição da memória e mais 5 minutos para organizar a execução do código.

Até o momento, não foram apresentadas soluções que bloqueiem a vulnerabilidade de forma garantida — a única opção confiável é instalar uma atualização do núcleo. O problema se manifesta a partir do núcleo Linux 4.4 e foi corrigido nas versões 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 e 7.3. O status da correção de vulnerabilidades nas distribuições pode ser verificado nas seguintes páginas: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora.

Das recomendações para combater métodos específicos de exploração, que não bloqueiam a vulnerabilidade de forma geral, destaco a desativação do suporte a MPTCP e a configuração do parâmetro sysctl do núcleo net.ipv4.tcp_migrate_req para o valor 0:

sysctl -w net.mptcp.enabled=0
sysctl -w net.ipv4.tcp_migrate_req=0

Para determinar a existência de processos no sistema que utilizam sockets com
MPTCP, pode-se usar os comandos:

ip mptcp endpoint show
ip mptcp limits show

Para desativar o suporte a MPTCP em programas escritos em Go, deve-se usar a flag "multipathtcp=0", que pode ser configurada pela variável de ambiente "GODEBUG=multipathtcp=0". Para desativar o suporte a MPTCP no estágio de construção, pode-se adicionar "godebug multipathtcp=0" ao arquivo com o módulo go.mod. No código do aplicativo, o uso de MPTCP pode ser desativado através das funções net.Dialer.SetMultipathTCP e net.ListenConfig.SetMultipathTCP.

Além do problema discutido, a empresa Anthropic anunciou uma série de vulnerabilidades localmente exploráveis no núcleo do Linux, OpenBSD e FreeBSD, permitindo a obtenção de privilégios de root no sistema e a saída de containers isolados; vulnerabilidades no Chrome e Safari que levam à execução de código no sistema ao abrir páginas web especialmente formatadas; uma vulnerabilidade no núcleo do Windows que resulta em encerramento abrupto; e uma vulnerabilidade na plataforma Android que permite contornar a bloqueio de tela e acessar informações pessoais e fotos sem desbloquear o dispositivo (o ataque foi demonstrado no smartphone Google Pixel 9).

Adicional:

  • No nginx, a capacidade de ativar a opção IPPROTO_MPTCP para um socket de rede ouvindo está disponível a partir da versão 1.29.7, mas não é aplicada por padrão.
  • No Lighttpd, a opção para habilitar o MPTCP está disponível a partir do lançamento 1.4.76.
  • No Apache httpd, patches para suporte ao MPTCP foram adicionados ao ramo Apache httpd 2.5-HEAD em 2024.
  • No systemd, o suporte para ativar o MPTCP por socket foi adicionado na versão 257.
  • No Apache Traffic Server, a opção de habilitar o MPTCP é suportada a partir da versão 9.2.4.
  • No HAProxy, a partir da versão 3.1.0, a opção "mptcp{,4,6}@
    " está disponível.
  • No Traefik, a definição da flag IPPROTO_MPTCP está habilitada por padrão a partir dos lançamentos 2.11.26, 3.4.2 e v3.5.0-rc1.
  • No SGBD Valkey, a partir da versão 9.0.0, a opção "—mptcp" e as configurações "mptcp yes" e "repl-mptcp yes" estão disponíveis.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster