
Utilidad para Linux que verifica la disponibilidad de `AF_ALG`/`algif_aead` y ayuda a evaluar el riesgo por `CVE-2026-31431`.
Utilidad de diagnóstico para Linux que comprueba:
AF_ALG / algif_aead y ayuda a evaluar el riesgo de CVE-2026-31431 (copy-fail);xfrm-ESP Page-Cache Write + RxRPC Page-Cache Write) por componentes esp4, esp6, rxrpc e imprime la mitigación.La herramienta está destinada a la verificación defensiva y no es un exploit.
socket + bindAF_ALG AEAD/proc/modules, modules.builtin, modules.builtin.modinfo;rpm/Debian changelog);AF_ALG (/proc/*/fd, best effort);Adicionalmente para Dirty Frag:
esp4, esp6, rxrpc (loaded / built-in / unknown);socket(AF_NETLINK, NETLINK_XFRM) y socket(AF_RXRPC) sin modificar la configuración del sistema;1.24+;/proc/*/fd es mejor ejecutarlo como root.El entrypoint se encuentra en la raíz del proyecto, la compilación se realiza desde la raíz:
go build -o itsumma-afalg-check .
./itsumma-afalg-check
Al iniciar:
Itsumma Security Check — AF_ALG / CVE-2026-31431
Después:
AF_ALG (socket + bind);modules.builtin;af_alg y algif_aead (loaded / built-in / unknown);CVE-2026-31431 (incluyendo el intento de determinar el backport del vendor);AF_ALG (si se encuentran);cat /proc/cmdline
echo 3 | sudo tee /proc/sys/vm/drop_caches
modprobe -n -v algif_aead
lsmod | grep '^algif_aead\b' || echo 'algif_aead not loaded'
./itsumma-afalg-check
Para el escenario built-in, en lugar de modprobe/lsmod es útil verificar adicionalmente:
dmesg | grep -i 'algif_aead\|initcall_blacklist'
Comando del runbook público de Dirty Frag (desactiva la carga de esp4, esp6, rxrpc e intenta descargar los módulos ya cargados).
Si se usa IPSec / XFRM (por ejemplo, a través de strongSwan), antes de descargar los módulos se recomienda realizar un flush:
sudo ip xfrm state flush
sudo ip xfrm policy flush
echo 3 | sudo tee /proc/sys/vm/drop_caches
Si esp4/esp6/rxrpc están compilados como built-in (visibles solo en modules.builtin), modprobe blacklist y rmmod no los desactivarán: en este caso se requiere una actualización/recompilación del kernel.
Para strongSwan, después de instalar libcharon-extra-plugins, active kernel-libipsec:
sudo sed -i 's/^\s*load\s*=\s*no/load = yes/' /etc/strongswan.d/charon/kernel-libipsec.conf
sudo systemctl restart strongswan || sudo systemctl restart strongswan-starter
lsmod | egrep '^(esp4|esp6|rxrpc)\b' || echo 'esp4/esp6/rxrpc not loaded'
sudo modprobe esp4 esp6 rxrpc || true
sudo modprobe -r esp6 rxrpc
sudo modprobe -r esp4 || true
sudo rmmod -f esp4
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp6 rxrpc 2>/dev/null; rmmod -f esp4 2>/dev/null; true"
Post-verificación:
modprobe -n -v esp4 esp6 rxrpc
lsmod | egrep '^(esp4|esp6|rxrpc)\b' || echo 'esp4/esp6/rxrpc not loaded'
./itsumma-afalg-check
algif_aead significa superficie de ataque, pero la conclusión final depende de la versión del kernel y de los parches backport de la distribución.AF_ALG AEAD no pasa, en el marco de esta verificación el vector se considera no disponible.