← volver
CVE-2024-1086highbajo ataqueransomwareCWE-416

Use-after-free in Linux kernel's netfilter: nf_tables component

84Vexday Risk Score

Prioriza la corrección. Ella está bajo explotación confirmada por CISA y tiene prueba de concepto pública.

ssvc Actcvss 7.8epss 28%
de la publicación al arma49 días
Publicada en NVD31 ene
1ª PoC+49d
CISA KEV+120d
probabilidad de explotación
28%top 2% de las CVE
explotación observada
CISA + VulnCheck
21 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2024-06-20

Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.

Resumen

Use-after-free (double-free) no subsistema netfilter/nf_tables do kernel Linux, explorável por usuário local sem privilégios para escalar a root. A falha existe desde 2014 mas só ganhou atenção em 2024, quando um PoC público e confiável (>99% de sucesso em imagens KernelCTF) foi divulgado, forçando entrada no catálogo KEV da CISA. O impacto é alto onde existem usuários locais não confiáveis (multi-tenant, containers, shells compartilhados) e onde user namespaces sem privilégio estão habilitados — que é a configuração padrão em Debian e Ubuntu.

Detalle técnico

A função nft_verdict_init(), que interpreta o veredito retornado por uma regra nf_tables, aceita valores positivos como 'drop error' dentro do veredito NF_DROP. O problema é que esses valores positivos coincidem com o espaço de valores usado por NF_ACCEPT em nf_hook_slow(). Quando um veredito NF_DROP chega com um drop error que se parece com NF_ACCEPT, nf_hook_slow() interpreta o pacote como aceito ao invés de descartado, liberando (kfree) uma estrutura relacionada ao pacote que já havia sido — ou vai ser — liberada em outro caminho. O resultado é um double-free / use-after-free (CWE-416) em memória do kernel.

Cómo se explota

O double-free por si só permite corromper heap do kernel. O exploit público (Notselwyn, 'Flipping Pages') transforma essa corrupção em escalonamento de privilégio usando técnicas de heap grooming e uma técnica batizada 'Dirty Pagedirectory', substituindo o objeto liberado por estruturas controladas pelo atacante até obter escrita arbitrária em memória do kernel e, a partir daí, um shell root.

Pré-requisitos reais: o atacante precisa de acesso local (shell) na máquina, capacidade de criar um user namespace sem privilégio (CONFIG_USER_NS=y e kernel.unprivileged_userns_clone=1 ou equivalente) e nf_tables habilitado no kernel (CONFIG_NF_TABLES=y). Como o veredito é avaliado dentro do hook de rede, o atacante também precisa de CAP_NET_ADMIN dentro de um namespace — daí a dependência combinada de user namespace e network namespace, não apenas do módulo nf_tables. Em Debian, Ubuntu e imagens KernelCTF essas condições vêm ativadas por padrão; em kernels ≥6.4 com CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y (caso de Ubuntu 6.5) o exploit publicado deixa de funcionar sem adaptação. O código público só foi testado em x86_64.

A CISA confirma exploração ativa e o exploit deliberadamente causa kernel panic ao final da execução — efeito colateral que o autor manteve de propósito para tornar tentativas de uso mais visíveis/impraticáveis fora de laboratório, mas que não elimina o risco em ambientes onde reinicializações não são monitoradas.

Versiones

Afectadas
Falha subjacente presente desde a introdução em fevereiro de 2014 (commit e0abdadcc6e1) até v6.8-rc1, afetando praticamente todo o histórico do kernel Linux nesse intervalo, exceto os ramos estáveis já corrigidos. O exploit público testado funciona em kernels de v5.14 a v6.6 (Debian, Ubuntu, KernelCTF), com falha conhecida em kernels ≥6.4 com CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y.
Corregidas en
Corrigido pelo commit f342de4e2f33e0e39165d8639387aa6c19dff660 (janeiro de 2024), retroportado para v5.15.149, v6.1.76 e v6.6.15 (fevereiro de 2024). Distribuições aplicaram o backport em seus próprios kernels — verificar advisory específico de cada uma (Debian LTS, Fedora, e outras); RHEL 9.3 permanecia sem correção pelo menos até abril de 2024 segundo relato público.

Cómo protegerse

A correção definitiva é atualizar o kernel para uma versão que inclua o commit f342de4e2f33e0e39165d8639387aa6c19dff660, retroportado para os ramos estáveis v5.15.149, v6.1.76 e v6.6.15 (fevereiro de 2024). Distribuições com seus próprios ramos de kernel (RHEL/derivados, Debian, Ubuntu, Fedora) publicaram pacotes próprios com o backport — confira o advisory de cada distribuição, pois versões numeradas variam por distro. Em abril de 2024, RHEL 9.3 (e a maioria dos rebuilds) ainda não tinha o patch, segundo relato em oss-security.

Se atualizar o kernel não for viável imediatamente: (1) bloquear o carregamento do módulo nf_tables se ele não for usado (blacklist); (2) desabilitar user namespaces sem privilégio — em Debian/Ubuntu via sysctl kernel.unprivileged_userns_clone=0, em outras distros via user.max_user_namespaces=0, sabendo que isso impede containers mesmo para root; (3) mitigação mais seletiva discutida em oss-security: desabilitar apenas network namespaces via sysctl user.max_net_namespaces=0, já que o exploit depende de CAP_NET_ADMIN dentro de um namespace de rede — isso preserva user namespaces (containers continuam funcionando) mas quebra recursos que dependem de namespace de rede próprio (parte do Apptainer, opções --net de runtimes, systemd PrivateNetwork); (4) carregar um kpatch de terceiros específico para AlmaLinux/RHEL (não oficial do fornecedor) ou usar LKRG, que não impede a exploração mas interrompe o exploit publicado no estágio final, deixando o sistema instável em vez de comprometido. Nenhuma dessas medidas substitui o patch do kernel; são paliativos com custo funcional real (perda de containers, de isolamento de rede, ou de estabilidade).

Cómo detectar

Não há assinatura de rede ou log de aplicação confiável, pois a exploração é inteiramente local e ocorre dentro do kernel via chamadas de sistema para criação de user namespace e manipulação de regras nf_tables. O sinal mais prático é indireto: o exploit público causa kernel panic (crash) como efeito colateral deliberado ao final da execução — quedas inesperadas do sistema após atividade de um usuário local não privilegiado, especialmente correlacionadas com criação de namespaces ou carregamento de regras nf_tables, merecem investigação. Ferramentas de auditoria que monitoram unshare()/clone() com CLONE_NEWUSER e CLONE_NEWNET, ou uso anômalo de nftables por processos sem necessidade administrativa, podem ajudar, mas não existe IOC estático publicado para essa CVE.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
A use-after-free vulnerability in the Linux kernel's netfilter: nf_tables component can be exploited to achieve local privilege escalation. The nft_verdict_init() function allows positive values as drop error within the hook verdict, and hence the nf_hook_slow() function can cause a double free vulnerability when NF_DROP is issued with a drop error which resembles NF_ACCEPT. We recommend upgrading past commit f342de4e2f33e0e39165d8639387aa6c19dff660.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Productos afectados
Linux · Kernel
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.