
Análise técnica da CVE-2026-43284 (Dirty Frag), uma escalada de privilégios local no xfrm ESP do kernel Linux que permite escritas no page-cache em ficheiros só de leitura para comprometer o root.
Análise técnica detalhada da falha de escalonamento local de privilégios CVE-2026-43284 (Dirty Frag) no kernel do Linux.
CVE-2026-43284 (comumente referida como parte do conjunto de vulnerabilidades Dirty Frag) é uma falha crítica de escalonamento local de privilégios (LPE) no kernel do Linux. Ela decorre de uma falha lógica dentro do subsistema de entrada xfrm ESP (Encapsulating Security Payload). O bug permite que um atacante local sem privilégios contorne as proteções típicas de Copy-on-Write (CoW) e obtenha uma primitiva de escrita arbitrária no page cache em arquivos de sistema somente leitura (como /usr/bin/su), levando, em última instância, a um comprometimento total como root.
Detalhamento da Vulnerabilidade e Vetor de Ataque1.
A Restrição: Interagir com a configuração de IPsec do kernel normalmente requer a capacidade CAP_NET_ADMIN, um privilégio restrito ao usuário normal. O Bypass: Um usuário local sem privilégios pode criar um User Namespace e um Network Namespace separados e sem privilégios (usando flags como CLONE_NEWUSER | CLONE_NEWNET). Dentro desse espaço de contêiner isolado e sem privilégios, o atacante se torna o processo "root" desse namespace, concedendo-lhe privilégios CAP_NET_ADMIN dentro desse contexto delimitado.
Com CAP_NET_ADMIN dentro do namespace de rede personalizado, o atacante configura uma Associação de Segurança (SA) falsa e políticas de IPsec.
Usando chamadas de sistema como splice(2) ou vmsplice(2), o atacante anexa páginas pertencentes a um arquivo somente leitura alvo (por exemplo, /usr/bin/su) a um fragmento de buffer de socket (skb).
A Restrição: O atacante deve forçar o kernel a analisar os dados através da rotina esp_input().
A Estratégia: O atacante cria uma estrutura de rede de encapsulamento ESP-in-UDP e direciona a transmissão para a interface de loopback do host (127.0.0.1).
Quando o pacote é recebido localmente através do canal de loopback, a pilha de rede do kernel identifica o encapsulamento UDP, o desencapsula e entrega o payload interno ao esp_input() para processamento.
Devido a um bug lógico nos caminhos de anexação de datagramas IPv4/IPv6, o kernel falha em marcar adequadamente os fragmentos subjacentes do buffer de socket com a flag SKBFL_SHARED_FRAG ao fazer splice de páginas em sockets UDP.
Consequentemente, esp_input() interpreta erroneamente o pacote como um buffer privado e não clonado e segue um caminho rápido de otimização de desempenho "no-COW".
Em vez de copiar os dados para um buffer de usuário seguro, esp_input() realiza descriptografia in-place diretamente sobre as páginas de memória emprestadas do page cache do sistema
Ao ajustar finamente os dados do payload criptografado e utilizar a configuração do algoritmo criptográfico (como Extended Sequence Numbers), o processo de descriptografia sobrescreve deterministicamente o binário alvo no page cache.
Uma vez que o page cache de um binário como /usr/bin/su é envenenado na memória com o payload do atacante, a execução do binário dispara a execução do payload como root sem nunca tocar ou modificar o binário armazenado no disco físico real.
Impacto: Escalonamento local de privilégios determinístico e de alta confiabilidade em grandes distribuições Linux empresariais, sem risco de kernel panics.
Remediação: Atualize o kernel do Linux para versões que incorporem o patch que impõe o tratamento de SKBFL_SHARED_FRAG para splices de datagramas e introduz um fallback seguro para skb_cow_data() dentro da lógica de processamento do ESP.