BookinglyTech News
Ciberseguridad

CVE-2025-39964: una carrera en AF_ALG del kernel Linux da root a cualquier usuario

La vulnerabilidad, hallada por un investigador de STAR Labs, permitía pasar de usuario normal a root y escapar de un contenedor Docker; Google pagó 113.337 dólares por el exploit.

2 min de lecturaLobsters0 vistas

Muhammad Alifa Ramdhan encontró en septiembre de 2025 una vulnerabilidad en AF_ALG, el subsistema criptográfico del kernel Linux, que permite a un usuario sin privilegios convertirse en root. La falla, registrada como CVE-2025-39964, también sirve para escapar de un contenedor Docker y alcanzar root en el host. Google le pagó 113.337 dólares por la demostración dentro de kernelCTF, su programa de recompensas por exploits de escalada local contra el kernel estable.

El trabajo lo firma desde STAR Labs junto a su colega Bing-Jhong Billy Jheng, que completó la cadena de explotación. El código afectado llevaba en el kernel desde alrededor de 2011 y se reportó de forma responsable a los mantenedores.

No es Copy Fail

AF_ALG ya había saltado a los titulares por Copy Fail, divulgado en 2026 y reconocido junto a DirtyFrag como mejor bug de escalada de privilegios en los Pwnie Awards de ese año. El de ahora es otro fallo. Copy Fail es un error de lógica en el camino AEAD; CVE-2025-39964 es una carrera entre escritores que comparten un mismo socket AF_ALG. Ramdhan la encontró revisando el código fuente, antes de que Copy Fail se hiciera público.

Cómo se llega al fallo

Lo que llamó la atención del investigador es que AF_ALG se alcanza desde espacio de usuario sin privilegios a través de la API de sockets, sin configuración especial. Con socket(2) se obtiene el descriptor, con bind(2) se elige el algoritmo —por ejemplo cbc(aes)—, con setsockopt() se fija la clave y con accept() llega otro descriptor listo para operar. Las operaciones van por sendmsg() y recvmsg().

El detalle importa: sendmsg() no cifra nada de inmediato. El kernel acumula los datos del usuario en una lista scatter-gather de TX y solo cuando llega recvmsg() crea la petición criptográfica y procesa lo recibido. Ahí, al manejar la entrada, se produce un acceso fuera de límites que se puede convertir en escalada a root. La bandera MSG_MORE permite encadenar envíos y posponer el cierre de la entrada, y es donde vive la carrera.

El análisis está hecho sobre el kernel v6.12.44, con el código de crypto/af_alg.c, crypto/algif_skcipher.c e include/crypto/if_alg.h. La PoC está publicada en el repositorio de security-research de Google.

Que un fallo así lleve desde 2011 en el kernel y se alcance sin privilegios explica por qué kernelCTF paga lo que paga. Un LPE contra el kernel estable es la pieza más cara de cualquier cadena: no hace falta un bug remoto ni un fallo de aplicación, solo acceso local a la máquina. Y con contenedores de por medio, el mismo camino sirve para salir del aislamiento y quedarse con el host.