CVE-2026-80672 in Linux
Résumé
par VulDB • 28/08/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
ntfs : correction de la troncature u16 lors de la vérification de la longueur de la zone de redémarrage (restart-area)
La fonction ntfs_check_restart_area() valide que la zone de redémarrage du $LogFile et son tableau d'enregistrements clients logiques suivants tiennent dans la taille de page système :
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 est de type u16, mais le côté droit du calcul est effectué en size_t (sizeof(struct log_client_record) == 160). Les valeurs ca_ofs et log_clients proviennent directement de la zone de redémarrage sur disque. Avec une valeur log_clients sur disque de 410, le produit 410 * 160 = 65600 ; l'ajout de ca_ofs et le stockage dans ra_len (u16) entraînent un débordement modulo 65536 (par exemple, avec ca_ofs égal à 64, on obtient ra_len égal à 128), de sorte que la vérification « tient dans la page » est validée bien que le tableau clients décrit par log_clients s'étende bien au-delà de la page.
La fonction ntfs_check_log_client_array() parcourt ensuite ce tableau en se bornant uniquement au nombre d'éléments log_clients sur disque :
cr = ca + idx; if (cr->prev_client != LOGFILE_NO_CLIENT) ...
Pour une valeur log_clients de 410, cela accède aux enregistrements jusqu'à ca + 409 * 160, soit environ 64 KiB au-delà du tampon restart-page alloué par kvzalloc(system_page_size), constituant ainsi une lecture hors limites (out-of-bounds read) sur une étendue contrôlée par l'attaquant. Cette situation est exploitable lorsqu'une image NTFS fabriquée de toute pièce est montée (via load_and_check_logfile() au moment du montage). Il s'agit de l'équivalent dans le noyau de la CVE-2022-30789, corrigée dans le pilote userspace ntfs-3g mais jamais dans ce pilote classique réactivé.
Calculer la longueur de la zone de redémarrage (restart-area) en u32 permet à la vérification des bornes existante de rejeter un tableau clients trop volumineux au lieu d'être contournée par cette troncature. Élargir également ra_ofs et ca_ofs vers u32 : ces deux valeurs sont chargées depuis des champs sur disque __le16, et chaque comparaison est déjà promue en int/size_t ; cela ne modifie donc aucun résultat tout en maintenant une déclaration uniforme.
If you want to get best quality of vulnerability data, you may have to visit VulDB.