Vulnerabilidad en kernel de Linux (CVE-2024-56693)
Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-416
Utilización después de liberación
Fecha de publicación:
28/12/2024
Última modificación:
24/03/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: brd: aplazar la creación automática de discos hasta que la inicialización del módulo tenga éxito. Mi colega Wupeng encontró los siguientes problemas durante la inyección de fallas: ERROR: no se puede gestionar la falla de página para la dirección: fffffbfff809d073 PGD 6e648067 P4D 123ec8067 PUD 123ec4067 PMD 100e38067 PTE 0 Oops: Oops: 0000 [#1] PREEMPT SMP KASAN NOPTI CPU: 5 UID: 0 PID: 755 Comm: modprobe No contaminado 6.12.0-rc3+ #17 Nombre del hardware: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.1-2.fc37 04/01/2014 RIP: 0010:__asan_load8+0x4c/0xa0 ... Seguimiento de llamadas: blkdev_put_whole+0x41/0x70 bdev_release+0x1a3/0x250 blkdev_release+0x11/0x20 __fput+0x1d7/0x4a0 task_work_run+0xfc/0x180 syscall_exit_to_user_mode+0x1de/0x1f0 do_syscall_64+0x6b/0x170 entry_SYSCALL_64_after_hwframe+0x76/0x7e loop_init() está llamando a loop_add() después de que __register_blkdev() tenga éxito e ignora el error de disk_add() de loop_add(), ya que el error de loop_add() no es fatal y los discos creados correctamente ya están visibles para bdev_open().brd_init() actualmente está llamando a brd_alloc() antes de que __register_blkdev() tenga éxito y está liberando discos creados exitosamente cuando brd_init() devuelve un error. Esto puede causar UAF para los últimos dos casos: caso 1: T1: modprobe brd brd_init brd_alloc(0) // éxito add_disk disk_scan_partitions bdev_file_open_by_dev // asignar archivo fput // no se liberará hasta que regrese al espacio de usuario brd_alloc(1) // falló debido a un error de asignación de memoria inject // error la ruta para modprobe liberará el segmento de código // de regreso al espacio de usuario __fput blkdev_release bdev_release blkdev_put_whole bdev->bd_disk->fops->release // fops está liberado ahora, ¡UAF! caso 2: T1: T2: modprobe brd brd_init brd_alloc(0) // éxito open(/dev/ram0) brd_alloc(1) // error // ruta de error para modprobe close(/dev/ram0) ... /* UAF! */ bdev->bd_disk->fops->release Solucione este problema siguiendo lo que hace loop_init(). Además, vuelva a introducir brd_devices_mutex para ayudar a serializar las modificaciones a brd_list.
Impacto
Puntuación base 3.x
7.80
Gravedad 3.x
ALTA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.14 (incluyendo) | 5.15.174 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (incluyendo) | 6.1.120 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (incluyendo) | 6.6.64 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.11.11 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.12 (incluyendo) | 6.12.2 (excluyendo) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/259bf925583ec9e3781df778cadf00594095090d
- https://git.kernel.org/stable/c/410896624db639500f24f46478b4bfa05c76bf56
- https://git.kernel.org/stable/c/41219c147df8bbd6591f59af5d695fb6c9a1cbff
- https://git.kernel.org/stable/c/63dfd728b30f79495dacc886127695a379805152
- https://git.kernel.org/stable/c/826cc42adf44930a633d11a5993676d85ddb0842
- https://git.kernel.org/stable/c/c0c2744cd2939ec5999c51dbaf2af16886548b7b