Wysoki Odebrany

CVE-2026-19184

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

>_ Opis

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

Sterownik NXP GAU ADC (drivers/adc/adc_mcux_gau_adc.c) sprawdził poprawność dostarczonej przez rozmówcę sekwencji->buffer_size, która jest wyrażona w bajtach, względem liczby aktywnych kanałów, która jest liczbą próbek. Następnie zapisał tę liczbę bajtów bezpośrednio w data->results_length i użył jej w mcux_gau_adc_read_samples() jako liczbę dostępnych miejsc uint16_t. Ponieważ każdy wynik konwersji zajmuje sizeof(uint16_t) bajtów, bufor, który został zaakceptowany jako „wystarczająco duży”, mógł zostać zapisany z maksymalnie dwukrotną jego wielkością w bajtach, więc każda próbka przekraczająca punkt środkowy bufora została zapisana poza granicami.

adc_read() i adc_read_async() to wywołania systemowe Zephyr. Weryfikator wywołania systemowego w sterownikach/adc/adc_handlers.c potwierdza jedynie, że obiekt wywołujący posiada zapisywalne bajty bufora_rozmiaru (K_SYSCALL_MEMORY_WRITE); decyzja, czy ten rozmiar jest wystarczający dla żądanych kanałów, a dodatkowe próbkowanie jest całkowicie delegowana do sterownika. W kompilacji z CONFIG_USERSPACE=y wątek trybu użytkownika, któremu przyznano obiekt urządzenia ADC, może zatem celowo przesłać bufor o połowie rozmiaru i spowodować, że procedura obsługi kolejki roboczej sterownika — która działa w trybie nadzorcy, poza ograniczeniami MPU osoby wywołującej — zapisze wyniki konwersji ADC poza końcem tego bufora, pod adresem i długością wybraną przez osobę wywołującą.

Przekroczenie jest ograniczone przez żądaną sekwencję: przy ustawionej sekwencji->opcje->dodatkowe próbki pętla próbkowania przesuwa wskaźnik bufora do przodu przy każdym próbkowaniu, więc całkowite przekroczenie może osiągnąć pełny rozmiar dostarczonego bufora (kilobajty w przypadku dużych dodatkowych_próbek). Zapisane słowa to 16-bitowe wyniki konwersji ADC, więc atakujący tylko częściowo ma wpływ na treść (poprzez wybrane wejście analogowe, wzmocnienie i rozdzielczość), ale miejsce docelowe i długość są w pełni kontrolowane — wystarczające do uszkodzenia pamięci jądra, awarii lub eskalacji uprawnień z przestrzeni użytkownika do jądra. Kompilacje bez CONFIG_USERSPACE lub na układach SoC innych niż NXP RW61x z włączonym węzłem ADC GAU nie są narażone na granicę uprawnień; tam ten sam defekt powoduje ciche przepełnienie tylko wtedy, gdy sama aplikacja przechodzi przez zbyt mały bufor.

Poprawka zastępuje sprawdzanie ad hoc współdzielonym pomocnikiem adc_sequence_validate_buffer() (walidującym względem num_channels * sizeof(uint16_t)), przechowuje bufor_size / sizeof(uint16_t) wresults_length i koryguje pętlę związaną z post-dekrementacją, tak aby można było zapisać dokładnie dostępną liczbę miejsc.

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