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

Vulnerabilidad en kernel de Linux (CVE-2023-52879)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-476 Desreferencia a puntero nulo (NULL)
Fecha de publicación:
21/05/2024
Última modificación:
03/02/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: rastreo: Tener trace_event_file tiene contadores de referencia. Lo siguiente puede bloquear el kernel: # cd /sys/kernel/tracing # echo 'p:sched Schedule' > kprobe_events # exec 5>>events /kprobes/sched/enable # > kprobe_events # exec 5>&- Los comandos anteriores: 1. Cambie el directorio al directorio tracefs 2. Cree un evento kprobe (no importa cuál) 3. Abra el descriptor de archivo bash 5 en el habilitar el archivo del evento kprobe 4. Eliminar el evento kprobe (también elimina los archivos) 5. Cerrar el descriptor del archivo bash 5 ¡Lo anterior provoca un bloqueo! BUG: desreferencia del puntero NULL del kernel, dirección: 0000000000000028 #PF: acceso de lectura del supervisor en modo kernel #PF: código_error(0x0000) - página no presente PGD 0 P4D 0 Ups: 0000 [#1] PREEMPT SMP PTI CPU: 6 PID: 877 Comm: bash Not tainted 6.5.0-rc4-test-00008-g2c6b6b1029d4-dirty #186 Nombre del hardware: PC estándar QEMU (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01 /2014 RIP: 0010:tracing_release_file_tr+0xc/0x50. Lo que sucede aquí es que el evento kprobe crea un descriptor de "archivo" trace_event_file que representa el archivo en tracefs hasta el evento. Mantiene el estado del evento (¿está habilitado para la instancia dada?). Al abrir el archivo "habilitar" se obtiene una referencia al descriptor de "archivo" del evento a través del descriptor de archivo abierto. Cuando se elimina el evento kprobe, el archivo también se elimina del sistema tracefs, lo que también libera el descriptor de "archivo" del evento. Pero como el espacio del usuario todavía abre el archivo tracefs, no se eliminará por completo hasta que se llame al dput() final. Pero esto no es cierto con el descriptor de "archivo" de evento que ya está liberado. Si el usuario escribe o simplemente cierra el descriptor de archivo, hará referencia al descriptor de "archivo" del evento que acaba de liberarse, lo que provocará un error de uso después de la liberación. Para resolver esto, agregue un recuento de referencias al descriptor de "archivo" del evento, así como una nueva bandera llamada "FREED". El "archivo" no se liberará hasta que se publique la última referencia. Pero el indicador FREE se establecerá cuando se elimine el evento para evitar que se realicen más modificaciones en ese evento, incluso si todavía hay una referencia al descriptor de "archivo" del evento.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.4.258 (incluyendo) 5.4.262 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.10.198 (incluyendo) 5.10.202 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.15.134 (incluyendo) 5.15.140 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.1.55 (incluyendo) 6.1.64 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.5.5 (incluyendo) 6.5.13 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.6 (incluyendo) 6.6.1 (excluyendo)