Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

Vulnerabilidad en kernel de Linux (CVE-2024-39501)

Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
12/07/2024
Última modificación:
10/05/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: drivers: core: sincronizar Actually_probe() y dev_uevent() Sincronizar el uso dev->driver en Actually_probe() y dev_uevent(). Estos pueden ejecutarse en diferentes subprocesos, lo que puede resultar en la siguiente condición de ejecución para dev->desinicialización del controlador: Subproceso n.° 1: ========== reality_probe() { ... probe_failed: ... device_unbind_cleanup( dev) { ... dev->controlador = NULL; // <= La sonda fallida establece dev->driver en NULL ... } ... } Hilo #2: ========== dev_uevent() { ... if (dev->driver) / / Si dev->driver recibe un valor NULL desde reality_probe() de ahora en adelante, // después de la verificación anterior, el sistema falla add_uevent_var(env, "DRIVER=%s", dev->driver->name); ... }realmente_probe() ya tiene el bloqueo. Entonces no es necesario hacer nada allí. A menudo también se llama a dev_uevent() con el bloqueo mantenido. Pero no siempre. Lo que implica que no podemos agregar ningún bloqueo en el propio dev_uevent(). Así que arregle esta ejecución agregando el candado al camino no protegido. Esta es la ruta donde se observa la ejecución anterior: dev_uevent+0x235/0x380 uevent_show+0x10c/0x1f0 <= Agregar bloqueo aquí dev_attr_show+0x3a/0xa0 sysfs_kf_seq_show+0x17c/0x250 kernfs_seq_show+0x7c/0x90 seq_read_iter+0x2d7/ 0x940 kernfs_fop_read_iter+0xc6/0x310 vfs_read+0x5bc/0x6b0 ksys_read+0xeb/0x1b0 __x64_sys_read+0x42/0x50 x64_sys_call+0x27ad/0x2d30 do_syscall_64+0xcd/0x1d0 Entry_SYSCALL_64_after_hwframe+0x77/0x7f Casos similares son reportados por syzkaller en https://syzkaller.appspot.com/bug?extid =ffa8143439596313a85a Pero estos se refieren a la *inicialización* de dev->driver dev->driver = drv; Como esto cambia dev->driver a no NULL, estos informes pueden considerarse falsos positivos (aunque esté commit también debería "solucionarlos"). El mismo problema se informó y se intentó solucionar en 2015 en https://lore.kernel.org/lkml/1421259054-2574-1-git-send-email-a.sangwan@samsung.com/ ya.

Impacto