...

Explicação sobre o «Dirty Frag» – Impacto da falha de segurança do kernel do Linux nos servidores de alojamento

O défice de segurança Dirty Frag No kernel do Linux, esta vulnerabilidade permite que atacantes locais obtenham, com quase total certeza, direitos de root em servidores de alojamento, afetando assim tanto o alojamento web como as instâncias na nuvem e os servidores geridos. Vou mostrar como funciona esta vulnerabilidade, quais as distribuições afetadas, com que rapidez é necessário aplicar o patch e quais as medidas imediatas que os administradores de alojamento devem implementar agora para Sistemas de produção para proteger.

Pontos centrais

  • Risco de root: A utilização local confere direitos plenos.
  • Amplo impacto: Diz respeito às distribuições empresariais mais comuns e aos workers do Kubernetes.
  • Caminho de ataque: Combinação de erros ESP/IPsec e RxRPC na cache de páginas.
  • Patches: Existem atualizações disponíveis, que só entram em vigor após o reinício.
  • Mitigação: bloquear o esp4/esp6/rxrpc, restringir fortemente o acesso local.

O que está por trás do «Dirty Frag» no kernel do Linux

O Dirty Frag agrupa duas falhas do kernel numa única Escalada de privilégios até aos direitos de root: um processamento in-place inseguro na pilha ESP/IPsec (esp4, esp6) e percursos de gravação incorretos no subsistema RxRPC. Ambos permitem modificações no Cache de página de ficheiros que, na verdade, deveriam estar protegidos, como binários SUID ou configurações. A vulnerabilidade tem os identificadores CVE-2026-43284 e CVE-2026-43500 e foi acompanhada por uma prova de conceito divulgada publicamente. Fundamental: o atacante necessita, em primeiro lugar, de acesso local para execução de código, o que é frequente em servidores de alojamento. É precisamente por isso que uma pequena brecha de segurança se transforma rapidamente numa tomada de controlo total do sistema com Direitos de raiz.

Por que razão os servidores de alojamento são particularmente vulneráveis

Nos servidores de alojamento existem muitos Pontos de entrada: palavras-passe fracas, CMS vulneráveis, acessos a shell através de ferramentas ou serviços mal configurados. Assim que um processo de utilizador estiver em execução, a cadeia de explorações pode contornar a gestão de direitos e aceder aos ficheiros do sistema no Cache de página influenciar. Em ambientes multi-tenant, existe mesmo o risco de uma quebra das fronteiras entre clientes, uma vez que uma única conta comprometida pode derrubar todo o servidor. Além disso, nestes sistemas encontram-se chaves de API, certificados e credenciais de bases de dados que ficam expostas após uma escalada. Por isso, considero que o risco é particularmente elevado no caso da hospedagem partilhada, dos «build workers», dos servidores de aplicações públicos e dos «Kubernetes workers» Perfil de risco.

Desenvolvimento técnico do ataque em passos simples

Um atacante local inicia com um utilizador sem privilégios Utilizador no servidor, por exemplo, através de um webshell ou de uma conta já comprometida. Através do Dirty Frag, ele impõe acesso de escrita a páginas de cache que pertencem a ficheiros privilegiados. Em seguida, manipula, por exemplo, um binário SUID ou uma configuração, de modo a que, na próxima chamada, Código com direitos de acesso superiores. Em seguida, desativa as definições de segurança ou substitui ficheiros binários para garantir a persistência. Por fim, propaga-se lateralmente, rouba credenciais de acesso e acede a outros sistemas no centro de dados ou na VPC na nuvem, até controlar toda a Arredores controlado.

Distribuições, contentores e instâncias na nuvem afetadas

Os componentes do kernel em questão estão presentes há anos em grandes Distribuições: Ubuntu (incluindo LTS), Debian, RHEL, AlmaLinux, Rocky Linux, CentOS Stream, Fedora, openSUSE Tumbleweed e Amazon Linux. As cargas de trabalho em contentores também estão em risco se o kernel do anfitrião for vulnerável, uma vez que os contentores utilizam o kernel partilhar. Os clusters do Kubernetes tornam-se, por isso, alvos em potencial, especialmente os nós de trabalho (worker nodes), nos quais são executadas diversas cargas de trabalho. Também os executores de CI/CD, os servidores de compilação e as gateways VPN que utilizam IPsec aumentam o risco. Considero os sistemas nos quais é executado código não confiável como Prioridade 1.

Estado das atualizações e prazos realistas

