CVE-2026-19184
Açıklama
NXP GAU ADC sürücüsü (drivers/adc/adc_mcux_gau_adc.c), bayt cinsinden ifade edilen çağırıcı tarafından sağlanan sequence->buffer_size değerini, bir örnek sayısı olan aktif kanal sayısına göre doğrulamaktaydı. Ardından bu bayt sayısını doğrudan data->results_length içine kaydediyor ve bunu mcux_gau_adc_read_samples() fonksiyonunda mevcut uint16_t yuva sayısı olarak kullanıyordu. Her dönüştürme sonucu sizeof(uint16_t) bayt kapladığı için, "yeterince büyük" olarak kabul edilen bir tampon belleğe, bayt cinsinden boyutunun iki katına kadar veri yazılabiliyordu; böylece tamponun orta noktasının ötesindeki her örnek sınır dışına yazılıyordu. adc_read() ve adc_read_async(), Zephyr sistem çağrılarıdır. drivers/adc/adc_handlers.c içindeki syscall doğrulayıcısı yalnızca çağırıcının buffer_size kadar yazılabilir bayta sahip olduğunu (K_SYSCALL_MEMORY_WRITE) onaylar; bu boyutun talep edilen kanallar ve extra_samplings için yeterli olup olmadığına karar verme işlemi tamamen sürücüye bırakılmıştır. CONFIG_USERSPACE=y ile yapılan bir derlemede, ADC cihaz nesnesi yetkisi verilmiş bir kullanıcı modu iş parçacığı, kasıtlı olarak yarı boyutunda bir tampon sunabilir ve çağırıcının MPU kısıtlamalarının dışında, süpervizör modunda çalışan sürücü iş kuyruğu yöneticisinin, ADC dönüştürme sonuçlarını söz konusu tamponun sonunun ötesine, çağırıcının seçtiği bir adrese ve uzunlukta yazmasına neden olabilir. Taşma miktarı talep edilen sequence ile sınırlıdır: sequence->options->extra_samplings ayarlı olduğunda, örnekleme döngüsü tampon işaretçisini her örneklemede ileri taşır, dolayısıyla toplam taşma miktarı sağlanan tamponun tam boyutuna ulaşabilir (büyük extra_samplings değerleri için kilobaytlarca). Yazılan kelimeler 16 bitlik ADC dönüştürme sonuçlarıdır, bu nedenle içerik yalnızca kısmen saldırgan etkisindedir (seçilen analog giriş, kazanç ve çözünürlük aracılığıyla), ancak hedef ve uzunluk tamamen kontrol altındadır; bu durum çekirdek bellek bozulması, çökme veya kullanıcı modundan çekirdeğe yetki yükseltme için yeterlidir. CONFIG_USERSPACE olmadan yapılan derlemeler veya GAU ADC düğümü etkinleştirilmiş NXP RW61x dışındaki SoC'ler yetki sınırına maruz kalmaz; burada aynı kusur, yalnızca uygulamanın kendisi yetersiz boyutlu bir tampon ilettiğinde sessiz bir taşmaya neden olur. Düzeltme, geçici kontrolü ortak adc_sequence_validate_buffer() yardımcısıyla (num_channels * sizeof(uint16_t) üzerinden doğrulama yaparak) değiştirir, results_length içine buffer_size / sizeof(uint16_t) değerini kaydeder ve döngü sınırını, tam olarak mevcut yuva sayısının yazılabilmesi için bir sonrası-azaltma (post-decrement) işlemine düzeltir.
Nasıl düzeltilir
- zephyrproject zephyr4.5.0 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| zephyrproject zephyr | 3.7.0 ≤ v < 4.5.0 | 4.5.0 |
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.
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.