
Audita y refuerza sistemas Linux contra la escalada de privilegios local de AF_ALG (CVE-2026-31431) verificando la exposición de la API criptográfica del kernel, restringiendo módulos y proporcionando scripts de restauración.
Esta herramienta implementa Bloqueo Estructural para mitigar CVE-2026-31431 renombrando físicamente los módulos del kernel y purgándolos de la memoria. Antes de usarla, tenga en cuenta los siguientes riesgos arquitectónicos:
/lib/modules/ nuevo, anulando la obstrucción anterior.AF_ALG (API de Criptografía del Kernel) puede romper aplicaciones o servicios específicos que dependen de la aceleración por hardware a nivel de kernel (por ejemplo, VPN especializadas, utilidades de cifrado de disco o herramientas de seguridad personalizadas).[cite: 3]Úselo bajo su propio riesgo. Verifique siempre las funciones críticas de su sistema después de ejecutar solution.sh.[cite: 3]
Un kit de herramientas para descubrir, diagnosticar y contener vectores de EPE (Escalada de Privilegios Local) a través de la API de Criptografía del Kernel de Linux (AF_ALG).
La herramienta utiliza Bloqueo Estructural para abordar CVE-2026-31431 renombrando módulos del kernel y purgándolos de la memoria. Los riesgos arquitectónicos clave incluyen:
/lib/modules/ nuevo, anulando la obstrucción anterior.Úselo bajo su propio riesgo.
Este repositorio proporciona dos scripts que forman un flujo de trabajo de diagnóstico → contención → verificación contra ataques de escalada de privilegios a través de AF_ALG (socket(38, 5, 0)):
check.sh — Auditoría de postura de seguridad multicapa (se ejecuta sin privilegios)solution.sh — Expulsa por la fuerza los módulos AF_ALG de la memoria + comprueba los archivos de módulos físicos (requiere root)restore.sh — Vuelve a cargar los módulos AF_ALG y restaura el sistema al estado anterior a solution.sh (requiere root)./check.sh
sudo ./solution.sh
sudo ./restore.sh
restore.sh revierte los efectos de solution.sh recargando los módulos del kernel AF_ALG (af_alg, algif_rng, algif_aead, algif_skcipher, algif_hash). Si el archivo de módulo físico (af_alg.ko.xz) fue renombrado o eliminado, el script le advertirá y le pedirá una restauración manual antes de intentar cargar los módulos.
Ejecutar solution.sh en un sistema en producción que use activamente AF_ALG (por ejemplo, un sistema con IPsec, dm-crypt/LUKS o cualquier descarga de criptografía por hardware) romperá instantáneamente todas las operaciones criptográficas del kernel. Esto incluye:
algif_*El script fuerza la descarga de los módulos del kernel AF_ALG. Las operaciones criptográficas del kernel fallarán hasta el reinicio. Este script está pensado solo para sistemas aislados, no productivos o desechables con fines de prueba y análisis. No lo ejecute en producción o infraestructura crítica.
check.sh no requiere dependencias más allá de shell POSIX y /proc//syssolution.sh requiere privilegios de rootrestore.sh requiere privilegios de rootaf_alg_block.so requiere privilegios de root para instalarse mediante /etc/ld.so.preloadEsta POC ha sido probada en WSL2. Tenga en cuenta lo siguiente:
wsl --shutdown). Esto incluye los cambios de estado de los módulos del kernel de solution.sh, los renombrados de archivos, los resultados de check.sh y cualquier modificación local de archivos en este repositorio..wslconfig, /etc/wsl.conf o un script de inicio automático (por ejemplo, /etc/rc.local) por separado.Para cerrar definitivamente el vector de ataque AF_ALG:
Poner en lista negra el módulo del kernel (lo más fiable):
echo "blacklist af_alg" | sudo tee /etc/modprobe.d/af_alg-blacklist.conf
O renombrar el archivo físico:
sudo mv /lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz \
/lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz.bak
Deshabilitar AF_ALG mediante sysctl:
sudo sysctl -w net.core.af_alg_disabled=1
Bloquear la creación de sockets AF_ALG mediante política SELinux / AppArmor
Deshabilitar los espacios de nombres de usuario sin privilegios (entornos de contenedores):
sudo sysctl -w kernel.unprivileged_userns_clone=0
Bloquear AF_ALG en la llamada al sistema socket() mediante LD_PRELOAD (workaround para WSL2):
# Instalación en todo el sistema (requiere root)
echo /ruta/absoluta/a/af_alg_block.so | sudo tee -a /etc/ld.so.preload
Se incluye una biblioteca compartida precompilada (af_alg_block.so) en el repositorio. Intercepta y devuelve cuando el dominio es (38). Todas las demás llamadas de socket pasan a la implementación real sin cambios.
MIT
| Comprobación | Qué examina | Severidad |
|---|
| Contexto del Proceso | UID/GID actual y capacidades efectivas | Baja |
| Socket de Criptografía AF_ALG | Accesibilidad de la API de Criptografía del Kernel mediante socket(AF_ALG, ...) | Alta |
| kptr_restrict | Visibilidad de los punteros del kernel para el espacio de usuario | Media |
| dmesg_restrict | Restricción de acceso al búfer circular del kernel | Media |
| SELinux | Estado Enforcing / Permissive / Disabled | Media |
| /proc hidepid | Si /proc oculta la información de otros procesos | Baja |
socket(2)EAFNOSUPPORTAF_ALGEste enfoque está pensado principalmente para WSL2, donde la semántica de usuario único y el comportamiento de restablecimiento al reiniciar hacen práctico el LD_PRELOAD en todo el sistema. En sistemas Linux multiusuario tradicionales, prefiera el método 1 (lista negra de módulos) en su lugar: la inyección mediante /etc/ld.so.preload afecta a todos los procesos del sistema y puede romper silenciosamente los servicios que dependen de AF_ALG.
Nota: Requiere glibc (no musl). /etc/ld.so.preload requiere root para modificarse. La eliminación se realiza borrando la línea correspondiente del archivo.