Muitas distribuições já fornecem versões atualizadas Kernel-pacotes, mas a proteção só entra em vigor após um reinício. Para o CVE-2026-43284, existem correções generalizadas, enquanto que para o CVE-2026-43500 se verificam, em alguns casos, atrasos, o que exige soluções provisórias. Por isso, estou a planear janelas de manutenção escalonadas, a verificar dependências como o IPsec ou o RxRPC e, em seguida, a verificar o funcionamento do Versão. Uma gestão organizada das atualizações e reinicializações reduz o risco de forma rápida e compreensível. Quem quiser estruturar os processos deve começar de forma pragmática com isto Guia de atualizações de segurança.

Como verifico se um sistema é vulnerável

Começo de forma pragmática com um levantamento da situação atual: versão do kernel, módulos carregados e eventuais dependências. Em ambientes de grande dimensão, automatizo estas verificações através de ferramentas de inventário/gestão de configuração; em servidores individuais, bastam alguns comandos.

# Identificar a versão do kernel e o pacote da distribuição
uname -r
rpm -q kernel || dpkg -l | grep -E 'linux-(image|kernel)'

# Módulos vulneráveis carregados?
lsmod | egrep '^(esp4|esp6|rxrpc)\b'

# Verificar a utilização do IPsec/XFRM (pode ser inofensivo, mas serve para classificação)
ip xfrm state 2>/dev/null
ip xfrm policy 2>/dev/null

# RxRPC/kAFS detetáveis?
ss -xa | grep -i rxrpc || true

Em ambientes Kubernetes, atribuo versões do kernel às funções dos workers com base na lista de nós e certifico-me de que os nós particularmente expostos (executores de compilação/tarefas, cargas de trabalho voltadas para o público) sejam os primeiros a assegurado tornar-se.

Medidas temporárias sem reinicialização

Até que todos os sistemas reiniciem, vou bloquear especificamente o Módulos Adiciono o esp4, o esp6 e o rxrpc à lista negra do Modprobe e, caso estejam ativos, descarrego-os. Antes disso, verifico com o lsmod se os componentes estão carregados e avalio o impacto nas ligações IPsec ou nos serviços kAFS/RxRPC. Paralelamente, reforço a segurança do SSH: apenas início de sessão com chave, sem início de sessão com palavra-passe e, opcionalmente, autenticação de dois fatores (2FA) para casos particularmente sensível Acessos de administrador. Além disso, restrinjo os acessos locais ao shell para contas sem privilégios e reduzo os direitos de acordo com o princípio do privilégio mínimo. Paralelamente, procuro sinais como novos ficheiros SUID, processos suspeitos ou alterações invulgares em ficheiros binários em caminhos graváveis, para detetar atividades suspeitas Amostra reconhecer cedo.

Medidas concretas de mitigação (sem tempo de inatividade, sempre que possível)

Faço cópias de segurança a curto prazo em três níveis: módulos do kernel, nível de rede e contas. Ao fazê-lo, documento cada alteração para poder revertê-la posteriormente, após a aplicação bem-sucedida do patch.

  • Colocar módulos na lista negra e descarregá-los (apenas se as dependências estiverem esclarecidas):
# Criar ficheiro de lista negra
printf "blacklist esp4\nblacklist esp6\nblacklist rxrpc\n" | sudo tee /etc/modprobe.d/dirtyfrag-blacklist.conf

# Descarregar módulos já carregados (pode falhar se estiverem a ser utilizados)
sudo rmmod rxrpc 2>/dev/null || true
sudo rmmod esp6 2>/dev/null || true
sudo rmmod esp4 2>/dev/null || true

# Garantir a persistência do Initramfs (ter em conta a distribuição)
sudo update-initramfs -u || sudo dracut -f

# Verificar se os módulos não serão carregados no futuro
modprobe -n esp4; modprobe -n esp6; modprobe -n rxrpc
  • Bloquear o ESP ao nível da rede (caso o IPsec não esteja a ser utilizado em ambiente de produção):
# nftables (preferencial)
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0\; }
sudo nft add rule inet filter input meta l4proto 50 drop   # ESP = 50
sudo nft add rule inet filter input ip6 nexthdr 50 drop
# Opcionalmente, também em «Output/Forward» de forma análoga

# iptables (legado)
sudo iptables -A INPUT -p 50 -j DROP
sudo ip6tables -A INPUT -p 50 -j DROP
  • Reforçar a segurança do SSH e das contas locais:
# Apenas início de sessão com chave
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl reload sshd

# Desativar shells interativos para utilizadores de serviço
sudo usermod -s /usr/sbin/nologin

Constato o seguinte: estas medidas são temporário. Após a implementação completa das atualizações e do reinício, vou levantar as restrições, na medida em que tal for necessário do ponto de vista operacional.

Detecção e análise forense: o que estou a monitorizar

