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

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

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-476 Desreferencia a puntero nulo (NULL)
Fecha de publicación:
21/10/2024
Última modificación:
24/10/2024

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: RISC-V: KVM: No ponga a cero el área de instantáneas de PMU antes de liberar los datos. Con la última versión Linux-6.11-rc3, se observa el siguiente bloqueo del puntero NULL cuando la instantánea de SBI PMU está habilitada para el invitado y el invitado se apaga a la fuerza. No se puede manejar la desreferencia del puntero NULL del núcleo en la dirección virtual 0000000000000508 Ups [#1] Módulos vinculados: kvm CPU: 0 UID: 0 PID: 61 Comm: term-poll No contaminado 6.11.0-rc3-00018-g44d7178dd77a #3 Nombre del hardware: riscv-virtio,qemu (DT) epc : __kvm_write_guest_page+0x94/0xa6 [kvm] ra : __kvm_write_guest_page+0x54/0xa6 [kvm] epc : ffffffff01590e98 ra : ffffffff01590e58 sp : ffff8f80001f39b0 gp : ffffffff81512a60 tp: ffffaf80024872c0 t0: ffffaf800247e000 t1: 00000000000007e0 t2: 00000000000000000 s0: ffff8f80001f39f0 s1: 00007fff89ac40 00 a0: ffffffff015dd7e8 a1: 0000000000000086 a2: 0000000000000000 a3: ffffaf8000000000 a4: ffffaf80024882c0 a5: 0000000000000000 a6: ffffaf800328d780 a7: 00000000000001cc s2: ffffaf800197bd00 s3: 00000000000828c4 s4: ffffaf800248c000 s5: 7d000 s6: 0000000000001000 s7: 0000000000001000 s8: 0000000000000000 s9: 00007fff861fd500 s10: 0000000000000001 s11: 0000000000800000 t3 : 00000000000004d3 t4 : 000000000000004d3 t5 : ffffffff814126e0 t6 : ffffffff81412700 estado: 0000000200000120 dirección incorrecta: 0000000000000508 causa: 000000000000000d [] __kvm_write_guest_page+0x94/0xa6 [kvm] [] kvm_vcpu_write_guest+0x56/0x90 [kvm] [] kvm_pmu_clear_snapshot_area+0x42/0x7e [kvm] [] kvm_riscv_vcpu_pmu_deinit.part.0+0xe0/0x14e [kvm] [] kvm_riscv_vcpu_pmu_deinit+0x1a/0x24 [kvm] [] kvm_arch_vcpu_destroy+0x28/0x4c [kvm] [] kvm_destroy_vcpus+0x5a/0xda [kvm] [] kvm_arch_destroy_vm+0x14/0x28 [kvm] [] kvm_destroy_vm+0x168/0x2a0 [kvm] [] kvm_put_kvm+0x3c/0x58 [kvm] [] kvm_vm_release+0x22/0x2e [kvm] Claramente, la función kvm_vcpu_write_guest() falla porque se la llama desde kvm_pmu_clear_snapshot_area() al desmantelar el invitado. Para solucionar el problema anterior, simplifique kvm_pmu_clear_snapshot_area() para que no ponga a cero el área de instantáneas de PMU de kvm_pmu_clear_snapshot_area() porque, de todos modos, el invitado se está desmantelando. También se llama a kvm_pmu_clear_snapshot_area() cuando el invitado cambia el área de instantáneas de PMU de una VCPU, pero incluso en este caso, el área de instantáneas de PMU anterior no debe ponerse a cero porque el invitado podría haber recuperado el área de instantáneas de PMU anterior para algún otro propósito.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.10 (incluyendo) 6.10.13 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.11 (incluyendo) 6.11.2 (excluyendo)