
# Playbooks de Ansible para auditar y mitigar CVE-2026-31431 ("Copy Fail") Una vulnerabilidad de escalada de privilegios local en el módulo `algif_aead` del kernel de Linux que afecta a todas las principales distribuciones desde 2017.
Escalada de privilegios / corrupción de memoria en el kernel de Linux
algif_aead
Playbooks de auditoría y mitigación basados en Ansible — listos para ejecutar en producción
Copy Fail (CVE-2026-31431) es una vulnerabilidad en el módulo algif_aead
del kernel de Linux — la interfaz AEAD orientada al espacio de usuario de la
familia de sockets criptográficos AF_ALG.
Un fallo en la ruta copy_*user del kernel dentro del manejador de solicitudes
AEAD permite a un usuario local sin privilegios corromper la memoria del kernel
o escalar privilegios mediante la creación de una solicitud de socket malformada.
| Campo | Detalle |
|---|
| ID de CVE | CVE-2026-31431 |
| Apodo | Copy Fail |
| Componente | Kernel de Linux — algif_aead (net/socket.c, crypto/algif_aead.c) |
| Vector de ataque | Local |
| Privilegios requeridos | Bajos (usuario sin privilegios) |
| Impacto | Corrupción de memoria del kernel / escalada local de privilegios |
| Parcheado | Parche del kernel upstream en curso — consulte a su proveedor de distribución |
| Distribución | Versiones afectadas | Estado |
|---|---|---|
| Ubuntu 22.04 / 24.04 | kernels < versión parcheada | Parche pendiente — consulte el USN de Ubuntu |
| Debian 12 (Bookworm) | kernels < versión parcheada | Parche pendiente |
| RHEL / AlmaLinux / Rocky 8 y 9 | kernels < versión parcheada | Parche pendiente |
| Amazon Linux 2 / 2023 | kernels < versión parcheada | Parche pendiente |
| Upstream genérico | algif_aead compilado o auto-cargado | Vulnerable si el módulo está presente |
Un sistema no está en riesgo inmediato si
algif_aeadno está cargado y ninguna herramienta del espacio de usuario lo carga bajo demanda (consulte el paso 1 de auditoría).
| Subsistema | ¿Afectado por esta CVE? | ¿Afectado por la mitigación? |
|---|---|---|
| dm-crypt / LUKS | No | No |
| kTLS | No | No |
| IPsec / StrongSwan | No | No |
| OpenSSL (compilación predeterminada) | No | No |
| GnuTLS / NSS | No | No |
| OpenSSH | No | No |
| Motor afalg de OpenSSL | Potencialmente sí | Sí — revise antes de aplicar |
Herramientas kcapi-enc / kcapi-dgst | Sí | Sí |
.
├── audit_algif_aead.yml # Paso 1 — auditoría: detectar exposición por host
├── mitigate_copyfail.yml # Paso 2 — mitigación: descargar + bloquear módulo
└── README.md # Este documento
community.general (ansible-galaxy collection install community.general)become: true (sudo) en los hosts de destinolsof instalado en los objetivos (normalmente presente por defecto)inventory.ini está en gitignore — permanece local y nunca llega al repositorio.
inventory.ini.example es la plantilla confirmada desde la que todos parten.
# Clonar y preparar
git clone https://github.com/your-org/copy-fail-CVE-2026-31431.git
cd copy-fail-CVE-2026-31431
cp inventory.ini.example inventory.ini
# Edite inventory.ini con sus hosts reales y luego ejecute:
ansible-playbook -i inventory.ini audit_algif_aead.yml
Las siguientes rutas están en gitignore para evitar la filtración de datos de infraestructura:
| Ruta en gitignore | Por qué |
|---|---|
inventory.ini | Nombres de host / IPs reales |
inventories/ | Cualquier directorio de inventario local |
copyfail_reports/ | La salida de auditoría contiene versiones de kernel, listas de procesos |
.vault_pass | Archivo de contraseña de Ansible Vault |
*.retry | Artefactos de reintento de Ansible |
Ejecute el playbook de auditoría antes de tocar nada. Recopila evidencia por host y escribe un informe tanto localmente como en cada objetivo.
ansible-playbook -i inventory.ini audit_algif_aead.yml
Los informes se descargan a ./copyfail_reports/<hostname>_audit.txt.
| Comprobación | Comando | Veredicto |
|---|---|---|
| Versión del kernel | uname -r | Informativo |
| ¿Módulo cargado? | lsmod | grep algif_aead | Cargado = riesgo de exposición |
| Sockets AF_ALG activos | lsof | grep AF_ALG | Usuarios encontrados = debe revisar |
| Motor afalg de OpenSSL | openssl engine | grep afalg | Activo = revisar impacto |
| Herramientas kcapi presentes | which kcapi-* | Presentes = usuarios potenciales |
| Mitigación ya aplicada | stat /etc/modprobe.d/disable-algif.conf | Presente = ya mitigado |
| Condición | Acción recomendada |
|---|---|
| Módulo NO cargado | Riesgo inmediato bajo — supervise el parche del kernel |
| Módulo cargado, sin usuarios de sockets AF_ALG | Seguro aplicar la mitigación |
| Módulo cargado y usuarios AF_ALG activos | Revise los procesos antes de aplicar la mitigación |
| Archivo de mitigación ya presente | La mitigación se aplicó previamente — verifique |
Ejecute primero la auditoría. El playbook de mitigación es seguro de ejecutar de forma idempotente, pero la auditoría le proporciona el rastro de evidencia.
ansible-playbook -i inventory.ini mitigate_copyfail.yml
ansible-playbook -i inventory.ini mitigate_copyfail.yml \
-e '{"skip_hosts": ["db-prod-01", "hsm-node-02"]}'
/etc/modprobe.d/disable-algif.conf con install algif_aead /bin/falsealgif_aead del kernel en ejecución (no se requiere reinicio para la protección inicial)update-initramfs en Debian/Ubuntu, dracut --force en RHEL)/var/backup/copyfail_mitigation/mitigation.logNo se requiere reinicio para eliminar el módulo de la memoria.
Aun así, se recomienda un reinicio para confirmar que el bloqueo surte efecto y para establecer un estado posterior a la mitigación limpio.
Después de que el playbook complete, verifique en cualquier host de destino:
# El módulo NO debe aparecer
lsmod | grep algif_aead
# El archivo de bloqueo debe existir y contener la línea de instalación
cat /etc/modprobe.d/disable-algif.conf
# La carga manual debe ser rechazada
sudo modprobe algif_aead # Esperado: FATAL: Module algif_aead not found or refused
Una vez que su proveedor publique un kernel parcheado y lo haya aplicado:
# En cada host — elimine el bloqueo
sudo rm /etc/modprobe.d/disable-algif.conf
# Reconstruya el initramfs
sudo update-initramfs -u # Debian / Ubuntu
sudo dracut --force # RHEL / CentOS / Amazon Linux
# Reinicie con el kernel parcheado
sudo reboot
Publicado bajo la Licencia MIT.
Úselo bajo su propio riesgo. Valide siempre en un entorno de pruebas antes de
aplicarlo a sistemas de producción.
Mantenido por la comunidad. Se aceptan PRs e informes de incidencias.