
DaemonSet para la mitigación de la vulnerabilidad CVE-2026-31431 (Copy Fail)
Aplicación automática de la mitigación para las vulnerabilidades CVE-2026-31431, CVE-2026-43284 y CVE-2026-43500 en el kernel de Linux en todos los worker-nodes del clúster Yandex Managed Kubernetes.
Identificador CVE (CVE ID): CVE-2026-43284, CVE-2026-43500
Enlace al CVE: https://nvd.nist.gov/vuln/detail/CVE-2026-43284
Informe original:
Descripción breve:
Dirty Frag es una clase de vulnerabilidades lógicas en el kernel de Linux que permite a un usuario local no privilegiado obtener privilegios de superusuario (root). La explotación combina dos primitivas independientes de escritura en page cache en los subsistemas xfrm-ESP y RxRPC, cada una de las cuales es autosuficiente para la escalada de privilegios.
Copy Fail 2: Electric Boogaloo es un PoC independiente que explota la primitiva xfrm-ESP (CVE-2026-43284). Por clase de vulnerabilidad es análogo al Copy Fail original (CVE-2026-31431), por lo que este DaemonSet mantiene la mitigación tanto para el escenario original de AF_ALG como para las nuevas variantes de Dirty Frag.
Ataque:
kernel panic en caso de explotación fallidapage cache es compartido por todo el nodoLa causa raíz de ambas variantes es la misma: al usar splice() / MSG_SPLICE_PAGES, el kernel coloca páginas del page cache directamente en fragmentos de buffers de socket (skb). Los subsistemas xfrm-ESP y RxRPC realizan descifrado in-place sobre dichos fragmentos sin verificar si son privados. Como resultado, el atacante obtiene una escritura controlada en el page cache de cualquier archivo legible.
Tecnologías afectadas:
net/ipv4/esp4.c / net/ipv6/esp6.c (xfrm-ESP)net/rxrpc/rxkad.c (RxRPC / RxKAD)splice() / vmsplice() combinadas con sockets UDP (ESP-in-UDP) y AF_RXRPCCopy Fail original (CVE-2026-31431) mediante el bloqueo de AF_ALG (algif_aead)La vulnerabilidad no afecta directamente a AF_ALG (algif_aead) como parte de Dirty Frag - esta es una vulnerabilidad separada de Copy Fail (CVE-2026-31431). Tampoco se ven afectados directamente dm-crypt / LUKS, kTLS, in-kernel TLS e IPsec en modo tunnel sin encapsulación UDP.
Vector de ataque y nivel de peligrosidad según CVSS v.3.1:
Puntuación base: no asignada en el momento de la publicación.
Por su naturaleza, la vulnerabilidad es similar a 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) - es una escalada de privilegios local sin race condition.
El DaemonSet automáticamente en cada worker node del clúster:
AF_ALG - ejecuta una prueba rápida para el escenario original de Copy Fail/etc/modprobe.d/blacklist-lpe.conf con reglas para algif_aead, esp4, esp6 y rxrpcrmmod para algif_aead, esp4, esp6 y rxrpc, si están cargadospage cache y verifica la configuración - vacía las cachés y comprueba la existencia del archivo de configuraciónwget https://raw.githubusercontent.com/yandex-cloud-examples/yc-mk8s-copy-fail-mitigation/main/copy-fail-mitigation-daemonset.yaml
O clonar el repositorio:
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 el estado del DaemonSet
kubectl get daemonset -n kube-system cve-2026-31431-fix
# Ver en cuántos nodos se ha aplicado el fix
kubectl get pods -n kube-system -l app=cve-2026-31431-fix -o wide
# Logs del initContainer (aplicación del fix)
kubectl logs -n kube-system -l app=cve-2026-31431-fix -c apply-fix
# Logs del contenedor principal (monitoreo)
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
=========================================
Puede verificar la presencia de la vulnerabilidad en un nodo manualmente. Conéctese al nodo por SSH y ejecute:
# Verificar la disponibilidad del escenario original de Copy Fail a través de 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")'
# Si muestra "AF_ALG AEAD available - VULNERABLE" - el sistema es vulnerable
# Si muestra un error - el sistema está protegido
Verificar la configuración:
# Verificar la existencia de la configuración de bloqueo
cat /etc/modprobe.d/blacklist-lpe.conf
# Salida esperada:
# install algif_aead /bin/false
# install esp4 /bin/false
# install esp6 /bin/false
# install rxrpc /bin/false
Verificar que los módulos vulnerables no estén cargados:
lsmod | egrep 'algif_aead|esp4|esp6|rxrpc'
Si es necesario eliminar el DaemonSet:
kubectl delete -f copy-fail-mitigation-daemonset.yaml
Importante: La eliminación del DaemonSet no eliminará los archivos de configuración de los nodos. El archivo /etc/modprobe.d/blacklist-lpe.conf permanecerá en su lugar y continuará protegiendo el sistema.
Para eliminar completamente el fix de los nodos, debe conectarse a cada nodo por SSH y eliminar manualmente el archivo:
rm /etc/modprobe.d/blacklist-lpe.conf
Permisos utilizados:
hostPID: true - para acceder a los procesos del host a través de nsenterprivileged: true - para escribir en /etc y descargar módulos del kernel/ - para acceder al sistema de archivos del hostImagen: ubuntu:22.04
Recursos:
Namespace: kube-system
Apache License 2.0
Consulte LICENSE para más detalles.
Si surgen problemas, cree un issue en el repositorio.