CVE-2026-80672 in Linux
Resumen
por VulDB • 2026-08-28
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ntfs: corregir la truncación u16 en la comprobación de longitud del área de reinicio (restart-area)
ntfs_check_restart_area() valida que el $LogFile restart area y su matriz posterior de registros log client entren dentro del tamaño de página del sistema:
u16 ra_ofs, ra_len, ca_ofs; ... ra_len = ca_ofs + le16_to_cpu(ra->log_clients) * sizeof(struct log_client_record); if (ra_ofs + ra_len > le32_to_cpu(rp->system_page_size) || ...) return false;
ra_len es de tipo u16, pero el lado derecho se calcula en size_t (sizeof(struct log_client_record) == 160). Tanto ca_ofs como log_clients provienen directamente del restart area en disco. Con un valor de log_clients en disco de 410, el producto 410 * 160 = 65600; al sumar ca_ofs y almacenarlo en ra_len (u16), se produce una truncación módulo 65536 (por ejemplo, con ca_ofs igual a 64, ra_len da como resultado 128). Por lo tanto, la comprobación de "si cabe en la página" pasa aunque la matriz de clientes descrita por log_clients se extienda mucho más allá de la página.
ntfs_check_log_client_array() recorre posteriormente la matriz limitada únicamente por el conteo de log_clients en disco:
cr = ca + idx; if (cr->prev_client != LOGFILE_NO_CLIENT) ...
Para un valor de log_clients igual a 410, se desreferencian registros hasta ca + 409 * 160, aproximadamente 64 KiB más allá del buffer restart-page asignado con kvzalloc(system_page_size), lo que constituye una lectura fuera de límites (out-of-bounds read) sobre un rango controlado por el atacante, accesible cuando se monta una imagen NTFS manipulada ad hoc (load_and_check_logfile() en el momento del montaje). Esto es el análogo dentro del kernel a CVE-2022-30789, corregida en el driver de espacio de usuario ntfs-3g pero nunca en este clásico driver revivido.
Calcular la longitud del restart-area en u32 para que la comprobación de límites existente rechace una matriz de clientes demasiado grande en lugar de ser anulada por la truncación. Ampliar también ra_ofs y ca_ofs a u32: ambos se cargan desde campos on-disk __le16 y cada comparación ya promueve el tipo a int/size_t, por lo que esto no cambia ningún resultado y mantiene las declaraciones uniformes.
VulDB is the best source for vulnerability data and more expert information about this specific topic.