CVE-2026-19939
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
Warstwa sygnalizacyjna AVDTP uzbraja 6-sekundowy limit czasu polecenia (AVDTP_TIMEOUT) w avdtp_send_cmd() za każdym razem, gdy urządzenie lokalne wysyła żądanie AVDTP. Każda procedura obsługi odpowiedzi w subsys/bluetooth/host/classic/avdtp.c anuluje session->timeout_work przed wyczyszczeniem oczekującego żądania, ale bt_avdtp_l2cap_disconnected() wyczyściła tylko sesję->req i pozostawiła opóźnioną pracę uzbrojoną. Sesja struktury bt_avdtp jest pierwszym elementem struktury bt_a2dp, której instancje znajdują się w statycznej tablicy połączeń, a funkcja a2dp_get_connection() w subsys/bluetooth/host/classic/a2dp.c czyści szczelinę za pomocą memset(), gdy tylko session->br_chan.chan.conn ma wartość NULL — co warstwa L2CAP organizuje natychmiast po rozłączeniu zwrotne.
Zdalny element równorzędny Bluetooth BR/EDR wyzwala ten stan, otwierając kanał sygnalizacyjny AVDTP, umożliwiając lokalnej aplikacji wykonanie procedury AVDTP (standardowy przepływ A2DP wysyła bt_a2dp_discover() z połączonego wywołania zwrotnego), a następnie przerywa kanał sygnalizacyjny bez odpowiedzi i otwierając go ponownie w pozostałym oknie limitu czasu. Ponowne połączenie osiąga a2dp_accept() → a2dp_get_connection(), co zeruje całą strukturę bt_a2dp, podczas gdy struktura _timeout elementu roboczego jest nadal połączona z globalną listą limitów czasu jądra. Zarówno moment rozłączenia, jak i ponownego połączenia są wybierane przez atakującego, więc żaden wyścig nie musi zostać wygrany; wymagane jest szyfrowane łącze BR/EDR i musi być włączone CONFIG_BT_A2DP (eksperymentalne).
Przy domyślnym backendie CONFIG_TIMEOUT_BACKEND_DLIST jądro decyduje, że limit czasu jest nieaktywny, sprawdzając, czy jego węzeł listy jest połączony, więc po wykonaniu memset() jądro traktuje węzeł, który nadal znajduje się na globalnej liście limitów czasu, jako wolny: ścieżka ogłaszania wyświetla węzeł, którego łącza i wskaźnik obsługi mają wartość NULL, a następna funkcja bt_work_reschedule() w odzyskanej sesji ponownie wstawia ten sam węzeł do listy, która już go zawiera. Konsekwencją jest uszkodzenie struktury danych pojedynczego jądra przy każdym liczniku czasu, przedziale czasowym i uśpieniu — zapisuje poprzez zerowane lub nieaktualne wskaźniki list i wysyłanie procedury obsługi NULL — powodując awarię lub zawieszenie całego systemu, a nie błąd ograniczony do sesji A2DP.
Poprawka anuluje session->timeout_work na górze bt_avdtp_l2cap_disconnected() i przenosi k_work_init_delayable() z avdtp_send_cmd() do ścieżek ustanawiania sesji bt_avdtp_connect() i bt_avdtp_l2cap_accept(), więc element pracy jest zawsze inicjowany przed uruchomieniem wywołania zwrotnego rozłączenia.
>_ Słabości (CWE)
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org