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

Vulnerabilidad en kernel de Linux (CVE-2022-48892)

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-415 Doble liberación
Fecha de publicación:
21/08/2024
Última modificación:
29/08/2024

Descripción

En el kernel de Linux, se resolvió la siguiente vulnerabilidad: sched/core: corrige el error de use-after-free en dup_user_cpus_ptr() Desde el commit 07ec77a1d4e8 ("sched: permitir que la afinidad de la CPU de la tarea se restrinja en sistemas asimétricos"), la configuración y La limpieza de user_cpus_ptr se realiza en pi_lock para la arquitectura arm64. Sin embargo, dup_user_cpus_ptr() accede a user_cpus_ptr sin ninguna protección de bloqueo. Dado que sched_setaffinity() puede invocarse desde otro proceso, el proceso que se está modificando puede estar pasando por fork() al mismo tiempo. Cuando se corre con la limpieza de user_cpus_ptr en __set_cpus_allowed_ptr_locked(), puede llevar a una liberación posterior del usuario y posiblemente a una liberación doble en el kernel arm64. El commit 8f9ea86fdf99 ("programación: conservar siempre la máscara de CPU solicitada por el usuario") soluciona este problema ya que user_cpus_ptr, una vez configurado, nunca se borrará durante la vida de una tarea. Sin embargo, este error se reintrodujo en el commit 851a723e45d1 ("sched: borrar siempre user_cpus_ptr en do_set_cpus_allowed()") que permite borrar user_cpus_ptr en do_set_cpus_allowed(). Esta vez afectará a todos los arcos. Corrija este error borrando siempre el user_cpus_ptr de la tarea recién clonada/bifurcada antes de que comience el proceso de copia y verifique el estado de user_cpus_ptr de la tarea fuente en pi_lock. Nota para las versiones estables: este parche no se aplicará a las versiones estables. Simplemente copie la nueva función dup_user_cpus_ptr().

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.15 (incluyendo) 5.15.89 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (incluyendo) 6.1.7 (excluyendo)