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

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

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-787 Escritura fuera de límites
Fecha de publicación:
11/09/2024
Última modificación:
13/09/2024

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: mm/vmalloc: se corrige la asignación de páginas si vm_area_alloc_pages() con un retroceso de orden superior al orden 0 __vmap_pages_range_noflush() asume que su argumento pages** contiene páginas con el mismo cambio de página. Sin embargo, desde el commit e9c3cda4d86e ("mm, vmalloc: se corrigen las asignaciones de orden superior __GFP_NOFAIL"), si gfp_flags incluye __GFP_NOFAIL con orden superior en vm_area_alloc_pages() y la asignación de páginas falla para el orden superior, pages** puede contener dos cambios de página diferentes (orden superior y orden 0). Esto podría provocar que __vmap_pages_range_noflush() realice asignaciones incorrectas, lo que podría provocar una corrupción de memoria. Los usuarios pueden encontrarse con esto de la siguiente manera (vmap_allow_huge = true, 2M es para PMD_SIZE): kvmalloc(2M, __GFP_NOFAIL|GFP_X) __vmalloc_node_range_noprof(vm_flags=VM_ALLOW_HUGE_VMAP) vm_area_alloc_pages(order=9) ---> la asignación del pedido 9 falló y se vuelve al pedido 0 vmap_pages_range() vmap_pages_range_noflush() __vmap_pages_range_noflush(page_shift = 21) ----> ocurre una asignación incorrecta Podemos eliminar el código de respaldo porque si falla una asignación de orden alto, __vmalloc_node_range_noprof() volverá a intentarlo con el pedido 0. Por lo tanto, no es necesario volver al pedido 0 aquí. Por lo tanto, solucione esto eliminando el código de respaldo.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.1.95 (incluyendo) 6.1.107 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.3 (incluyendo) 6.6.48 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (incluyendo) 6.10.7 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.11:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.11:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.11:rc3:*:*:*:*:*:*