Zafiyet.live Keşfet. Değerlendir. Düzelt. Doğrula.
  • Son 7 gün
  • CWE-822

CVE-2026-19676

Zephyr PECI transfer sistem çağrısında doğrulanmayan kullanıcı tamponu işaretçileri çekirdek belleğine erişime izin veriyor

zephyrproject zephyr

Yüksek 7,8 CVSS 3.1
Yayımlandı
Güncellendi
24 Eki 2026
Açık yaşı
6 gün
Kaydı açan
zephyr

ÖzetTürkçe

peci_transfer sistem çağrısının kullanıcı modu doğrulayıcısı, drivers/peci/peci_handlers.c içindeki z_vrfy_peci_transfer, yalnızca cihaz nesnesinin izinlerini kontrol ediyor ve çağıranın sağladığı struct peci_msg yapısını k_usermode_from_copy ile kopyalıyor. Bu kopyalama yalnızca dış yapıyı doğruluyor; gömülü struct peci_buf üyelerinin tx_buffer ve rx_buffer içindeki buf işaretçileri ve len değerleri çağıranın tam denetimi altında kalıyor ve sürücüye kontrol edilmeden iletiliyor. Ağaç içindeki her PECI sürücüsü bu işaretçileri süpervizör modunda dereferans ediyor: drivers/peci/peci_npcx.c içindeki peci_npcx_transfer ile drivers/peci/peci_ite_it8xxx2.c içindeki peci_it8xxx2_transfer donanımdan gelen baytları rx_buffer.buf[i] içine kopyalıyor ve tx_buffer.buf[i] içinden komut baytlarını okuyor; drivers/peci/peci_mchp_xec.c içindeki peci_xec_read ve peci_xec_write ise rx_buffer.len üzerinde hiçbir sınır olmadan aynı işlemleri yapıyor. PECI cihaz nesnesine erişim verilmiş bir kullanıcı modu iş parçacığı, rx_buffer.buf işaretçisini çekirdek veri yapılarına yönlendirerek sürücünün donanımdan gelen baytları oraya yazmasını sağlayabilir; tx_buffer.buf işaretçisini çekirdek belleğine yönlendirerek içeriğinin PECI/eSPI bant dışı veri yoluna gönderilmesini sağlayabilir. Etki, kullanıcı modundan çekirdeğe tam bir kaçış olup; keyfi çekirdek yazma ilkeli (bütünlük ve bunun üzerinden süpervizör ayrıcalığında kod çalıştırma), bir PECI bus gözlemcisine ifşa edilen keyfi çekirdek okuma ve eşlenmemiş bir adres verildiğinde kolayca tetiklenebilen süpervizör modu hatası anlamına geliyor. Sömürü için CONFIG_USERSPACE=y, PECI sürücülerinden birinin etkin olması (CONFIG_PECI_NPCX, CONFIG_PECI_XEC veya CONFIG_PECI_ITE_IT8XXX2) ve PECI cihazını tutan bir kullanıcı modu iş parçacığında yerel kod çalıştırma gereklidir. Düzeltme, iki gömülü tampon üzerinde K_SYSCALL_MEMORY_READ ve K_SYSCALL_MEMORY_WRITE kontrolleri ekliyor; RX uzunluğuna dahil edilen çerçeve denetim dizisi baytı için size_add_…

Kaynaktaki açıklama (İngilizce)

The user-mode verifier for the peci_transfer() system call, z_vrfy_peci_transfer() in drivers/peci/peci_handlers.c, checked only the device object permission and copied the caller-supplied struct peci_msg with k_usermode_from_copy(). That copy validates the outer structure only; the buf pointers and len values inside the embedded struct peci_buf members tx_buffer and rx_buffer remained fully caller-controlled and were passed unchecked to the driver.

Every in-tree PECI driver dereferences those pointers in supervisor mode: peci_npcx_transfer() in drivers/peci/peci_npcx.c and peci_it8xxx2_transfer() in drivers/peci/peci_ite_it8xxx2.c copy hardware bytes into rx_buffer.buf[i] and read command bytes out of tx_buffer.buf[i], and peci_xec_read()/peci_xec_write() in drivers/peci/peci_mchp_xec.c do the same with no bound on rx_buffer.len at all. A user-mode thread that has been granted the PECI device object — the normal way an application exposes a device under CONFIG_USERSPACE — could therefore point rx_buffer.buf at kernel data structures and have the driver write hardware-supplied bytes there, or point tx_buffer.buf at kernel memory and have its contents pushed onto the PECI/eSPI out-of-band bus.

The impact is a full user-mode-to-kernel escape: an arbitrary kernel write primitive (integrity and, through it, code execution at supervisor privilege), an arbitrary kernel read disclosed to a PECI bus observer, and a trivially reachable supervisor-mode fault if an unmapped address is supplied. Exploitation requires CONFIG_USERSPACE=y, one of the PECI drivers enabled (CONFIG_PECI_NPCX, CONFIG_PECI_XEC or CONFIG_PECI_ITE_IT8XXX2), and local code execution in a user-mode thread holding the PECI device.

The fix adds K_SYSCALL_MEMORY_READ() and K_SYSCALL_MEMORY_WRITE() checks over the two embedded buffers, with a size_add_overflow() guard on the frame-check-sequence byte accounted for in the RX length.

Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.

Etkilenen sürümler1 yazılım

YazılımEtkilenenDüzeltildiği sürüm
zephyrproject zephyr ≥ 2.3.0, ≤ 4.4.2 –

Kaynaklar4 kaynak

Kayıt geçmişi

  1. Yayımlandı

İlgili açıklar

Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.