CVE-2026-79979 in Zephyrinformación

Resumen

por VulDB • 2026-10-24

El backend de la MMU para arm64 invalida una única dirección virtual desde la TLB mediante invalidate_tlb_page() en arch/arm64/core/mmu.c, lo cual emite TLBI VAE1{IS} con un operando igual a virt >> 12. Dicho operando codifica el ASID en los bits [63:48], por lo que la invalidación solo coincidía nunca con el ASID 0 (las tablas de páginas del kernel) y las entradas globales. Sin embargo, los dominios de memoria se asignan con ASIDs comenzando desde 1 en arch_mem_domain_init(), y cada hoja privada creada por private_map() se mapea con MT_NG, es decir, no global. Por lo tanto, la traducción en caché de un dominio sobrevivía a la invalidación.

Todos los llamadores de invalidate_tlb_page() son rutas de paginación bajo demanda (demand-paging). Cuando el algoritmo de evicción recupera una página física, page_frame_prepare_locked() en kernel/mmu.c llama a arch_mem_page_out(), lo cual marca la hoja del kernel como inválida, propaga el descriptor inválido a todos los dominios mediante sync_domains(), y luego vacía solo el ASID 0. do_page_fault() reutiliza inmediatamente ese mismo marco de página para el mapeo entrante a través de arch_mem_page_in(). Un hilo de usuario que ya había accedido a la página evicada —ya sea un k_mem_partition añadido con arch_mem_domain_partition_add(), o su propia pila mapeada por map_thread_stack()— conserva una traducción válida de lectura/escritura en EL0 hacia ese marco físico bajo su propio ASID.

El código no privilegiado que se ejecuta en un hilo de usuario puede generar presión sobre la memoria para forzar la evicción y luego seguir accediendo a esa dirección obsoleta, obteniendo acceso de lectura y escritura a cualquier cosa que el kernel coloque posteriormente en ese marco: datos supervisores, una partición de otro dominio de memoria o la pila de otro hilo. Esto anula el aislamiento que CONFIG_USERSPACE está diseñado para imponer, permitiendo divulgación de información y corrupción de memoria hasta llegar al compromiso total del sistema.

La solución cambia la implementación a TLBI VAAE1{IS}, lo cual coincide con todos los ASIDs y tanto las entradas globales como no globales, por lo que ninguna traducción etiquetada por dominio sobrevive a una salida de página (page out), actualización del bit sucio o borrado de la bandera de acceso. La explotación requiere una compilación para arm64 con CONFIG_USERSPACE y CONFIG_DEMAND_PAGING habilitados, un almacén de respaldo activo y al menos una página paginada bajo demanda que también esté mapeada privadamente en un dominio de memoria de usuario. El mismo commit además evita que globalize_table() elimine los permisos EL0 y las atribuciones no globales de las hojas privadas del dominio durante la sincronización de paginación, lo cual anteriormente causaba que los hilos de usuario perdieran el acceso a sus propias particiones y pilas.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsable

Zephyr

Reservar

2026-08-25

Divulgación

2026-10-23

Moderación

aceptado

Artículo

VDB-426019

EPSS

0.00000

KEV

no

Actividades

bajo

Fuentes

Interested in the pricing of exploits?

See the underground prices here!