CVE-2026-89616
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 34 - wyżej niż 34% wszystkich znanych CVE
Streszczenie
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.
Ocena ryzyka
Atakujący może odczytać niezainicjalizowaną pamięć jądra (w tym wskaźniki jądra), co pozwala obejść KASLR i ułatwia dalsze ataki.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę zerującą ogon [unc_size, frame_size) po udanej dekompresji LZNT.
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-90200Niskie ryzyko· EPSS 12%
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.
- 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-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 info-leak on partial LZNT decompress in ni_read_frame() ni_read_frame() decompresses an LZNT $DATA frame into the vmapped target pages and then trusts decompress_lznt()'s return value: unc_size = decompress_lznt(frame_ondisk, ondisk_size, frame_mem, frame_size); if ((ssize_t)unc_size < 0) err = unc_size; else if (!unc_size || unc_size > frame_size) err = -EINVAL; decompress_lznt() stops as soon as the compressed stream is exhausted (e.g. a zero chunk header) and returns the number of bytes it actually wrote, which may be far less than frame_size. The bytes between unc_size and frame_size are never written. The only memset() that follows zeroes the region beyond i_valid; when the frame lies entirely within the file's valid size that memset() does not run, so the gap retains whatever was in the just-vmapped pages. All pages are then marked uptodate and returned to userspace, disclosing uninitialized (recently-freed) kernel page memory. A crafted compressed file whose stream decompresses to only a few bytes leaks the remainder of every frame on a plain read(2), which is enough to recover kernel pointers and defeat KASLR. Zero the [unc_size, frame_size) tail immediately after a successful LZNT decompress so the remainder reads back as zero.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

