CVE-2026-90200
NieznaneStreszczenie
W jądrze Linux w funkcji ntfs_init_from_boot() sterownika fs/ntfs3 występuje przepełnienie liczb całkowitych podczas walidacji numerów klastrów MFT z sektora rozruchowego. Mnożenie mlcn * sct_per_clst wykonywane w typie u64 może się przekręcić dla dużych wartości mlcn, co pozwala ominąć sprawdzenie rozmiaru wolumenu i zaakceptować zniekształcony rekord. W praktyce prowadzi to do nieudanego montowania systemu plików NTFS w nietypowych miejscach.
Ocena ryzyka
Podatność może być wykorzystana przez lokalnego użytkownika do wywołania odmowy usługi (nieudane montowanie) poprzez dostarczenie spreparowanego obrazu lub nośnika NTFS. Obecnie nie prowadzi to do wykonania kodu ani eskalacji uprawnień, ponieważ odczyty są blokowane na niższej warstwie, ale błędna walidacja stanowi ryzyko w przyszłości.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę, która używa check_mul_overflow() do wykrywania przepełnienia przy obliczaniu pozycji sektorów MFT. Do czasu aktualizacji unikaj montowania niezaufanych obrazów i nośników NTFS.
Inne podatności w Linux kernel (fs/ntfs3)
Zobacz wszystkie- CVE-2026-89779Krytyczne
W jądrze Linux w fs/ntfs3 funkcja ntfs_read_ea() nie sprawdza, czy pole ef->size rekordu EA jest wystarczająco duże, aby pomieścić nazwę i wartość rekordu. Złośliwy obraz NTFS może ustawić małe ef->size przy dużym elength, co powoduje odczyt poza zaalokowanym buforem i wyciek pamięci jądra do przestrzeni użytkownika przez getxattr().
- CVE-2026-97438Wysokie
W jądrze Linux w module fs/ntfs3 wykryto lukę polegającą na braku walidacji rozmiaru klucza (key_size) w wpisach indeksu katalogu NTFS. Złośliwie spreparowany wpis indeksu może zadeklarować key_size większy niż rzeczywisty rozmiar danych, co prowadzi do odczytu poza zaalokowanym buforem (slab-out-of-bounds) w funkcji cmp_fnames().
- CVE-2026-89782Wysokie
W jądrze Linux w module fs/ntfs3 wykryto podatność polegającą na braku walidacji rozmiaru tablicy restartu podczas odtwarzania $LogFile. Podczas montowania spreparowanego obrazu NTFS liczba wpisów przekraczająca U16_MAX jest obcinana, co prowadzi do alokacji zbyt małej tablicy i dostępu poza jej granicami (out-of-bounds).
- CVE-2026-89617Wysokie
W jądrze Linux sterownik fs/ntfs3 nie waliduje tablicy dirty page table podczas odtwarzania dziennika. Podrobiony wpis DIR_PAGE_ENTRY z nieprawidłowym polem lcns_follow pozwala na wyjście poza wpis podczas konwersji v0->v1 i późniejszego odtwarzania.
- CVE-2026-89616Wysokie
W jądrze Linux funkcja ni_read_frame() w fs/ntfs3 ufa wartości zwracanej przez decompress_lznt(), która może być mniejsza niż rozmiar ramki. Niezapisane bajty pozostają w stronach vmapped i są zwracane do użytkownika, ujawniając niezainicjalizowaną pamięć jądra.
- CVE-2026-89615Wysokie
W jądrze Linux pętle copy_lcns i redo shorten w fs/ntfs3 indeksują page_lcns[] na podstawie liczby lcns_follow z rekordu dziennika, która nie jest sprawdzana względem docelowego wpisu. Spreparowany rekord może przepełnić page_lcns[] prawidłowego wpisu.
- CVE-2026-45864Średnie
W jądrze Linux w systemie plików NTFS3 wykryto podatność na zapętlenie nieskończone podczas przetwarzania zakresu [valid : pos). Jeśli wartość valid nie może zostać poprawnie odczytana i pozostaje taka sama, może dojść do blokady procesu (hung), co potwierdzono raportem syzbot. Dodano sprawdzenie, czy valid nie zmienia się w pętli, a w przypadku braku zmiany zwracany jest błąd -EINVAL.
- CVE-2025-71311Wysokie
W jądrze Linux w systemie plików NTFS3 wykryto podatność polegającą na użyciu niezainicjowanych folio. Nowo alokowane folio nie są oznaczane jako aktualne, a funkcja ni_read_frame() jest pomijana, gdy oczekuje się całkowitego nadpisania ramki, co prowadzi do pozostawienia części pamięci niezainicjowanej.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: fs/ntfs3: fix integer overflow in MFT cluster validation In ntfs_init_from_boot(), the boot sector's MFT cluster numbers are validated against the volume size with: if (mlcn * sct_per_clst >= sectors || mlcn2 * sct_per_clst >= sectors) goto out; mlcn and mlcn2 are u64 fields read directly from the boot sector. sct_per_clst is bounded above by 4096 (true_sectors_per_clst() plus the is_power_of_2() check below it), but the multiplication is done in u64 and wraps when mlcn (or mlcn2) is large enough -- e.g. mlcn near 2^62 with sct_per_clst == 4 wraps to 0, which compares below any non-zero 'sectors', so the check is bypassed and the malformed record is accepted. The accepted mlcn is then used unchanged in sbi->mft.lbo = mlcn << cluster_bits; In practice the resulting reads fail at the block layer (sb_bread() returns NULL via grow_buffers()'s check_mul_overflow() guard), so today this manifests as mount failing in odd places rather than as something more dangerous, but the validation step is still wrong and there is no reason for callers to rely on the block layer to catch a value that should never have been accepted in the first place. Use check_mul_overflow() to compute the two sector positions and fail the mount if either multiplication wraps; this preserves the existing semantics (mlcn * sct_per_clst >= sectors) instead of switching to division (mlcn >= sectors / sct_per_clst), which would tighten the check at edge cases where 'sectors' is not a multiple of sct_per_clst. The check_*_overflow() style is the one ntfs3 already uses for similar on-disk arithmetic in fs/ntfs3/run.c.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

