CVE-2026-98173
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 24 - wyżej niż 24% wszystkich znanych CVE
Streszczenie
W kliencie SMB jądra Linux funkcja cifs_try_adding_channels() przechowuje wskaźnik do następnego interfejsu (niface) poza blokadą iface_lock, zwalniając ją na czas cifs_ses_add_channel(). Równoległe odświeżenie interfejsów może zwolnić ten wpis listy, co prowadzi do użycia po zwolnieniu pamięci (use-after-free) przy odczycie pól iface->rdma_capable/is_active oraz niface->iface_head.next.
Ocena ryzyka
Podatność use-after-free w jądrze może prowadzić do uszkodzenia pamięci, awarii systemu (panic jądra) lub potencjalnie do eskalacji uprawnień przez lokalnego atakującego. Dotyczy systemów wykorzystujących klienta CIFS/SMB z wieloma kanałami i odświeżaniem interfejsów.
Rekomendacja
Zaktualizować jądro Linux do wersji zawierającej poprawkę, która ponownie skanuje listę interfejsów pod blokadą i pobiera referencję kref na wybranym kandydacie przed przekazaniem go do cifs_ses_add_channel().
Inne podatności w Linux kernel
Zobacz wszystkie- CVE-2026-99087Nieznane
W jądrze Linux w dm-integrity występuje błąd, który powoduje dereferencję wskaźnika NULL, gdy urządzenie ma ustawioną flagę SB_FLAG_DIRTY_BITMAP i jest aktywowane w trybie 'R'. Funkcja dm_integrity_resume próbuje odczytać dziennik zawierający bitmapę, co prowadzi do awarii. Poprawka pomija zapisy do urządzenia w trybie 'R' podczas wznawiania.
- CVE-2026-99086Nieznane
W jądrze Linux dm-integrity nie waliduje superbloku podczas wznawiania urządzenia, co pozwala użytkownikowi zmodyfikować superblok na nośniku podczas zawieszenia urządzenia. Może to prowadzić do niezgodności rozmiarów struktur w pamięci i zapisu poza dziennik, w tym zapisu 512 bajtów przez wskaźnik NULL. Poprawka zapisuje zwalidowany superblok w konstruktorze i odmawia wznowienia, jeśli geometria na dysku uległa zmianie.
- CVE-2026-99085Nieznane
W jądrze Linux naprawiono błąd w schedulerze sched_ext, który powodował zawieszenie przy wyłączaniu CPU, gdy zadania wygasającego procesora pozostawały w kolejce BPF schedulera. Zadania te były nadal liczone w runqueue, ale nieaktywny CPU nie wywoływał ops.dispatch() i nie mógł ich przejąć, co blokowało wątek hotplug i cpu_down() trzymający cpu_hotplug_lock. Poprawka ponownie kolejkuje zadania z offline'owanego rq na lokalny DSQ, aby balance_push() mógł je przenieść.
- CVE-2026-99084Nieznane
W jądrze Linux naprawiono problem w iterate_dir(), gdzie blokada i_rwsem katalogu była trzymana podczas odczytu katalogu, nawet jeśli katalog jest niezmienny i nigdy nie jest usuwany. Dla katalogu instancji nullfs (współdzielonego przez wiele przestrzeni nazw montowania i wątków jądra) złośliwy czytelnik mógł zablokować tę blokadę na dowolnie długo, blokując operacje mkdir, wyszukiwania i montowania dla innych użytkowników. Dodano flagę FOP_IMMUTABLE, która pozwala pominąć blokadę dla takich katalogów.
- CVE-2026-99083Nieznane
W jądrze Linux serwer ksmbd ma błąd zapisu poza granice sterty w funkcji krb5_authenticate(). Gdy SMB2_SESSION_SETUP jest przetwarzane jako niepierwszy element złożonego żądania SMB2, obliczenie out_len pomija work->next_smb2_rsp_hdr_off, co zawyża dostępne miejsce w buforze i pozwala memcpy() zapisać blob AP-REP poza response_buf. Poprawka odejmuje tę wartość przy obliczaniu out_len.
- CVE-2026-99082Nieznane
W jądrze Linux naprawiono błąd w KVM na architekturze x86 dotyczący pamięci podręcznej MMIO dla poszczególnych vCPU. Cache był oznaczany generacją memslotów, ale zarówno przy wypełnianiu, jak i walidacji używano kvm_memslots() wybierającego bezwarunkowo przestrzeń adresową 0, nawet gdy vCPU działał w trybie SMM i korzystał z przestrzeni adresowej 1. W rezultacie aktualizacja memslotów SMM mogła pozostawić pozornie ważny wpis z dawnej przestrzeni SMM po powrocie vCPU do normalnej przestrzeni adresowej, co pozwalało gościowi wymusić wyjście KVM_EXIT_MMIO dla prawidłowego RAM.
- CVE-2026-99080Nieznane
W jądrze Linux w funkcji clear_inode() występuje wyciek węzłów xarray, który można wywołać m.in. przez madvise. Zamiast naprawiać wycieki w miejscach ich powstawania, poprawka wywołuje xa_destroy(), co dodatkowo cyklicznie zwalnia i pobiera blokadę i_pages.
- CVE-2026-99079Nieznane
W jądrze Linux sterownik net/mlx5e może zwolnić nieaktualny bufor XSK podczas ponownej próby uzupełnienia w legacy cyclic RQ. Gdy uzupełnienie powiedzie się tylko częściowo, WQE bez zamiennika zachowuje stary wskaźnik do bufora, który może zostać przydzielony innemu WQE, co prowadzi do zwolnienia aktywnego bufora i podwójnego opublikowania tej samej ramki UMEM. Poprawka oznacza WQE jako zwolniony natychmiast po zwolnieniu po stronie sterownika.
- CVE-2026-99078Nieznane
W jądrze Linux sterownik net/mlx5e może zwolnić nieaktualny bufor XSK podczas ponownej próby uzupełnienia MPWQE w striding RQ. Gdy alokacja XSK zwróci -ENOMEM, actual_wq_head nie jest przesuwany, a późniejsza próba NAPI może ponownie wywołać xsk_buff_free() przez nieaktualne wskaźniki po zwróceniu ramek do puli XSK. Poprawka ustawia wszystkie bity skip_release_bitmap w ścieżce błędu mlx5e_xsk_alloc_rx_mpwqe().
- CVE-2026-99077Nieznane
W jądrze Linux naprawiono podatność w obsłudze protokołu IPv4/UDP, która pozwalała atakującemu spoza ścieżki na przeprowadzenie ataku side-channel na cache wyjątków FIB (FNHE). Poprzednio wyjątek był tworzony tylko wtedy, gdy pakiet UDP można było dopasować do istniejącego gniazda, co umożliwiało odkrycie efemerycznego portu używanego przez połączone gniazdo UDP. Poprawka polega na zawsze tworzeniu FNHE przed próbą dopasowania gniazda.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: smb: client: fix use-after-free of iface in cifs_try_adding_channels() cifs_try_adding_channels() iterates ses->iface_list with list_for_each_entry_safe_from(), which captures the next entry (niface) under iface_lock. The loop body then drops iface_lock for the whole duration of cifs_ses_add_channel(). A concurrent interface refresh (SMB3_request_interfaces() -> parse_server_interfaces()) marks all ifaces inactive and removes and frees any that are not re-advertised via list_del() + kref_put(), where release_iface() is a bare kfree(). Since niface typically has no channel holding a reference, the list reference is its last and it can be freed inside the unlocked window. On continue, the iterator advance step then dereferences niface->iface_head.next, and the loop body reads iface->rdma_capable/is_active, both on freed memory. Fix this by never keeping an unreferenced list pointer across the unlocked window. Each channel attempt now re-scans the list from the head under iface_lock, takes a kref on the selected candidate, and passes only that referenced candidate to cifs_ses_add_channel(). weight_fulfilled still tracks selection progress, so restarting the scan preserves the original weighted distribution and the weight_fulfilled-before-kref_put ordering on the failure path. Add a per-pass attempts cap so a flapping interface refresh cannot keep the inner loop spinning within a single tries increment.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

