CVE-2026-18414

Yüksek

Açıklama

ADC API, her sürücünün hedef tamponu çok küçük olan bir örnekleme dizisini reddetmesini gerektirir: include/zephyr/drivers/adc.h dosyasındaki struct adc_sequence yapısının buffer_size alanı, "sürücünün örneklerin sınırın ötesine yazılmadığından emin olması gerektiğini ve tamponun yeterince büyük olmadığı ortaya çıkarsa bir hata döndürmesi gerektiğini" belgeler. ADI MAX32 sürücüsü bu sözleşmeye uymamıştır. drivers/adc/adc_max32.c içindeki start_read(), bir bayt sayısı olan buffer_size değerini, sizeof(uint16_t) değerini göz ardı ederek bir örnek sayısı ile ((1 + extra_samplings) * channels) karşılaştırmış, böylece gerekli boyutun yarısı kadar olan bir tamponu kabul etmiştir. Örnekler daha sonra, örnek başına iki bayt yazan ve işaretçiyi bir uint16_t ilerleten Wrap_MXC_ADC_GetData() tarafından uint16_t * data->buffer aracılığıyla depolanır: senkron okumalar için adc_max32_start_channel() içinde ve asenkron okumalar için adc_max32_isr() içinde. Örneğin, iki kanalı seçen ve iki baytlık bir tampona sahip olan bir dizi kontrolü geçer ve ikinci örneği tamponun sonunun ötesine yazar. CONFIG_USERSPACE yapılandırmasına sahip bir derlemede, adc_read() ve adc_read_async() sistem çağrılarıdır. drivers/adc/adc_handlers.c içindeki işleyici, diziyi kullanıcı belleğinden kopyalar, yalnızca [buffer, buffer + buffer_size) aralığının çağıran iş parçacığı tarafından yazılabilir olduğunu doğrular ve kullanıcı tarafından sağlanan options->callback'i reddeder; boyut aritmetiğini kasıtlı olarak sürücüye bırakır. Bu nedenle, bir MAX32 ADC cihaz nesnesine erişim izni verilmiş bir kullanıcı modu iş parçacığı; kanalları, buffer, buffer_size ve options->extra_samplings değerlerini tamamen kontrol edebilir ve sürücünün tamponun kapasitesinin iki katı kadar bayt yazmasını sağlayabilir. Kontrol extra_samplings ile ölçeklendiği için, örnek işaretçisi yalnızca tekrarlanan bir örneklemede geri sarıldığından ve bir dizinin ekstra örneklemelerinde asla geri sarılmadığından, taşma miktarı tamponun kendi uzunluğuna eşit olur ve tampon sonunun channels * 65536 bayta kadar ötesine ulaşabilir. Sonuç olarak gerçekleşen yazma işlemleri, MPU'nun iş parçacığının bellek alanını kısıtlamadığı çekirdek modunda (sistem çağrısının kendisinde, ADC bağlam zamanlayıcısında veya asenkron okumalar için ADC kesme işleyicisinde) sürücü tarafından gerçekleştirilir; böylece yazma işlemi kullanıcı bölümünden doğrusal olarak çıkarak diğer bölümler, çekirdek verileri veya iş parçacığı yığınları gibi bitişik belleklere girer. Bunun etkisi, ayrıcalıklı olmayan bir kullanıcı modu iş parçacığından gelen, saldırgan tarafından seçilen bir ofsette ve saldırgan tarafından seçilen uzunlukta çekirdek bellek bozulmasıdır; bu da olası bir yetki yükseltme ve hizmet reddi primitifidir. CONFIG_USERSPACE olmadan yapılan derlemeler, tamponun uygulama tarafından sağlanması nedeniyle yalnızca çağırıcı tarafında bir dayanıklılık kusuru olarak etkilenir. Düzeltme, start_read() içindeki bu kontrolü, örnek boyutu olarak sizeof(uint16_t) değerini geçiren drivers/adc/adc_common.c içindeki yeni ortak yardımcı fonksiyon adc_sequence_validate_buffer() çağrısıyla değiştirir. Yardımcı fonksiyon active_channels * sizeof(uint16_t) * (1 + extra_samplings) hesaplamasını yapar ve herhangi bir örnekleme başlamadan önce -ENOMEM döndürür.

ÖnemYüksek
CVSS7.8
İstismar olasılığı—
ÜrünZephyr
Yayın28 Eyl 2026
İlk görülme28 Eyl 2026

Nasıl düzeltilir

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
zephyrproject zephyr4.0.0 ≤ v < 4.4.24.4.2

Sürümünüzü kontrol edin

Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.

Intelligence 360 paketinde

Attack Surface Management

Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.