
eBPF LSM program que bloqueia a criação de sockets AF_ALG para mitigar o CVE-2026-31431, com daemon em userspace registrando tentativas negadas via ring buffer.
Programa BPF LSM que bloqueia a criação de sockets AF_ALG (API de criptografia do kernel Linux) e registra todas as tentativas via um ring buffer para o espaço do usuário.
lsm/socket_createsocket(AF_ALG, ...) com -EPERMProgramas
deny_af_alg.bpf.c - lógica principal de bloqueio, trabalho no bpf (espaço do kernel)deny_af_alg.user.c - programa no espaço do usuário
Systemd
deny-af-alg.service - serviço principal, contém o aplicativo no espaço do usuário e o programa bpfdeny-af-alg-bpf.service - serviço legado, funciona via bpftool, não contém registro de logsEste programa eBPF aborda o CVE-2026-31431. Ele resolve a vulnerabilidade restringindo o acesso ao socket de criptografia
É necessário bpf no lsm
#cat /sys/kernel/security/lsm
lockdown,capability,yama,selinux,bpf
Nota sobre
vmlinux.h:vmlinux.hgerado na máquina de compilação.
Se você estiver visando um kernel diferente, regenere-o na máquina de destino antes de compilar:
bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h
Compile via makefile
make
Os artefatos de compilação são colocados na raiz do projeto:
| Arquivo | Descrição |
|---|---|
deny_af_alg | Daemon no espaço do usuário |
deny_af_alg.bpf.o | Objeto BPF compilado |
sudo ./deny_af_alg
saída
Listening for AF_ALG socket create attempts... (Ctrl-C to stop)
BLOCKED pid=12345 comm=python3
Copie o arquivo deny-af-alg.service e o binário para a máquina de destino.
Execute via systemd
systemctl start deny-af-alg.service
bpftool prog loadall deny_af_alg.bpf.o /sys/fs/bpf/deny_af_alg autoattach
Preparação
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
deny_af_alg.skel.h | Cabeçalho de esqueleto BPF gerado |
vmlinux.h | Cabeçalhos linux gerados via btf |