
DaemonSet para mitigação da vulnerabilidade CVE-2026-31431 (Copy Fail)
Aplicação automática de mitigação para as vulnerabilidades CVE-2026-31431, CVE-2026-43284 e CVE-2026-43500 no kernel Linux em todos os worker-nodes do cluster Yandex Managed Kubernetes.
Identificador CVE (CVE ID): CVE-2026-43284, CVE-2026-43500
Link para o CVE: https://nvd.nist.gov/vuln/detail/CVE-2026-43284
Relatório original:
Descrição resumida:
Dirty Frag é uma classe de vulnerabilidades lógicas no kernel Linux que permite a um usuário local não privilegiado obter privilégios de superusuário (root). A exploração combina dois primitivos independentes de escrita no page-cache nas subsistemas xfrm-ESP e RxRPC, cada um dos quais é autossuficiente para escalonamento de privilégios.
Copy Fail 2: Electric Boogaloo é um PoC independente que explora o primitivo xfrm-ESP (CVE-2026-43284). Pela classe de vulnerabilidade, é análogo ao Copy Fail original (CVE-2026-31431), portanto este DaemonSet mantém a mitigação tanto para o cenário original AF_ALG quanto para as novas variantes Dirty Frag.
Ataque:
kernel panic em caso de exploração malsucedidapage cache é compartilhado por todo o nóA causa raiz de ambas as variantes é a mesma: ao usar splice() / MSG_SPLICE_PAGES, o kernel coloca páginas do page cache diretamente nos fragmentos dos buffers de socket (skb). As subsistemas xfrm-ESP e RxRPC realizam descriptografia in-place nesses fragmentos, sem verificar se são privados. Como resultado, o atacante obtém escrita controlada no page cache de qualquer arquivo legível.
Tecnologias afetadas:
net/ipv4/esp4.c / net/ipv6/esp6.c (xfrm-ESP)net/rxrpc/rxkad.c (RxRPC / RxKAD)splice() / vmsplice() em conjunto com sockets UDP (ESP-in-UDP) e AF_RXRPCCopy Fail original (CVE-2026-31431) é mantida separadamente por meio do bloqueio de AF_ALG (algif_aead)A vulnerabilidade não afeta diretamente AF_ALG (algif_aead) como parte do Dirty Frag - esta é uma vulnerabilidade separada do Copy Fail (CVE-2026-31431). Também não afetam diretamente dm-crypt / LUKS, kTLS, in-kernel TLS e IPsec em modo tunnel sem encapsulamento UDP.
Vetor de ataque e nível de gravidade conforme CVSS v.3.1:
Pontuação base: não atribuída no momento da publicação.
Pela natureza, a vulnerabilidade é análoga ao Copy Fail (CVE-2026-31431, 7.8 HIGH, CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) - é um escalonamento local de privilégios sem race condition.
O DaemonSet automaticamente em cada worker node do cluster:
AF_ALG - executa um teste rápido para o cenário original Copy Fail/etc/modprobe.d/blacklist-lpe.conf com regras para algif_aead, esp4, esp6 e rxrpcrmmod para algif_aead, esp4, esp6 e rxrpc, se estiverem carregadospage cache e verifica a configuração - limpa os caches e verifica a existência do arquivo de configuraçãowget https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-copy-fail-mitigation/main/copy-fail-mitigation-daemonset.yaml
Ou clonar o repositório:
git clone https://github.com/yandex-cloud-examples/yc-mk8s-copy-fail-mitigation.git
cd yc-mk8s-copy-fail-mitigation
kubectl apply -f copy-fail-mitigation-daemonset.yaml
# Verificar o status do DaemonSet
kubectl get daemonset -n kube-system cve-2026-31431-fix
# Ver em quantos nós o fix foi aplicado
kubectl get pods -n kube-system -l app=cve-2026-31431-fix -o wide
# Logs do initContainer (aplicação do fix)
kubectl logs -n kube-system -l app=cve-2026-31431-fix -c apply-fix
# Logs do contêiner principal (monitoramento)
kubectl logs -n kube-system -l app=cve-2026-31431-fix -c monitor
=========================================
Copy Fail / Dirty Frag mitigation for Yandex Managed K8s
Node: demo-ru-central1-a-1
Date: Thu May 08 14:00:00 UTC 2026
=========================================
Step 1: Checking vulnerability before fix...
❌ System is VULNERABLE - AF_ALG AEAD interface is accessible
Step 2: Creating modprobe configuration...
✓ Created /etc/modprobe.d/blacklist-lpe.conf
Step 3: Unloading vulnerable modules...
✓ algif_aead unloaded
✓ esp4 not loaded
✓ esp6 not loaded
✓ rxrpc not loaded
Step 3.5: Dropping system caches...
✓ System caches cleared
Step 4: Verifying the fix...
✓ Configuration file exists:
install algif_aead /bin/false
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
Step 5: Testing if vulnerability is fixed...
✓ AF_ALG AEAD interface is properly blocked
=========================================
✓ Mitigation applied successfully
=========================================
Você pode verificar a presença da vulnerabilidade em um nó manualmente. Conecte-se ao nó via SSH e execute:
# Verificar a disponibilidade do cenário original Copy Fail via AF_ALG
python3 -c 'import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind(("aead","authencesn(hmac(sha256),cbc(aes))")); print("AF_ALG AEAD available - VULNERABLE")'
# Se exibir "AF_ALG AEAD available - VULNERABLE" - o sistema está vulnerável
# Se exibir um erro - o sistema está protegido
Verificar a configuração:
# Verificar a existência da configuração de bloqueio
cat /etc/modprobe.d/blacklist-lpe.conf
# Saída esperada:
# install algif_aead /bin/false
# install esp4 /bin/false
# install esp6 /bin/false
# install rxrpc /bin/false
Verificar se os módulos vulneráveis não estão carregados:
lsmod | egrep 'algif_aead|esp4|esp6|rxrpc'
Se for necessário remover o DaemonSet:
kubectl delete -f copy-fail-mitigation-daemonset.yaml
Importante: A remoção do DaemonSet não removerá os arquivos de configuração dos nós. O arquivo /etc/modprobe.d/blacklist-lpe.conf permanecerá no lugar e continuará protegendo o sistema.
Para remover completamente o fix dos nós, é necessário conectar-se a cada nó via SSH e excluir manualmente o arquivo:
rm /etc/modprobe.d/blacklist-lpe.conf
Permissões utilizadas:
hostPID: true - para acesso aos processos do host via nsenterprivileged: true - para escrita em /etc e descarregamento de módulos do kernel/ - para acesso ao sistema de arquivos do hostImagem: ubuntu:22.04
Recursos:
Namespace: kube-system
Apache License 2.0
Consulte LICENSE para detalhes.
Em caso de problemas, crie uma issue no repositório.