
Detecta y mitiga CVE-2026-31431 (Copy Fail) en Linux mediante el sondeo de la vulnerabilidad AF_ALG y, opcionalmente, bloqueando el módulo afectado.
Detecta y (opcionalmente) mitiga CVE-2026-31431 ("Copy Fail") en un host Linux.
La vulnerabilidad es una primitiva de escritura en la caché de páginas alcanzable a través de la familia de sockets AF_ALG usando la transformación AEAD authencesn(hmac(sha256),cbc(aes)). Este script reproduce la misma primitiva que demostró Theori, pero dirigida a un archivo temporal creado por sí mismo en lugar de un binario setuid, por lo que la prueba en sí no es destructiva.
Si el kernel es vulnerable, el script ofrece aplicar una mitigación: bloquear algif_aead mediante /etc/modprobe.d/disable-algif-aead.conf y descargar el módulo. Aún se requiere una actualización del kernel para una solución completa.
os.splice)uv para ejecutar el script con una versión fija de Pythonsudo / root — necesario para aplicar la mitigación (escribir en /etc/modprobe.d y rmmod); la detección por sí sola se ejecuta sin privilegios, pero el script pregunta interactivamente si se debe parchearsudo $(which uv) run --python 3.10 /path/to/copy_fail_test.py
Se usa $(which uv) para que sudo mantenga el binario uv correcto en PATH.
El script hará lo siguiente:
AF_ALG + authencesn(hmac(sha256),cbc(aes)) es alcanzable.✅ NO VULNERABLE — salida 0🚨 VULNERABLE — solicita aplicar la mitigación y luego vuelve a probar⚠️ NO CONCLUYENTE — salida 2 (p. ej., la llamada splice/sendmsg devolvió un error)Si aceptas la solicitud, el script:
install algif_aead /bin/false en /etc/modprobe.d/disable-algif-aead.conf.rmmod algif_aead.Si el módulo está compilado en el kernel (no cargable), se requiere un reinicio para que la lista negra surta efecto. En cualquier caso, parchea el kernel cuando haya una actualización disponible: la lista negra solo elimina un punto de entrada.
Equivalente manual:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
El paso de detección escribe en un tempfile.NamedTemporaryFile que crea y luego elimina; no se tocan archivos del sistema. El paso de mitigación es la única parte que modifica el host, y solo si lo confirmas en la solicitud.