Uma vez que o Dirty Frag facilita a alteração de ficheiros sensíveis através da cache de páginas, concentro a minha monitorização na integridade, nas alterações SUID e na atividade invulgar dos processos.

  • Detetar alterações nos direitos SUID/SGID:
# Verificação básica rápida
sudo find / -xdev -type f -perm -4000 -printf '%p %u:%g %m\n' 2>/dev/null

# Verificar a integridade dos pacotes (ter em conta a distribuição)
rpm -Va 2>/dev/null | grep '^..5' || true
sudo debsums -s 2>/dev/null || true
  • Regras de auditoria para alterações em ficheiros binários (desde que o auditd esteja ativo):
sudo auditctl -w /usr/bin -p wa -k bin-change
sudo auditctl -w /usr/sbin -p wa -k bin-change
sudo auditctl -a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -k perm-change

Nos registos, procuro falhas no carregamento de módulos, eventos XFRM/ESP e variações repentinas nas capacidades. Em caso de suspeita, guardo artefactos voláteis (ficheiros abertos, extratos de memória) antes de desligar o sistema da rede e seguir o manual de incidentes analisa.

Fortalecimento para cargas de trabalho em contêineres e no Kubernetes

Para ambientes de cluster, utilizo seccomp-Perfis para limitar chamadas de sistema críticas (por exemplo, AF_KEY, AF_RXRPC, XFRM-Netlink). Ao mesmo tempo, implementei o AppArmor ou o SELinux no modo «enforcing», para que as violações das políticas sejam imediatamente interrompidas. Encapsulo as cargas de trabalho sensíveis de forma mais rigorosa, isolando-as Namespaces e separo rigorosamente os Build-Workers dos serviços de produção. Os Admission-Controllers impõem perfis de segurança, enquanto os registos e as métricas alertam para atividades invulgares nos nós. Nos nós de trabalho com código externo, planeio aplicar as correções logo no início, pois é aqui que surge o maior Exposição.

Exemplos de políticas para pods (aplicadas na prática)

Apresento uma base mínima do SecurityContext, que se adequa bem como predefinição para cargas de trabalho genéricas:

apiVersion: v1
kind: Pod
metadata:
  name: hardened-pod
spec:
  securityContext:
    seccompProfile:
 type: RuntimeDefault
  containers:
  - name: app
    image: your-registry/your-image:tag
    securityContext:
 allowPrivilegeEscalation: false
 capabilities:
 drop: ["ALL"]
 runAsNonRoot: true
 readOnlyRootFilesystem: true

Além disso, configuro o PodSecurityAdmission (ou políticas através do Admission Controller) de forma a que os Pods privilegiados só sejam iniciados em namespaces claramente definidos. Recuso a partilha do namespace do anfitrião (hostPID, hostNetwork), a menos que seja expressamente necessário. Desta forma, diminui-se a probabilidade de uma exploração de um contentor se propagar diretamente para os contextos do anfitrião atua de forma drástica.

Janelas de manutenção, reinicializações e implementações Canary

A proteção só entra em vigor após o reinício do kernel atualizado. Por isso, estou a organizar uma implementação escalonada Janela de manutenção com foco na disponibilidade:

  • Grupo Canary: Seleciono hosts representativos por plataforma, aplico as correções e reinicio primeiro nesses hosts, e monitorizo as métricas e os registos.
  • Implementação por fases: Seguem-se, em seguida, os clusters de produção em fases, cada uma com verificações de integridade e testes funcionais de verificação básica.
  • Drenar e Expulsar (Kubernetes): Os nós são esvaziados antes do reinício; os PDBs e os números de réplicas garantem a disponibilidade.
  • Plano de reversão: Em caso de regressões, mudo para o kernel anterior (opção do GRUB) ou reverto a AMI/instantâneos.

A aplicação de correções em tempo real pode servir de solução provisória até à reinicialização completa, mas não substitui a reinicialização final, assim que todas as correções para ambas as CVEs estiverem disponíveis.

Gestão da mudança, comunicação e documentação

Trato o Dirty Frag como qualquer atualização crítica do kernel: um ticket de alteração bem estruturado, análise de riscos, notas de teste e aprovações. É importante manter as partes interessadas a par de Impacto, o calendário e eventuais interrupções do serviço. Após a conclusão, registo as versões do kernel, as regras de exceção (por exemplo, exceções IPsec) e elimino as soluções provisórias, para que não haja dívidas técnicas permanecer.

