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

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

Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
20/05/2024
Última modificación:
04/04/2025

Descripción

En el kernel de Linux, se resolvió la siguiente vulnerabilidad: ipv6: corrige la condición de ejecución entre ipv6_get_ifaddr e ipv6_del_addr .Aunque ipv6_get_ifaddr recorre inet6_addr_lst bajo el bloqueo de RCU, todavía significa que hlist_for_each_entry_rcu puede devolver un elemento que se eliminó de la lista. La memoria en sí de dicho elemento no se libera gracias a RCU, pero nada garantiza que el contenido real de la memoria sea sano. En particular, el recuento de referencia puede ser cero. Esto puede suceder si se llama a ipv6_del_addr en paralelo. ipv6_del_addr elimina la entrada de inet6_addr_lst (hlist_del_init_rcu(&ifp->addr_lst)) y elimina todas las referencias (__in6_ifa_put(ifp) + in6_ifa_put(ifp)). En un momento bastante malo, esto puede suceder: 1. En ipv6_get_ifaddr, hlist_for_each_entry_rcu devuelve una entrada. 2. Luego, se ejecuta todo el ipv6_del_addr para la entrada dada. El recuento de referencias cae a cero y se programa kfree_rcu. 3. ipv6_get_ifaddr continúa e intenta incrementar el recuento de referencias (in6_ifa_hold). 4. Se desbloquea la rcu y se libera la entrada. 5. Se devuelve la entrada liberada. Evite el aumento del recuento de referencia en tal caso. El nombre in6_ifa_hold_safe se elige para imitar el fib6_info_hold_safe existente. [41.506330] refcount_t: suma en 0; uso después de la liberación. [ 41.506760] ADVERTENCIA: CPU: 0 PID: 595 en lib/refcount.c:25 refcount_warn_saturate+0xa5/0x130 [ 41.507413] Módulos vinculados en: veth bridge stp llc [ 41.507821] CPU: 0 PID: 595 Comm: python3 No contaminado 6.9 .0-rc2.main-00208-g49563be82afa #14 [ 41.508479] Nombre del hardware: PC estándar QEMU (i440FX + PIIX, 1996) [ 41.509163] RIP: 0010:refcount_warn_saturate+0xa5/0x130 [ 41.509586] Código: ad ff 90 0f 0b 90 90 c3 cc cc cc 80 3d c0 30 ad 01 00 75 a0 c6 05 b7 30 ad 01 01 90 48 c7 c7 38 cc 7a 8c e8 cc 18 ad ff 90 <0f> 0b 90 90 c3 cc cc cc 80 3d 98 30 ad 01 00 0f 85 75 ff ff ff [ 41.510956] RSP: 0018:ffffbda3c026baf0 EFLAGS: 00010282 [ 41.511368] RAX: 0000000000000000 RBX: 800 RCX: 0000000000000000 [ 41.511910] RDX: ffff9e9c7ec29c00 RSI: ffff9e9c7ec1c900 RDI: ffff9e9c7ec1c900 [ 41.512445] RBP : ffff9e9c43660c9c R08: 0000000000009ffb R09: 00000000ffffdfff [ 41.512998] R10: 00000000ffffdfff R11: fffffff8ca58a40 R12: ffff9e9c4339a000 [ 41 .513534] R13: 0000000000000001 R14: ffff9e9c438a0000 R15: ffffbda3c026bb48 [ 41.514086] FS: 00007fbc4cda1740(0000) GS:ffff9e9c7ec00000(0000) lGS:0000000000000000 [ 41.514726] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 41.515176] CR2: 000056233b337d88 CR3: 000000000376e006 CR4: 0000000000370ef 0 [ 41.515713] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 41.516252] DR3: 00000000000000000 DR6: 00000000ffe0ff0 DR7 : 0000000000000400 [ 41.516799] Seguimiento de llamadas: [ 41.517037] [ 41.517249] ? __warn+0x7b/0x120 [ 41.517535] ? refcount_warn_saturate+0xa5/0x130 [41.517923]? report_bug+0x164/0x190 [41.518240]? handle_bug+0x3d/0x70 [41.518541]? exc_invalid_op+0x17/0x70 [41.520972]? asm_exc_invalid_op+0x1a/0x20 [41.521325]? refcount_warn_saturate+0xa5/0x130 [ 41.521708] ipv6_get_ifaddr+0xda/0xe0 [ 41.522035] inet6_rtm_getaddr+0x342/0x3f0 [ 41.522376] ? __pfx_inet6_rtm_getaddr+0x10/0x10 [ 41.522758] rtnetlink_rcv_msg+0x334/0x3d0 [ 41.523102] ? netlink_unicast+0x30f/0x390 [41.523445]? __pfx_rtnetlink_rcv_msg+0x10/0x10 [ 41.523832] netlink_rcv_skb+0x53/0x100 [ 41.524157] netlink_unicast+0x23b/0x390 [ 41.524484] netlink_sendmsg+0x1f2/0x440 [ 41. 524826] __sys_sendto+0x1d8/0x1f0 [ 41.525145] __x64_sys_sendto+0x1f/0x30 [ 41.525467] do_syscall_64+ 0xa5/0x1b0 [41.525794] Entry_SYSCALL_64_after_hwframe+0x72/0x7a [41.526213] RIP: 0033:0x7fbc4cfcea9a [41.526528] Código: d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3 0f 1e fa 41 89 ca 64 8b 04 25 18 00 00 00 85 c0 75 15 b8 2c 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 7e c3 0f 1f 44 00 00 41 54 48 83 ec 30 44 89 [ 41.527942] 002b:00007f-- -truncado---

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 2.6.35 (incluyendo) 4.19.313 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.20 (incluyendo) 5.4.275 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.5 (incluyendo) 5.10.216 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 (incluyendo) 5.15.156 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 (incluyendo) 6.1.87 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 (incluyendo) 6.6.28 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (incluyendo) 6.8.7 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.9:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.9:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:6.9:rc3:*:*:*:*:*:*
cpe:2.3:o:debian:debian_linux:10.0:*:*:*:*:*:*:*