CVE-2026-18413

Yüksək

Təsvir

ADC API hər bir drayverdən təyin olunmuş hədəf buferi çox kiçik olan nümunələmə ardıcıllığını rədd etməsini tələb edir: include/zephyr/drivers/adc.h faylındakı struct adc_sequence strukturunun buffer_size sahəsində qeyd olunub ki, "drayver nümunələrin limitdən kənara yazılmadığından əmin olmalı və bufer kifayət qədər böyük olmadıqda xəta qaytarmalıdır". NXP MCUX LPADC drayveri bu şərtə əməl etməmişdir. drivers/adc/adc_mcux_lpadc.c faylındakı mcux_lpadc_start_read() funksiyası data->buffer = sequence->buffer təyinatından əvvəl heç bir bufer ölçüsü yoxlaması aparmamışdır. Hər bir tamamlanmış çevrilmə, sonra məhdudiyyətsiz *data->buffer++ vasitəsilə interrupsiya ilə idarə olunan versiyalarda mcux_lpadc_isr(), DMA yolu mövcud olan versiyalarda isə mcux_lpadc_dma_callback() funksiyasında hər nümunələmə raundu üçün aktivləşdirilmiş kanal başına bir 16-bitlik nümunə saxlayır. Məsələn, iki baytlıq buferlə iki kanalı seçən ardıcıllığın ikinci nümunəsi buferin sonundan kənara yazılır. CONFIG_USERSPACE konfiqurasiyası olan versiyalarda adc_read() və adc_read_async() sistem çağırışlarıdır. drivers/adc/adc_handlers.c faylındakı handler ardıcıllığı istifadəçi yaddaşından kopyalayır, yalnız [buffer, buffer + buffer_size) diapazonunun çağıran thread tərəfindən yazıla bildiyini yoxlayır və istifadəçi tərəfindən təqdim edilən options->callback-i rədd edir; o, ölçü hesablamalarını qəsdən drayverə buraxır. Beləliklə, LPADC cihaz obyektinə giriş hüququ verilmiş istifadəçi rejimli thread kanalları, buferi, buffer_size və options->extra_samplings parametrlərini tamamilə idarə edir və buferin tutumundan daha çox nümunə tələb edə bilər: nümunə göstəricisi yalnız təkrar nümunələmədə geri qaytarıldığı və ardıcıllığın əlavə nümunələmələrində heç vaxt qaytarılmadığı üçün, iki baytlıq buferə channels * 65536 nümunəyə qədər məlumat yazıla bilər. Nəticədə yaranan yazma əməliyyatları drayver tərəfindən kernel rejimində (ADC interrupsiya handler-də və ya DMA tamamlanma callback-də) yerinə yetirilir; burada MPU thread-in yaddaş domenini məhdudlaşdırmır, buna görə də yazma prosesi xətti şəkildə istifadəçi bölməsindən çıxaraq digər bölmələr, kernel məlumatları və ya thread stekləri kimi bitişik yaddaşa keçir. Bunun təsiri, hücum edənin seçdiyi ofsetdə və uzunluqda kernel yaddaşının korlanmasıdır ki, bu da imtiyazsız istifadəçi rejimli thread tərəfindən imtiyazların yüksəldilməsi və xidmətdən imtina (DoS) üçün real imkan yaradır. CONFIG_USERSPACE olmayan versiyalar yalnız çağıran tərəfin dayanıqlılıq defekti kimi təsirlənir, çünki buferi tətbiqin özü təmin edir. Həll yolu mcux_lpadc_start_read() funksiyasından drivers/adc/adc_common.c faylındakı yeni ortaq köməkçi adc_sequence_validate_buffer() funksiyasının çağırılmasıdır. Köməkçi funksiya active_channels * sizeof(uint16_t) * (1 + extra_samplings) hesablamasını aparır və hər hansı nümunələmə başlamazdan əvvəl -ENOMEM qaytarır.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulZephyr
Dərc28 sen 2026
İlk görülmə28 sen 2026

Necə düzəltmək olar

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
zephyrproject zephyr2.5.0 ≤ v < 4.4.24.4.2

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.

CVE-2026-18413 · Zephyr · Dark Radar