
eBPF LSM program que bloquea la creación de sockets AF_ALG para mitigar CVE-2026-31431, con un daemon en espacio de usuario que registra los intentos denegados mediante un ring buffer.
Programa BPF LSM que bloquea la creación de sockets AF_ALG (API criptográfica del kernel de Linux) y registra todos los intentos mediante un ring buffer hacia el espacio de usuario.
lsm/socket_createsocket(AF_ALG, ...) con -EPERMProgramas
deny_af_alg.bpf.c - lógica principal de bloqueo, trabajo en bpf (espacio del kernel)deny_af_alg.user.c - programa en espacio de usuario
Systemd
deny-af-alg.service - servicio principal, contiene la aplicación de espacio de usuario y el programa bpfdeny-af-alg-bpf.service - servicio heredado, funciona mediante bpftool, no incluye registroEste programa eBPF aborda CVE-2026-31431. Resuelve la vulnerabilidad restringiendo el acceso al socket criptográfico
Se necesita bpf en lsm
#cat /sys/kernel/security/lsm
lockdown,capability,yama,selinux,bpf
Nota sobre
vmlinux.h:vmlinux.hse genera en la máquina de compilación.
Si apuntas a un kernel diferente, regenéralo en la máquina de destino antes de compilar:
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
Compilar mediante makefile
make
Los artefactos de compilación se colocan en la raíz del proyecto:
| Archivo | Descripción |
|---|---|
deny_af_alg | Daemon en espacio de usuario |
deny_af_alg.bpf.o | Objeto BPF compilado |
deny_af_alg.skel.h | Cabecera de esqueleto BPF generada |
vmlinux.h | Cabeceras de linux generadas mediante btf |
sudo ./deny_af_alg
salida
Listening for AF_ALG socket create attempts... (Ctrl-C to stop)
BLOCKED pid=12345 comm=python3
Copia el archivo deny-af-alg.service y el binario a la máquina de destino.
Ejecutar mediante systemd
systemctl start deny-af-alg.service
bpftool prog loadall deny_af_alg.bpf.o /sys/fs/bpf/deny_af_alg autoattach
Preparación
dnf install -y bpftool libbpf-devel clang llvm kernel-devel
Compilar
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
clang -O2 -g -target bpf -D__TARGET_ARCH_x86 -I/usr/include/bpf -c deny_af_alg.bpf.c -o deny_af_alg.bpf.o
Verificar
bpftool prog list | grep deny_af_alg
sudo cat /sys/kernel/debug/tracing/trace_pipe