Wysoki Oczekuje na analizę

CVE-2026-87039

opublikowano:
modyfikacja:
Ocena CVSS
7.8
Wysoki · v3.1
wektor: CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

Weryfikator wywołania syscall w trybie użytkownika z_vrfy_i2s_configure() w sterownikach/i2s/i2s_handlers.c kopiuje strukturę i2s_config wywołującego z pamięci użytkownika, a następnie, gdy cfg->frame_clk_freq wynosi 0 (żądanie API „zdekonfiguruj strumień”), przeskakuje bezpośrednio do z_impl_i2s_configure() bez wykonywania K_SYSCALL_OBJ(config.mem_slab, K_OBJ_MEM_SLAB) sprawdzenie własności/typu lub sprawdzenie poprawności block_size. Pole mem_slab to struktura k_mem_slab *, więc na tej ścieżce całkowicie niezweryfikowany, wybrany przez użytkownika wskaźnik dociera do kodu sterownika, który jest uprawniony do zaufania mu jako prawdziwemu obiektowi jądra.

Dowolny wątek działający w CONFIG_USERSPACE, który ma dostęp do obiektu urządzenia I2S, może to wywołać pojedynczym wywołaniem i2s_configure(). Większość sterowników wewnątrz drzewa ma specjalny przypadek Frame_clk_freq == 0 i nigdy nie przechowuje struktury wywołującego, ale sterowniki/i2s/i2s_litex.c tego nie robią: i2s_litex_configure() rejestruje tylko ostrzeżenie o niedopasowanym zegarze ramki, następnie memcpy() przesyła konfigurację wywołującego do stream->cfg i zaznacza strumień I2S_STATE_READY. Kolejna i2s_trigger() z I2S_TRIGGER_START włącza przerwanie FIFO, a procedury obsługi przerwań i2s_litex_isr_rx() / i2s_litex_isr_tx() następnie wywołują k_mem_slab_alloc() i k_mem_slab_free() na wskaźniku dostarczonym przez atakującego w kontekście nadzorcy.

Rezultatem jest operacja podstawowa odczytu/zapisu z dowolnym wskaźnikiem wykonywana przez jądro w imieniu nieuprzywilejowanego wątku — k_mem_slab_alloc() pobiera blokadę w pozycji płyta->lock i odczytuje i zapisuje płyta->free_list oraz słowo łącza wewnątrz zwróconego „bloku” — co całkowicie pokonuje granicę izolacji CONFIG_USERSPACE. Ta sama brakująca weryfikacja stanowi zagrożenie dla sterowników I2S spoza drzewa, które zachowują konfigurację w ścieżce dekonfiguracji. Nie ma to wpływu na kompilacje bez CONFIG_USERSPACE, ponieważ weryfikator nie jest używany.

Poprawka zeruje config.mem_slab i config.block_size w ścieżce unconfigure, dzięki czemu sterownik nigdy nie może otrzymać niezatwierdzonego wskaźnika, jednocześnie umożliwiając dekonfigurację strumienia przez obiekt wywołujący, który nie jest właścicielem płyty pamięci, jak dokumentuje API.

>_ 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