Wysoki Odebrany

CVE-2026-18413

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

>_ Opis

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

Interfejs API ADC wymaga, aby każdy sterownik odrzucił sekwencję próbkowania, której bufor docelowy jest za mały: pole bufora_rozmiaru struktury adc_sequence w dokumentach include/zephyr/drivers/adc.h informuje, że „sterownik musi upewnić się, że próbki nie zostaną zapisane poza limitem i musi zwrócić błąd, jeśli bufor okaże się niewystarczająco duży”. Kierowca NXP MCUX LPADC nie dotrzymał tego kontraktu. Funkcja mcux_lpadc_start_read() w sterownikach/adc/adc_mcux_lpadc.c w ogóle nie sprawdzała rozmiaru bufora przed przypisaniem danych->bufor = sekwencja->bufor. Każda ukończona konwersja przechowuje następnie jedną 16-bitową próbkę na włączony kanał na rundę próbkowania poprzez nieograniczone *data->buffer++: w mcux_lpadc_isr() dla kompilacji sterowanych przerwaniami i w mcux_lpadc_dma_callback() dla kompilacji sterowanych DMA w wydaniach, które mają ścieżkę DMA. Na przykład sekwencja wybierająca dwa kanały z dwubajtowym buforem ma drugą próbkę zapisaną za końcem bufora.

W kompilacji z CONFIG_USERSPACE adc_read() i adc_read_async() są wywołaniami systemowymi. Procedura obsługi w sterownikach/adc/adc_handlers.c kopiuje sekwencję z pamięci użytkownika, sprawdza jedynie, czy [bufor, bufor + rozmiar_bufora) jest zapisywalny przez wywołujący wątek i odrzuca opcje dostarczone przez użytkownika->callback; celowo pozostawia arytmetykę rozmiaru kierowcy. Wątek trybu użytkownika, któremu przyznano dostęp do obiektu urządzenia LPADC, w pełni kontroluje zatem kanały, bufor, rozmiar_bufora i opcje->dodatkowe_próbki i może zażądać znacznie większej liczby próbek, niż może pomieścić jego bufor: do kanałów * 65536 próbek w dwubajtowym buforze, ponieważ wskaźnik próbki jest przewijany tylko przy powtarzającym się próbkowaniu, nigdy przy dodatkowych próbkach sekwencji.

Powstałe zapisy są wykonywane przez sterownik w trybie jądra (w obsłudze przerwań ADC lub wywołaniu zwrotnym zakończenia DMA), gdzie MPU nie ogranicza domeny pamięci wątku, więc zapis przechodzi liniowo z partycji użytkownika do sąsiedniej pamięci, takiej jak inne partycje, dane jądra lub stosy wątków. Skutkiem jest uszkodzenie pamięci jądra o wybranej przez atakującego długości z wybranym przez atakującego przesunięciem, prawdopodobna eskalacja uprawnień i prymitywna metoda odmowy usługi z nieuprzywilejowanego wątku trybu użytkownika. Na kompilacje bez CONFIG_USERSPACE wpływa jedynie defekt niezawodności po stronie wywołującego, ponieważ sama aplikacja dostarcza bufor.

Poprawka wywołuje nową współdzieloną funkcję pomocniczą adc_sequence_validate_buffer() w sterownikach/adc/adc_common.c z mcux_lpadc_start_read(). Pomocnik oblicza aktywny_kanał sizeof(uint16_t) (1 + dodatkowe_próbki) i zwraca -ENOMEM przed rozpoczęciem jakiegokolwiek próbkowania.

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