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

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

Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
23/02/2024
Última modificación:
03/11/2025

Descripción

En el kernel de Linux, se resolvió la siguiente vulnerabilidad: net: dsa: corrige la desreferencia de netdev_priv() antes de verificar los eventos de dispositivos de red que no son DSA Después del compromiso culpable, comenzamos a hacer esta desreferencia para cada evento NETDEV_CHANGEUPPER y NETDEV_PRECHANGEUPPER en el sistema. estructura estática en línea dsa_port *dsa_user_to_port(const struct net_device *dev) { struct dsa_user_priv *p = netdev_priv(dev); devolver p->dp; } Lo cual es obviamente falso, porque no todos los net_devices tienen un netdev_priv() de tipo struct dsa_user_priv. Pero la estructura dsa_user_priv es bastante pequeña, y p->dp significa desreferenciar 8 bytes comenzando con el desplazamiento 16. La mayoría de los controladores asignan esa cantidad de memoria privada de todos modos, lo que hace que nuestro acceso no sea un error, y descartamos los datos falsos rápidamente después, por lo que esto no fue así. atrapó. Pero la interfaz ficticia es algo especial porque llama a alloc_netdev() con un tamaño privado de 0. Por lo tanto, cada desreferencia de netdev_priv() no es válida, y obtenemos esto cuando emitimos un evento NETDEV_PRECHANGEUPPER con una VLAN como nueva superior: $ ip enlace agregar dummy1 tipo dummy $ ip enlace agregar enlace dummy1 nombre dummy1.100 tipo vlan id 100 [43.309174] ============================= ======================================= [43.316456] ERROR: KASAN: losa fuera de -bounds en dsa_user_prechangeupper+0x30/0xe8 [ 43.323835] Lectura de tamaño 8 en addr ffff3f86481d2990 por tarea ip/374 [ 43.330058] [ 43.342436] Rastreo de llamadas: [ 43.366542] dsa_user_prechangeupper+0x30/0xe8 [ 43.371024] dsa_user_netdevice_event+0xb38/0xee8 [ 43.375768 ] notifier_call_chain+0xa4/0x210 [ 43.379985] raw_notifier_call_chain+0x24/0x38 [ 43.384464] __netdev_upper_dev_link+0x3ec/0x5d8 [ 43.389120] netdev_upper_dev_link+0x70/0xa8 [ 43.3 93424] registrar_vlan_dev+0x1bc/0x310 [ 43.397554] vlan_newlink+0x210/0x248 [ 43.401247] rtnl_newlink +0x9fc/0xe30 [ 43.404942] rtnetlink_rcv_msg+0x378/0x580 Evite los errores del kernel desreferenciando después de la verificación de tipo, como es habitual.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.1.0 (incluyendo) 6.7.2 (excluyendo)