CVE-2026-74700
WysokieCVSS 7.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 2 - wyżej niż 2% wszystkich znanych CVE
Streszczenie
W jądrze Linux wykryto podatność w mechanizmie filtrów sieciowych (net/sched). Problem dotyczy wyścigu (race condition) podczas tworzenia filtrów, który może doprowadzić do użycia po zwolnieniu pamięci (UAF) w klasie cls_u32. Naprawa polega na zawsze pobieraniu blokady rtnl_lock podczas niszczenia klasyfikatorów zablokowanych.
Ocena ryzyka
Atakujący z lokalnym dostępem może wykorzystać wyścig do wywołania naruszenia pamięci, co może prowadzić do awarii systemu lub eskalacji uprawnień. Podatność dotyczy domyślnego stosu sieciowego jądra.
Rekomendacja
Zaleca się natychmiastowe zastosowanie oficjalnej łatki jądra Linux zawierającej poprawkę dla CVE-2026-74700. Należy zrestartować system po aktualizacji, aby zmiany zostały załadowane.
Inne podatności w Linux kernel
Zobacz wszystkie- CVE-2026-99259Nieznane
W jądrze Linux w sterowniku soc/tegra: pmc występuje problem z niezainicjalizowaną zmienną early_pmc->rate dla starszych 32-bitowych urządzeń Tegra. Zmienna nigdy nie jest ustawiana i pozostaje równa 0, co powoduje wyzwalanie ostrzeżenia w funkcji tegra_pmc_enter_suspend_mode(). Błąd pojawił się po zmianie sterownika PMC na dynamiczne tworzenie kontekstu, gdzie zaktualizowano rate tylko w nowym kontekście.
- CVE-2026-99258Nieznane
W jądrze Linux funkcja hv_apicid_to_vp_index() używa per-CPU stron wejściowych i wyjściowych hiperwywołań. W maszynie wirtualnej SEV-SNP CoCo bez paravisora strona wyjściowa nie jest alokowana, więc hipervisor zapisuje wynikowy indeks VP do niezaalokowanej pamięci gościa. Poprawka polega na użyciu tej samej strony wejściowej również jako wyjściowej.
- CVE-2026-99257Nieznane
W jądrze Linux mechanizm współdzielonych GPIO oparty na tablicach wyszukiwania platformy wymaga powiązanego struct device. Wywołanie wyszukiwania oparte na fwnode bez powiązanego urządzenia powoduje dereferencję wskaźnika NULL. Poprawka dodaje sprawdzenie, które pozwala jąderu łagodnie obsłużyć tę sytuację błędem.
- CVE-2026-99256Nieznane
W jądrze Linux moduł dm cache używał rw_semaphore do blokady background_work_lock, mimo że blokady zapisu rw_semaphore mają ścisłą semantykę właściciela. Proces blokujący nie zawsze był tym samym, który zwalniał blokadę, co przy CONFIG_DEBUG_RWSEMS wyzwalało ostrzeżenie podczas suspend/resume urządzenia cache. Poprawka zastępuje rw_semaphore spinlockiem i kolejką oczekujących.
- CVE-2026-99251Nieznane
W jądrze Linux funkcja init_vp_index() zawiera pętlę ponawiania, która usuwa CPU z danego węzła NUMA, jeśli są już w alokowanej masce cpumask lub poza maską housekeeping HK_TYPE_MANAGED_IRQ. Jeśli maska housekeeping nie zawiera żadnego CPU w danym węźle, pętla staje się nieskończona. Poprawka pomija węzły NUMA bez CPU housekeeping i wcześniej przerywa działanie, gdy brak jest online CPU housekeeping.
- CVE-2026-99250Nieznane
W jądrze Linux wątki jądra (kthreads) NBCON odpowiedzialne za drukowanie konsoli są uruchamiane bardzo wcześnie przez early_initcall(). Asynchroniczne włączanie i wyłączanie przerwań podczas wczesnego rozruchu może zakłócać konfigurację SMP na niektórych platformach sprzętowych, powodując zawieszanie się systemu. Poprawka opóźnia uruchomienie tych wątków do momentu zakończenia wszystkich arch initcalli.
- CVE-2026-99249Nieznane
W jądrze Linux funkcja zap_pid_ns_processes() oczekująca na zwolnienie PID-ów w przestrzeni nazw nie była przerywalna przez mechanizm zamrażania (freezer). Gdy tracer spoza przestrzeni nazw nie odbiera zombie, oczekiwanie nie ma górnej granicy, a każda próba zawieszenia systemu kończy się niepowodzeniem. Poprawka wprowadza stany TASK_FREEZABLE w pętlach oczekiwania, aby freezer mógł zamrozić zadania.
- CVE-2026-99248Nieznane
W jądrze Linux w sterowniku i2c: xiic przywrócono ręczne zarządzanie runtime PM zamiast wersji opartej na devres, aby naprawić lawinę ostrzeżeń clk. Zarządzane zwalnianie zasobów wyłączało runtime PM w niewłaściwej kolejności, co powodowało podwójne wyłączenie zegara i ostrzeżenia "clkN already disabled" przy każdym usuwaniu urządzenia.
- CVE-2026-99247Nieznane
W jądrze Linux, jeśli alokacja bufora śledzenia nie powiedzie się podczas wczesnego rozruchu, tracing_disabled pozostaje ustawione, a lista zdarzeń globalnego trace array pozostaje niezainicjalizowana. Funkcja tracer_init_tracefs_work_func() uruchamiana asynchronicznie nie sprawdza tego stanu i wywołuje event_trace_init() oraz init_tracer_tracefs(), co prowadzi do dereferencji NULL i Oops podczas rozruchu. Poprawka sprawdza tracing_disabled na początku funkcji roboczej.
- CVE-2026-99215Nieznane
W jądrze Linux w podsystemie power supply występuje luka use-after-free. Jeśli zasilacz zostanie wyrejestrowany (power_supply_unregister) w trakcie wykonywania callbacku external_power_changed(), sterownik może zwolnić dane, do których callback nadal próbuje uzyskać dostęp, co prowadzi do awarii jądra (NULL pointer dereference).
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: net/sched: cls_api: Always acquire rtnl_lock when destroying locked classifiers Another challenge with unlocked filters. There is a short window in tc_new_tfilter where a tcf_proto can be found and briefly referenced by a totally unrelated, unlocked classifier's request and cause a race. Feng created a poc which created this race with two threads, one creating a u32 filter and other a flower filter in the same chain/prio: 1. Both threads enter tc_new_tfilter, both find the chain empty, both drop filter_chain_lock 2. u32 finishes tcf_proto_create("u32") first, calls tcf_chain_tp_insert_unique() -> inserts u32_tp into the chain 3. flower finishes tcf_proto_create("flower") later, calls tcf_chain_tp_insert_unique() -> tcf_chain_tp_find() now sees u32_tp already there, takes a reference on it, destroys flower's own tp_new and returns u32_tp to the caller. Flower then hits the kind mismatch check (because it requested for kind "flower" but tp->ops->kind is "u32") and goes through the errout path which calls tcf_proto_put() on u32_tp. If the u32 thread has already gone through its own errout (its change() call failed on the PoC's empty options) and dropped its create and insert refs, flower's put is the last one and drops u32_tp's refcnt to zero. At this point tp->ops->destroy() runs in a context that never took rtnl_lock. When that happens, it might cause a UAF like the following (illustrated by the PoC): [ +0.000710] BUG: KASAN: slab-use-after-free in u32_init (net/sched/cls_u32.c:393) [ +0.000281] Read of size 8 at addr ffff888120022f00 by task poc_feng_xue/524 Call Trace: u32_init (net/sched/cls_u32.c:393) tc_new_tfilter (net/sched/cls_api.c:2378) Allocated by task 526: u32_init (net/sched/cls_u32.c:378) tc_new_tfilter (net/sched/cls_api.c:2378) Freed by task 522: kfree u32_destroy (net/sched/cls_u32.c:662) tcf_proto_destroy (net/sched/cls_api.c:446) tcf_proto_put (net/sched/cls_api.c:459) tc_new_tfilter (net/sched/cls_api.c:2459) Fix this by having tcf_proto_destroy() take rtnl_lock around tp->ops->destroy() for locked classifiers whenever rtnl is not held. To explain why I used a temp variable "not_lockless" I'd like to point to a semi-related note on rtnl_held vs TCF_PROTO_OPS_DOIT_UNLOCKED (adding here for future cleanup if deemed necessary): The rtnl_held parameter and the TCF_PROTO_OPS_DOIT_UNLOCKED flag are redundant sources of truth for whether rtnl_lock is held. Among the nine classifier destroy(..rtnl_held..) callbacks, only flower consults the rtnl_held parameter which it propagates to tc_setup_cb_destroy() and tc_setup_cb_call(). The other eight (u32, flow, bpf, cgroup, route, basic, fw, mall) ignore it entirely;-> those that call tc_setup_cb_destroy() (u32, bpf, mall) hardcode true always instead of forwarding the parameter. A future cleanup should remove the rtnl_held parameter from the destroy callback signature entirely and have callers rely solely on their knowledge whether they are running in an unlocked context.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

