CVE-2026-19676
Açıklama
peci_transfer() sistem çağrısı için kullanıcı modu doğrulayıcısı olan drivers/peci/peci_handlers.c dosyasındaki z_vrfy_peci_transfer(), yalnızca aygıt nesnesi iznini kontrol etmiş ve çağıran tarafından sağlanan struct peci_msg yapısını k_usermode_from_copy() ile kopyalamıştır. Bu işlem yalnızca dış yapıyı doğrular; gömülü struct peci_buf üyeleri olan tx_buffer ve rx_buffer içindeki buf işaretçileri ve len değerleri tamamen çağıranın kontrolünde kalmış ve sürücüye kontrol edilmeden aktarılmıştır. Ağaçtaki tüm PECI sürücüleri bu işaretçileri süpervizör modunda çözümler: drivers/peci/peci_npcx.c dosyasındaki peci_npcx_transfer() ve drivers/peci/peci_ite_it8xxx2.c dosyasındaki peci_it8xxx2_transfer(), donanım baytlarını rx_buffer.buf[i] içine kopyalar ve komut baytlarını tx_buffer.buf[i] üzerinden okur; drivers/peci/peci_mchp_xec.c dosyasındaki peci_xec_read()/peci_xec_write() ise aynısını rx_buffer.len üzerinde hiçbir sınır olmadan yapar. Dolayısıyla, PECI aygıt nesnesine erişim yetkisi verilmiş bir kullanıcı modu iş parçacığı —bir uygulamanın CONFIG_USERSPACE altında bir aygıta erişmesinin normal yolu— rx_buffer.buf'ı çekirdek veri yapılarına yönlendirerek sürücünün donanım tarafından sağlanan baytları oraya yazmasını sağlayabilir veya tx_buffer.buf'ı çekirdek belleğine yönlendirerek içeriğinin PECI/eSPI bant dışı (out-of-band) veri yoluna itilmesini sağlayabilir. Etki, tam bir kullanıcı modundan çekirdeğe kaçıştır: rastgele bir çekirdek yazma primitifi (bütünlük ihlali ve bunun aracılığıyla süpervizör ayrıcalığında kod çalıştırma), PECI veri yolu gözlemcisine sızdırılan rastgele bir çekirdek okuma işlemi ve eşlenmemiş bir adres sağlanması durumunda kolayca tetiklenebilen bir süpervizör modu hatası. İstismar için CONFIG_USERSPACE=y olması, PECI sürücülerinden birinin etkinleştirilmiş olması (CONFIG_PECI_NPCX, CONFIG_PECI_XEC veya CONFIG_PECI_ITE_IT8XXX2) ve PECI aygıtına sahip bir kullanıcı modu iş parçacığında yerel kod yürütme yetkisi gereklidir. Düzeltme, iki gömülü tampon bellek üzerine K_SYSCALL_MEMORY_READ() ve K_SYSCALL_MEMORY_WRITE() kontrolleri ekler ve RX uzunluğunda hesaba katılan çerçeve kontrol dizisi (frame-check-sequence) baytı için bir size_add_overflow() koruması sağlar.
Nasıl düzeltilir
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| zephyrproject zephyr | 2.3.0 ≤ v ≤ 4.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.
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.