Armadilhas típicas na prática

  • A mitigação interrompe o IPsec: O bloqueio do ESP (Proto 50) ou a descarga do esp4/esp6 impede o funcionamento dos túneis. Estou a planear percursos alternativos ou uma janela de manutenção específica.
  • As dependências do RxRPC são subestimadas: Os serviços legados ou a utilização do kAFS são raros, mas existem. Vou verificar cuidadosamente antes de remover o rxrpc.
  • Atualização sem reinicialização: Os pacotes do kernel instalados não oferecem proteção enquanto o kernel antigo estiver a funcionar. Estou a verificar ativamente a versão que está a ser executada.
  • Cobertura incompleta: Ter em conta ambas as CVEs – se as correções forem implementadas de forma escalonada, o risco residual mantém-se até à implementação completa.
  • Foco no contentor, esquecer o anfitrião: O SecurityContext reforça a segurança dos pods, mas o kernel do anfitrião é o ponto vulnerável. Dou sempre prioridade ao Host-Fix.

Visão geral por cenário de alojamento

Para uma visão geral rápida, resumo os riscos e os progressos imediatos por Cenário em conjunto. A tabela ajuda a definir prioridades quando há muitos sistemas para gerir. Começo pelos servidores partilhados e pelos nós de trabalho, seguindo-se os servidores dedicados e os serviços menos expostos. Após a aplicação das correções, verifico a versão do kernel em execução e realizo um breve teste de funcionalidade. Tenho em conta as notas relativas a dependências do IPsec ou do RxRPC antes de desativar módulos de forma permanente bloqueio.

Cenário Principal perigo Medidas imediatas Nota sobre medidas de mitigação
Alojamento partilhado A separação de clientes é revogada Aplicação da correção + reinicialização, limitar os shells dos utilizadores Listas negras do esp4/esp6/rxrpc, verificações SUID
Trabalhador do Kubernetes Contentores com direitos de anfitrião Atualização do kernel, forçar seccomp/AppArmor Restringir AF_KEY/AF_RXRPC/XFRM
Executor de CI/CD Tarefas de compilação não confiáveis Aplicação rápida de correções, princípio do privilégio mínimo Bloqueio temporário do módulo
Gateways VPN/IPsec Ataques ESP/IPsec Testes minuciosos antes da implementação Ponderar o risco em relação à disponibilidade
Servidores raiz dedicados Acesso total aos dados Aplicar patches, reiniciar o sistema, verificar os registos de auditoria Reforço da segurança do SSH e das contas

Por que é que a escolha do fornecedor de alojamento é importante

Um fornecedor com uma RemendoUm processo de comunicação clara e monitorização reduz drasticamente o tempo necessário para a resolução do problema. Presto atenção a janelas de manutenção obrigatórias, registos de alterações e testes para atualizações de segurança. Igualmente importante: diretrizes de fortificação adequadas, manuais de emergência e uma equipa que aborde ativamente as anomalias. A transparência sobre as estratégias do kernel e os ciclos «upstream» cria confiança em fases críticas. Quem quiser compreender os pormenores da política de atualizações pode ler um resumo sobre versões antigas do kernel no alojamento e, em seguida, avalia a sua própria Estratégia.

Lista de verificação para uma implementação rápida

  • Fazer um inventário: versões do kernel, funções, dependências IPsec/RxRPC.
  • Priorizar: primeiro os hosts com código não confiável e os nós acessíveis publicamente.
  • Ativar medidas de mitigação: colocar módulos na lista negra, desativar o ESP, reforçar a segurança do SSH.
  • Aplicar patches: dar prioridade aos hosts de teste/Canary e, em seguida, proceder à implementação por fases.
  • Planear reinicializações: drenagem/failover, verificações de integridade, testes de funcionamento.
  • Validar: verificar o kernel em execução, executar verificações de integridade e SUID.
  • Reforçar a monitorização: regras do Auditd, anomalias nos processos, assinaturas de registos.
  • Avaliar a revogação das soluções provisórias após a implementação da proteção total.
  • Documentar: alterações, exceções, lições aprendidas.

Resumo: O que estou a fazer agora

Eu dou prioridade Sistemas com código não confiável, verifico o estado das correções e planeio reinicializações imediatas após as atualizações. Até lá, bloqueio o esp4, o esp6 e o rxrpc, coloco, se necessário, os sistemas com uso intensivo de IPsec numa janela separada e reforço as restrições de acesso via SSH. Nos contentores, aplico o seccomp, bem como o AppArmor/SELinux, e monitorizo alterações no SUID, novos ficheiros binários e processos suspeitos. Após cada implementação, verifico a versão, os registos e o funcionamento, para prosseguir com o mínimo de regressões. É assim que mantenho o Risco controlável, até que todos os nós estejam a funcionar em segurança e as aplicações web, as bases de dados e as cargas de trabalho na nuvem continuem a funcionar de forma fiável.

Artigos actuais