CVE-2026-18417

Orta

Açıklama

Yerel BSD-socket katmanı, bekleyen bir asenkron soket hatasını `struct net_context` yapısının `void user_data` alanına type-punning yöntemiyle kaydediyordu (`subsys/net/lib/sockets/sockets_inet.c` dosyasındaki `zsock_accepted_cb()`, `zsock_received_cb()`, `zsock_connected_cb()` ve `zsock_close_ctx()` fonksiyonlarında `ctx->user_data = INT_TO_POINTER(-status)` şeklinde) ve bunu `POINTER_TO_INT()` ile geri okuyordu. Aynı alan, dinleme durumundaki TCP bağlamları için ağ yığınına aittir: `net_tcp_accept()` buraya üst bağlam işaretçisini saklar ve TCP çekirdeği bunu kayıtlı kabul etme (accept) geri çağırma fonksiyonuna geri iletir. Bu nedenle başarısız bir kabul işlemi, yığının bir `struct net_context` beklediği yere küçük bir tam sayı (bir errno değeri) bırakıyordu. Dinleme yapan bir TCP soketi taşıyan ağ arayüzü kapandığında, `subsys/net/ip/tcp.c` içindeki `close_tcp_conn()` fonksiyonu, kabul etme geri çağırmasını `-ENETDOWN` ve bağlamın `user_data` alanı ile birlikte çağırır. v4.3.0 sürümünde, geri çağırma işleminden sonra devre dışı bırakılmadığı için ikinci bir arayüz kapanma olayı, önceden saklanan errno değerini `zsock_accepted_cb()` fonksiyonuna iletiyordu; bu fonksiyon da söz konusu değeri üst bağlam olarak çözümleyerek üzerinden birkaç yazma işlemi gerçekleştiriyordu (`sock_set_error()`'un `socket_data` üzerindeki oku-değiştir-yaz işlemi, `k_fifo_cancel_wait(&parent->recv_q)`) — bu durum düzeltmenin commit mesajında açıklanan çökmeye neden olmaktadır. v4.3.1 ve v4.4.x sürümleri, hata geri çağırmasından sonra `conn->accept_cb` alanını temizleyen daha sonraki bir değişikliği içerir (v4.3 dalında `269cb8823d3`, ana dalda `913fae5169425550f2364655298fceb79b320066), bu da tekrarlayan yolu kapatır; bu sürümlerde zehirli çerez yalnızca daha dar bir yarış durumuyla (arayüz kapanırken tamamlanan bir el sıkışmasının bayat çerezi hâlâ `k_fifo_put(&parent->accept_q, ...)` fonksiyonuna iletmesiyle) ve alanı koşulsuz olarak geri okuyan `getsockopt(SO_ERROR)` ile erişilebilir kalır. v4.3.0 sürümünde, tekrarlanan bağlantı kopma olayları boyunca dinleme yapan bir TCP soketini açık tutan bir uygulama, kusura ulaşmak için yeterlidir; tetikleyici koşul saldırgan tarafından sağlanan paket verileri değil, bir ağ arayüzü durum değişikliğidir. Dolayısıyla pratik bir saldırgan, bağlantıyı tekrar tekrar koparmaya zorlayabilen (örneğin kablosuz bir bağlantıyı bozan yakın bir saldırgan) veya yerel/fiziksel erişimi olan kişidir. Hem hatalı adres hem de saklanan veri, errno değerinden türetilen sabit küçük sabitler olduğundan sonuç, çekirdek ölümcül hatasına yol açan bir vahşi işaretçi (wild-pointer) erişimidir; bu durum saldırgan yönlendirmeli bir bellek bozulmasından ziyade bir hizmet reddi (cihaz çökmesi veya sıfırlanması) durumudur. Düzeltme, bekleyen hatayı özel bir `net_context.sock_error` alanında saklar ve tüm üretici ile tüketicileri `sock_set_error()`/`sock_get_error()` şeklinde dönüştürerek `user_data` alanına dokunmaz. Bir yan etki olarak, koşulsuz olarak değerlendirilen `getsockopt(SO_ERROR)` fonksiyonunun, `user_data` içinde tutulan çekirdek adresini kullanıcı alanı uygulamasına döndürmesini de engeller.

ÖnemOrta
CVSS6.5
İstismar olasılığı—
ÜrünZephyr
Yayın29 Eyl 2026
İlk görülme29 Eyl 2026
Zayıflık türüCWE-843CWE-843

Nasıl düzeltilir

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
zephyrproject zephyr4.3.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.

CVE-2026-18417 · Zephyr · Dark Radar