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

CVE-2024-56555

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-125 Lectura fuera de límites
Fecha de publicación:
27/12/2024
Última modificación:
01/10/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: binder: corrección de OOB en binder_add_freeze_work() En binder_add_freeze_work() iteramos sobre proc->nodes con el proc->inner_lock retenido. Sin embargo, este bloqueo se elimina temporalmente para adquirir primero el node->lock (orden de anidación de bloqueos). Esto puede competir con binder_deferred_release() que elimina los nodos del proc->nodes rbtree y los agrega a la lista binder_dead_nodes. Esto genera una iteración rota en binder_add_freeze_work() ya que rb_next() usará datos de binder_dead_nodes, lo que activa un acceso fuera de los límites: ====================================================================== ERROR: KASAN: global fuera de los límites en rb_next+0xfc/0x124 Lectura de tamaño 8 en la dirección ffffcb84285f7170 por la tarea freeze/660 CPU: 8 UID: 0 PID: 660 Comm: freeze No contaminado 6.11.0-07343-ga727812a8d45 #18 Nombre del hardware: linux,dummy-virt (DT) Rastreo de llamadas: rb_next+0xfc/0x124 binder_add_freeze_work+0x344/0x534 binder_ioctl+0x1e70/0x25ac __arm64_sys_ioctl+0x124/0x190 La dirección con errores pertenece a la variable: binder_dead_nodes+0x10/0x40 [...] =================================================================== Esto es posible porque proc->nodes (rbtree) y binder_dead_nodes (lista) comparten entradas en binder_node a través de una unión: struct binder_node { [...] union { struct rb_node rb_node; struct hlist_node dead_node; }; Corrija la ejecución comprobando que el procedimiento sigue activo. Si no es así, simplemente salga de la iteración.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.12 (incluyendo) 6.12.4 (excluyendo)