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

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

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-416 Utilización después de liberación
Fecha de publicación:
06/01/2025
Última modificación:
11/02/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: btrfs: se corrige el use-after-free cuando se aplica COW a un bloque de árbol y se habilita el seguimiento Cuando se aplica COW a un bloque de árbol, en btrfs_cow_block(), y tenemos habilitado el punto de seguimiento trace_btrfs_cow_block() y también está habilitada la preempción (CONFIG_PREEMPT=y), podemos activar un use-after-free en el búfer de extensión aplicado COW mientras estamos dentro del código del punto de seguimiento. Esto se debe a que en algunas rutas que llaman a btrfs_cow_block(), como btrfs_search_slot(), estamos manteniendo la última referencia en el búfer de extensión @buf, por lo que btrfs_force_cow_block() elimina la última referencia en el búfer de extensión @buf cuando llama a free_extent_buffer_stale(buf), que programa la liberación del búfer de extensión con RCU. Esto significa que si estamos en un núcleo con preempción, la tarea actual puede ser preemptada antes de llamar a trace_btrfs_cow_block() y el buffer de extensión ya liberado para el momento en que se llama a trace_btrfs_cow_block(), lo que da como resultado un use-after-free. Arregle esto moviendo trace_btrfs_cow_block() de btrfs_cow_block() a btrfs_force_cow_block() antes de que se libere el buffer de extensión COWed. Esto también tiene un efecto secundario de invocar el punto de seguimiento en el código de desfragmentación del árbol, en defrag.c:btrfs_realloc_node(), ya que btrfs_force_cow_block() se llama allí, pero esto está bien y en realidad faltaba allí.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.12.8 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.13:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.13:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.13:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.13:rc4:*:*:*:*:*:*