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

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

Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-415 Doble liberación
Fecha de publicación:
26/02/2025
Última modificación:
01/10/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: mac80211: arregla una posible doble liberación al unirse a la malla Si bien el commit 6a01afcf8468 ("mac80211: mesh: Free ie data when leaving mesh") corrigió una pérdida de memoria al salir/desmontar la malla, introdujo una posible corrupción de memoria causada por una doble liberación al volver a unirse a la malla: ieee80211_leave_mesh() -> kfree(sdata->u.mesh.ie); ... ieee80211_join_mesh() -> copy_mesh_setup() -> old_ie = ifmsh->ie; -> kfree(old_ie); Esta doble liberación/kernel panics se puede reproducir usando wpa_supplicant con una malla cifrada (si se configura sin cifrado a través de "iw", entonces ifmsh->ie siempre es NULL, lo que evita este problema). Y luego llamar a: $ iw dev mesh0 mesh leave $ iw dev mesh0 mesh join my-mesh Tenga en cuenta que normalmente estos comandos no se usan/funcionan cuando se usa wpa_supplicant. Y parece que wpa_supplicant o wpa_cli están pasando por un ciclo NETDEV_DOWN/NETDEV_UP entre un mesh leave y un mesh join donde NETDEV_UP restablece mesh.ie a NULL a través de un memcpy de default_mesh_setup en cfg80211_netdev_notifier_call, que luego también evita la corrupción de memoria. El problema se observó por primera vez en una aplicación que no usaba wpa_supplicant sino "Senf", que implementa sus propias llamadas a nl80211. Se solucionó el problema eliminando el kfree()'ing del IE de malla en la función de unión de malla y dejando únicamente en manos del mesh leave la liberación del IE de malla.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.4.233 (incluyendo) 4.5 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.9.233 (incluyendo) 4.9.309 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.14.192 (incluyendo) 4.14.274 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.19.137 (incluyendo) 4.19.237 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.4.56 (incluyendo) 5.4.188 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.7.13 (incluyendo) 5.10.109 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (incluyendo) 5.15.32 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (incluyendo) 5.16.18 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.17 (incluyendo) 5.17.1 (excluyendo)