Katalog CVE

CVE-2026-89739

Niskie ryzyko· EPSS 10%
Opublikowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.20%

Percentyl 10 - wyżej niż 10% wszystkich znanych CVE

Streszczenie

W jądrze Linux występuje podatność use-after-free w sterowniku USB dwc3 (tryb gadget). Funkcja dwc3_gadget_free_endpoints zwalnia pamięć struktury dep, podczas gdy zakolejkowana praca opóźniona nostream_work może nadal być w trakcie wykonywania i odwoływać się do zwolnionej pamięci. Problem rozwiązano poprzez anulowanie pracy opóźnionej przed zwolnieniem pamięci.

Ocena ryzyka

Podatność może prowadzić do uszkodzenia pamięci jądra, awarii systemu (panic) lub potencjalnego wykonania dowolnego kodu z uprawnieniami jądra. Ryzyko występuje przy odłączaniu urządzenia USB w trybie gadget, szczególnie w środowiskach z dynamicznie podłączanymi urządzeniami.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę anulującą pracę opóźnioną przed zwolnieniem pamięci w dwc3_gadget_free_endpoints. Jeśli aktualizacja nie jest możliwa, ogranicz możliwość odłączania urządzeń USB gadget przez nieuprzywilejowanych użytkowników.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

In the Linux kernel, the following vulnerability has been resolved: usb: dwc3: gadget: Fix use-after-free in dwc3_gadget_free_endpoints due to race condition In dwc3_gadget_init_endpoint, &dep->nostream_work is bound with dwc3_nostream_work, and dwc3_gadget_endpoint_stream_event can queue this delayed work on system_percpu_wq when a DEPEVT_STREAM_NOSTREAM event is received. If we remove the gadget, dwc3_gadget_free_endpoints makes cleanup and the memory allocated for dep with kzalloc() is released by kfree(dep), while the delayed work mentioned above may still be pending or running. The sequence of operations that may lead to a UAF bug is as follows: CPU0 CPU1 | dwc3_thread_interrupt | dwc3_endpoint_interrupt | dwc3_gadget_endpoint_stream_event | queue_delayed_work(system_percpu_wq, | &dep->nostream_work) dwc3_gadget_free_endpoints | dwc3_free_trb_pool(dep) | list_del(&dep->endpoint.ep_list) | dwc3_debugfs_remove_endpoint_dir(dep) | kfree(dep) | // dep is freed | | dwc3_nostream_work | // use dep (use-after-free) Fix it by canceling the delayed work before kfree(dep) in dwc3_gadget_free_endpoints.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS