Anuncios

Durante 15 años, una vulnerabilidad crítica vivió en el corazón de Linux sin que nadie la detectara. No estaba escondida en un módulo obsoleto ni en una función raramente usada.

Estaba en futex, el sistema de sincronización de hilos que maneja prácticamente cada servidor, contenedor y sistema operativo del mundo. Y la encontró una inteligencia artificial.

Nebula Security, una empresa de ciberseguridad nativa en IA, usó su scanner llamado Vega para detectar CVE-2026-43499, una vulnerabilidad de tipo use-after-free que permite a cualquier usuario local escalar privilegios hasta obtener root. Sin permisos especiales. Sin configuraciones especiales. Sin user namespaces.

Solo necesita que CONFIG_FUTEX_PI esté habilitado, y lo está por defecto en todas las distribuciones principales desde 2011.

El hallazgo, que bautizaron como GhostLock, tiene una puntuación CVSS de 7.8 sobre 10 y una fiabilidad de explotación del 97%. El exploit completo toma aproximadamente 5 segundos en ejecutarse. Google lo reconoció con un pago de $92,337 a través de su programa kernelCTF.

Los investigadores humanos revisaron el código de Linux durante años sin encontrar este error. Vega, el scanner de Nebula Security, lo detectó en uno de sus recorridos automatizados. La vulnerabilidad estaba presente desde Linux 2.6.39, lanzado en mayo de 2011, y fue parcheada en abril de 2026.

La raíz del problema está en la función remove_waiter() del kernel, encargada de limpiar un objeto waiter después de que una tarea deja de esperar. Esta función asume que current (la tarea que se está ejecutando) es siempre la tarea que bloqueó. Pero con la ruta de Requeue-PI, eso no es cierto: rt_mutex_start_proxy_lock() invoca remove_waiter() en nombre de otra tarea.

Anuncios


Cuando la limpieza se ejecuta, limpia el puntero pi_blocked_on de la tarea equivocada, dejando un puntero colgante que un atacante puede explotar para tomar control del kernel.

Nebula Security publicó un exploit completo que encadena varias técnicas: una fuga de ASLR mediante prefetch, la reutilización del stack con PR_SET_MM_MAP, la sobrescritura de inet6_protos para obtener control de flujo, y finalmente una técnica llamada DirtyMode que modifica los bits de permiso de core_pattern para obtener root de forma persistente.

El exploit está documentado en detalle en su blog y el código fuente está disponible en su proyecto CyberMeowfia.

El parche, que ya está disponible en las versiones estables 7.1.3, 6.18.38, 6.12.95, 6.6.144, 6.1.177, 5.15.211 y 5.10.260, modifica remove_waiter() para usar waiter->task en lugar de current, asegurando que se limpie el puntero correcto. La commit 3bfdc63936dd resuelve el problema de raíz.

Este caso ilustra una tendencia creciente en ciberseguridad: la IA ya no solo asiste a los investigadores humanos, sino que está encontrando vulnerabilidades que los humanos no pudieron ver durante décadas. Mientras las comunidades de seguridad debaten sobre el impacto de la IA en el desarrollo de exploits, la realidad es que herramientas como Vega están demostrando ser más efectivas que el análisis manual para detectar errores de ciclo de vida de memoria en código de kernel maduro.

La buena noticia es que el parche ya existe. La mala noticia es que la vulnerabilidad estuvo presente en cada distribución de Linux durante 15 años, y muchos servidores probablemente aún no lo han aplicado.

Fuentes consultadas