
Mitigación rápida y auditable de Linux para CVE-2026-31431 Copy Fail: bloqueo de algif_aead, verificación y endurecimiento de seccomp de AF_ALG.
______ ______ _ __ ______ __
/ ____/___ ____ __ _/ ____/___ _(_) / / ____/_ ______ __________/ /
/ / / __ \/ __ \/ / / / /_ / __ `/ / / / / __/ / / / __ `/ ___/ __ /
/ /___/ /_/ / /_/ / /_/ / __/ / /_/ / / / / /_/ / /_/ / /_/ / / / /_/ /
\____/\____/ .___/\__, /_/ \__,_/_/_/ \____/\__,_/\__,_/_/ \__,_/
/_/ /____/
Evaluación y mitigación rápida y auditable de la exposición en Linux para CVE-2026-31431 “Copy Fail” mientras los kernels se parchean.
CopyFail Guard es una herramienta de operaciones defensivas para administradores de sistemas Linux, ingenieros DevSecOps, equipos de plataforma y respondedores de incidentes. Ayuda a reducir la exposición al problema de / de Linux al:
algif_aeadAF_ALGalgif_aead está disponible, cargado, integrado en el kernel o ya bloqueadomodprobe.d y descargar el módulo cuando sea seguroSolución final: instala el kernel parcheado de tu proveedor y reinicia.
Esta herramienta cubre la brecha operativa entre la divulgación y el parcheo completo de la flota.
splice, cambios de setuid, escalada de privilegios ni sondeos destructivos./etc/modprobe.d/99-copyfail-guard.conf, y el rollback elimina solo ese archivo.seccomp-patch añade una denegación de AF_ALG a un perfil seccomp existente de Docker/Podman/Kubernetes en lugar de reemplazar el endurecimiento de tu runtime.assess --json y los códigos de salida documentados respaldan los escaneos de flota, la captura en SIEM y la evidencia de gestión de cambios.Si estás en un host Linux y necesitas una respuesta rápida:
git clone --depth 1 https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
Si el veredicto indica exposición y algif_aead es modular:
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
Para instalaciones repetibles, fija una etiqueta de versión:
git clone --branch v0.3.0 --depth 1 https://github.com/juliosuas/copyfail-guard.git
Reemplaza v0.3.0 con la última versión etiquetada cuando haya versiones más recientes disponibles.
Ejecuta primero la comprobación segura de exposición:
sudo ./bin/copyfail-guard.sh assess
Cómo interpretar el resultado:
| Familia de veredicto | Qué significa | Qué hacer |
|---|---|---|
EXPOSED_* | algif_aead / AF_ALG parece accesible o cargable | Mitiga ahora; luego aplica el parche y reinicia |
PARTIALLY_MITIGATED_* | Existe un bloqueo, pero el módulo cargado o el estado de reinicio aún importan | Reinicia o descarga de forma segura; luego verifica |
INTERIM_MITIGATED_* | La mitigación local está activa | Consérvala, pero igualmente aplica el parche y reinicia |
LOW_OBVIOUS_EXPOSURE_* | Las comprobaciones locales no encontraron exposición obvia de algif_aead | Confirma igualmente el estado del parche del proveedor |
Si ejecutas contenedores no confiables, trabajos de CI, sandboxes o cargas de trabajo multiusuario, prueba también si la creación de sockets AF_ALG está bloqueada dentro de ese runtime:
python3 tools/afalg-socket-test.py
PERMITTED no demuestra una explotación exitosa, pero demuestra que la API criptográfica relevante del espacio de usuario es accesible. Para operaciones defensivas, eso es razón suficiente para aplicar la mitigación mientras confirmas el despliegue del kernel parcheado.
No se incluye ninguna prueba de concepto destructiva. Eso es una característica, no una carencia.
Una prueba real de explotación de Copy Fail necesitaría validar el impacto en la memoria del kernel o en la page cache, o la escalada de privilegios. Incluir eso en un repositorio público de mitigación haría que el proyecto fuera menos seguro y menos desplegable en producción.
CopyFail Guard demuestra las cosas sobre las que los operadores pueden actuar de forma segura:
Para conocer el estado final de vulnerabilidad, combina esta herramienta con el aviso del proveedor, el inventario de paquetes y la evidencia de reinicio.
CopyFail Guard es mitigación, no cura. Reduce la exposición y verifica los controles intermedios. La solución duradera sigue siendo el kernel parcheado por el proveedor más el reinicio.
La herramienta está diseñada intencionalmente para clonar y ejecutar en respuesta a incidentes: no se requieren compilador, cabeceras del kernel, código de explotación ni gestor de paquetes de terceros para el flujo principal del host. python3 es necesario para la salida --json, seccomp-patch y la prueba de sockets AF_ALG sin explotación.
Clonar y ejecutar:
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
chmod +x bin/copyfail-guard.sh
sudo ./bin/copyfail-guard.sh doctor
sudo ./bin/copyfail-guard.sh assess
sudo ./bin/copyfail-guard.sh mitigate --yes
sudo ./bin/copyfail-guard.sh verify
Instalación opcional en el sistema:
git clone https://github.com/juliosuas/copyfail-guard.git
cd copyfail-guard
sudo ./scripts/install.sh
sudo copyfail-guard status
El instalador permite fijar el origen y el destino para despliegues controlados:
sudo env COPYFAIL_GUARD_REF=v0.3.0 ./scripts/install.sh
Usa la última versión etiquetada para COPYFAIL_GUARD_REF cuando haya versiones más recientes disponibles.
Endurecimiento de contenedores / CI:
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
Valida que AF_ALG está bloqueado dentro de un contenedor protegido:
docker run --rm \
--security-opt seccomp=./copyfail-seccomp.json \
-v "$PWD/tools:/tools:ro" \
python:3.12-alpine \
python /tools/afalg-socket-test.py
Resultado protegido esperado:
BLOCKED: socket(AF_ALG) denied by policy (...)
Consulta Salidas de ejemplo para ver los veredictos esperados, el formato JSON y los resultados de validación de contenedores.
Copy Fail es una escalada de privilegios local del kernel de Linux en el componente algif_aead de la API criptográfica AF_ALG del espacio de usuario. Los avisos públicos describen una primitiva de escritura en la page cache alcanzable por usuarios locales sin privilegios y especialmente peligrosa en sistemas con kernel compartido: nodos Kubernetes, runners de CI/CD, hosts multiinquilino, sandboxes de agentes y máquinas de desarrolladores.
La solución correcta es una actualización del kernel del proveedor que contenga la reversión/corrección upstream y un reinicio con el kernel parcheado. CopyFail Guard es una ayuda de operaciones defensivas para la ventana antes de que ese reinicio se complete en toda la flota.
| Área | Comando | Propósito |
|---|---|---|
| Evaluación segura | assess | Emitir un veredicto de exposición sin explotación, las acciones siguientes y un código de salida apto para automatización |
| Comprobación de dependencias | doctor | Comprobar las herramientas requeridas/opcionales y explicar las limitaciones del runtime |
| Inspección del host | status | Mostrar SO/kernel, disponibilidad del módulo, estado de carga, advertencia de módulo integrado, bloqueo de modprobe y consumidores obvios de AF_ALG |
| Mitigación del host | mitigate | Escribir /etc/modprobe.d/99-copyfail-guard.conf e intentar descargar algif_aead |
| Verificación | verify | Fallar claramente si el módulo está cargado, integrado o no bloqueado |
| Rollback | rollback | Eliminar únicamente el archivo de modprobe gestionado por CopyFail Guard |
| Contenedores | seccomp-patch | Parchear un perfil seccomp existente para denegar socket(AF_ALG, ...) preservando el uso normal de sockets |
| Perfil de emergencia | seccomp-docker | Generar un perfil específico de denegación de AF_ALG para uso de emergencia |
| Kubernetes | k8s-example | Imprimir un ejemplo de pod seccomp Localhost |
Comandos principales del host:
bashmodinfo, modprobe, lsmod, rmmod donde estén disponiblesgrep, awk, mktemp, installHerramientas de visibilidad opcionales:
lsof o ss para comprobaciones de consumidores de AF_ALGParcheo de perfiles seccomp:
python3 es necesario para --json, seccomp-patch y tools/afalg-socket-test.pyNo se requieren código de explotación, compilador, cabeceras del kernel ni paquetes de terceros.
CopyFail Guard no incluye una prueba de concepto de explotación. Eso es intencional. Consulta ¿Esto demuestra la vulnerabilidad?.
En su lugar, assess realiza una comprobación operativa segura:
algif_aead parece disponible, cargado, integrado en el kernel o bloqueadoJSON de automatización:
sudo ./bin/copyfail-guard.sh assess --json
./bin/copyfail-guard.sh doctor --json
Códigos de salida:
| Código | Significado |
|---|---|
0 | Exposición obvia baja según las comprobaciones locales |
1 | Mitigación intermedia activa; aún se requiere parche/reinicio |
10 | Expuesto/mitigación disponible |
11 | Parcialmente mitigado; se necesita reinicio o descarga del módulo |
12 | Módulo integrado en el kernel; se requiere parche/reinicio |
20 | Estado de evaluación desconocido |
mitigate escribe:
/etc/modprobe.d/99-copyfail-guard.conf
con:
# Managed by CopyFail Guard for CVE-2026-31431
install algif_aead /bin/false
blacklist algif_aead
Luego intenta:
sudo rmmod algif_aead
Si el módulo está actualmente en uso, rmmod puede fallar. En ese caso, el bloqueo persistente permanece instalado; detén los consumidores de AF_ALG o reinicia después de aplicar la mitigación.
El script se niega a sobrescribir un enlace simbólico en su ruta de modprobe gestionada y escribe el archivo de forma atómica con permisos seguros.
Para cargas de trabajo no confiables, bloquea la creación de sockets AF_ALG con seccomp incluso mientras parcheas los hosts.
Ruta recomendada: parchea la configuración base de seccomp de tu runtime existente en lugar de reemplazarla:
./bin/copyfail-guard.sh seccomp-patch docker-default.json copyfail-seccomp.json
Uso con Docker:
docker run --security-opt seccomp=./copyfail-seccomp.json IMAGE
Uso con Podman:
podman run --security-opt seccomp=./copyfail-seccomp.json IMAGE
Ruta solo de emergencia si no dispones de un perfil base:
./bin/copyfail-guard.sh seccomp-docker ./copyfail-afalg-seccomp.json
El perfil de emergencia generado bloquea AF_ALG, pero por lo demás permite las llamadas al sistema. Trátalo como una solución provisional específica, no como un reemplazo del endurecimiento seccomp predeterminado normal de Docker.
Para Kubernetes, coloca el perfil bajo la raíz seccomp de kubelet, comúnmente:
/var/lib/kubelet/seccomp/profiles/copyfail-seccomp.json
Luego refiérelo con:
securityContext:
seccompProfile:
type: Localhost
localhostProfile: profiles/copyfail-seccomp.json
Consulta examples/kubernetes-seccomp-pod.yaml.
Este proyecto incluye una prueba de accesibilidad de AF_ALG sin explotación:
python3 tools/afalg-socket-test.py
Solo intenta crear y cerrar un socket AF_ALG. No enlaza operaciones criptográficas, no llama a splice, no toca binarios setuid, no corrompe la page cache ni intenta escalar privilegios.
Resultados:
BLOCKED significa que la política denegó AF_ALG para ese proceso.PERMITTED significa que la creación de sockets AF_ALG aún está permitida para ese proceso.UNSUPPORTED significa que AF_ALG no está disponible en ese runtime.CopyFail Guard necesita informes de compatibilidad del mundo real de hosts Linux, runtimes de contenedores, runners de CI y nodos Kubernetes. Si puedes probarlo de forma segura, abre un issue de Informe de compatibilidad con la salida saneada de doctor, assess --json, verify o de la prueba de sockets AF_ALG.
Los informes útiles ayudan a responder:
algif_aead está integrado en el kernel y solo requiere parche/reinicioConsulta la Guía de validación comunitaria.
copyfail-guard assess Safe exposure assessment, no exploit attempt
copyfail-guard status Inspect host exposure indicators
copyfail-guard doctor Check dependencies and runtime readiness
copyfail-guard mitigate Disable algif_aead persistently and unload it
copyfail-guard verify Verify host mitigation is active
copyfail-guard rollback Remove CopyFail Guard's modprobe mitigation
copyfail-guard seccomp-docker [FILE] Generate emergency AF_ALG-deny profile
copyfail-guard seccomp-patch BASE OUT Patch existing seccomp profile safely
copyfail-guard k8s-example Print Kubernetes seccomp example
Las banderas se pueden colocar antes o después del comando:
--dry-run Show planned changes without writing files or unloading modules
--yes Non-interactive confirmation
--no-logo Disable ASCII banner
--json Emit JSON for supported commands: assess, doctor
En configuraciones típicas, no se espera que deshabilitar algif_aead afecte a:
Puede afectar a aplicaciones configuradas explícitamente para usar el motor AF_ALG o a aplicaciones que crean sockets AF_ALG directamente. Comprueba primero:
sudo lsof | grep AF_ALG || true
ss -xa | grep -i alg || true
algif_aead modular, endurecimiento seccomp para cargas de trabajo no confiables y rollback.CopyFail Guard no:
La mitigación del módulo del host funciona para algif_aead modular. Si algif_aead está integrado en tu kernel, modprobe.d y rmmod no pueden deshabilitarlo; el parche/reinicio es obligatorio y se debe usar seccomp para las cargas de trabajo no confiables mientras se parchea.
Seccomp protege solo las cargas de trabajo lanzadas con el perfil. Los contenedores o pods existentes en ejecución deben reiniciarse con el perfil endurecido.
sudo ./bin/copyfail-guard.sh rollback --yes
El rollback elimina solo el archivo gestionado por esta herramienta. No vuelve a cargar el módulo. Reinicia o ejecuta manualmente modprobe algif_aead solo si lo necesitas explícitamente y has aceptado el riesgo o has parcheado el kernel.
No. El parche y el reinicio siguen siendo la solución final.
No. El proyecto evita intencionalmente los comportamientos de explotación. tools/afalg-socket-test.py solo comprueba si la creación de sockets AF_ALG es accesible.
Defensa en profundidad. Las cargas de trabajo de contenedores y CI son lugares habituales donde se ejecuta código no confiable sobre un kernel compartido. Seccomp hace que el primer paso de esta clase de ataque sea inalcanzable para esa carga de trabajo.
Porque los perfiles predeterminados del runtime contienen muchas decisiones de endurecimiento. Reemplazarlos con un perfil de emergencia mínimo puede eliminar protecciones accidentalmente. seccomp-patch conserva tu configuración base y añade la denegación de AF_ALG.
Sí. Comienza con doctor y assess --json, prueba la mitigación en una pequeña muestra de Linux y luego despliega la mitigación del host y los cambios de perfiles seccomp por separado. Consulta la Guía de despliegue en flota.
Creado por Julio César Suástegui Calderón.
Ingeniería de seguridad, sistemas Linux y automatización defensiva práctica.
MIT