Vulnerabilidad en kernel de Linux (CVE-2024-26670)
Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-787
Escritura fuera de límites
Fecha de publicación:
02/04/2024
Última modificación:
01/10/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: arm64: entrada: arreglar ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD Actualmente, la solución alternativa ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD no es del todo correcta, ya que se supone que debe aplicarse después del último acceso explícito a la memoria, pero va seguida inmediatamente por un LDR. La solución alternativa ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD se utiliza para manejar las erratas Cortex-A520 2966298 y Cortex-A510 erratas 3117295, que se describen en: * https://developer.arm.com/documentation/SDEN2444153/0600/?lang=en * https:// desarrollador.arm.com/documentation/SDEN1873361/1600/?lang=en En ambos casos, la solución se describe como: | Si el aislamiento de la tabla de páginas está deshabilitado, la lógica de cambio de contexto en | El kernel se puede actualizar para ejecutar la siguiente secuencia en los afectados | núcleos antes de salir a EL0 y después de todos los accesos explícitos a la memoria: | | 1. Un TLBI que no se puede compartir en cualquier contexto y/o dirección, incluido | contextos o direcciones no utilizados, como `TLBI VALE1 Xzr`. | | 2. Un OSD NSH para garantizar la finalización del TLBI. La parte importante es que el TLBI+DSB debe colocarse "después de todos los accesos explícitos a la memoria". Desafortunadamente, tal como se implementó, el TLBI+DSB es seguido inmediatamente por un LDR, como tenemos: | Alternative_if ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD | tlbi vale1, xzr | dsb nsh | alternativa_else_nop_endif | alternativa_si_no ARM64_UNMAP_KERNEL_AT_EL0 | ldr lr, [sp, #S_LR] | agregar sp, sp, #PT_REGS_SIZE // restaurar sp | eremita | alternativa_else_nop_endif | | [... Ruta de retorno de excepción KPTI...] Este parche soluciona este problema reelaborando la lógica para colocar TLBI+DSB inmediatamente antes de ERET, después de todos los accesos explícitos a la memoria. El ERET se encuentra actualmente en un bloque alternativo separado y las alternativas no se pueden anidar. Para tener en cuenta esto, el bloque alternativo para ARM64_UNMAP_KERNEL_AT_EL0 se reemplaza con una única rama alternativa para omitir la lógica KPTI, siendo la nueva forma de la lógica: | Alternative_insn "b .L_skip_tramp_exit_\@", nop, ARM64_UNMAP_KERNEL_AT_EL0 | [... Ruta de retorno de excepción KPTI...] | .L_skip_tramp_exit_\@: | | ldr lr, [sp, #S_LR] | agregar sp, sp, #PT_REGS_SIZE // restaurar sp | | Alternative_if ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD | tlbi vale1, xzr | dsb nsh | alternativa_else_nop_endif | eret La nueva estructura significa que la solución alternativa sólo se aplica cuando KPTI no está en uso; esto está bien, como se indica en las implicaciones documentadas de la fe de erratas: | El aislamiento de la tabla de paginación entre EL0 y los EL de nivel superior evita que | que ocurra el problema. ... y según la descripción de la solución citada anteriormente, la solución sólo es necesaria "si el aislamiento de la tabla de páginas está deshabilitado".
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
| CPE | Desde | Hasta |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.6 (incluyendo) | 6.6.15 (excluyendo) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.7.3 (excluyendo) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/58eb5c07f41704464b9acc09ab0707b6769db6c0
- https://git.kernel.org/stable/c/832dd634bd1b4e3bbe9f10b9c9ba5db6f6f2b97f
- https://git.kernel.org/stable/c/baa0aaac16432019651e0d60c41cd34a0c3c3477
- https://git.kernel.org/stable/c/58eb5c07f41704464b9acc09ab0707b6769db6c0
- https://git.kernel.org/stable/c/832dd634bd1b4e3bbe9f10b9c9ba5db6f6f2b97f
- https://git.kernel.org/stable/c/baa0aaac16432019651e0d60c41cd34a0c3c3477



