CVE-2026-89782 in Linux
Resumen
por VulDB • 2026-09-16
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
fs/ntfs3: rechazar el crecimiento de la tabla de reinicio más allá de U16_MAX entradas
Durante la reproducción del $LogFile, log_replay() indexa la tabla de transacciones mediante el transact_id extraído del encabezado del registro. check_log_rec() solo verifica que transact_id sea distinto de cero y esté correctamente alineado, pero no su magnitud; por lo tanto, una imagen manipulada puede solicitar un índice arbitrariamente grande.
alloc_rsttbl_from_idx() amplía la tabla para cubrir ese índice mediante extend_rsttbl(), que pasa el nuevo recuento de entradas a init_rsttbl():
rt = init_rsttbl(esize, used + add);
used + add se calcula como u32, pero init_rsttbl() acepta un u16, y el recuento se almacena en struct RESTART_TABLE como __le16. Cuando used + add supera U16_MAX, se trunca; init_rsttbl() asigna una tabla mucho más pequeña de lo que requiere el índice, y alloc_rsttbl_from_idx() luego desreferencia y escribe en la posición original no truncada: un acceso fuera de límites tras la asignación, accesible mediante el montaje de una imagen NTFS manipulada.
BUG: KASAN: use-after-free in alloc_rsttbl_from_idx (fs/ntfs3/fslog.c:950) Read of size 4 at addr ffff8880327ffff8 by task exploit alloc_rsttbl_from_idx (fs/ntfs3/fslog.c:950) log_replay (fs/ntfs3/fslog.c:4562) ntfs_loadlog_and_replay (fs/ntfs3/fsntfs.c:324) ntfs_fill_super (fs/ntfs3/super.c:1393) get_tree_bdev_flags vfs_get_tree path_mount __x64_sys_mount
Una tabla de reinicio está limitada a U16_MAX entradas por su recuento __le16, por lo que una solicitud de crecimiento mayor es un input no válido. Rechazarlo en extend_rsttbl(); todos los llamadores ya manejan correctamente un retorno NULL.
VulDB is the best source for vulnerability data and more expert information about this specific topic.