CVE-2026-18417
Təsvir
Yerli BSD-socket təbəqəsi gözlənilən asinxron soket xətasını `struct net_context`-in `void user_data` sahəsinə tip-çevirmə yolu ilə qeyd edirdi (`subsys/net/lib/sockets/sockets_inet.c` faylında `zsock_accepted_cb()`, `zsock_received_cb()`, `zsock_connected_cb()` və `zsock_close_ctx()` funksiyalarında `ctx->user_data = INT_TO_POINTER(-status)` şəklində) və onu `POINTER_TO_INT()` ilə geri oxuyurdu. Eyni sahə dinləyici TCP kontekstləri üçün şəbəkə stekinə məxsusdur: `net_tcp_accept()` orada valideyn kontekst göstəricisini saxlayır və TCP nüvəsi onu qeydiyyatdan keçmiş `accept` geri çağırışına (callback) ötürür. Buna görə də uğursuz bir `accept` əməliyyatı, stekin `struct net_context` gözlədiyi yerdə kiçik bir tam ədədi (`errno` dəyərini) qoyurdu. Dinləyici TCP soketi olan şəbəkə interfeysi söndürüldükdə, `subsys/net/ip/tcp.c` faylındakı `close_tcp_conn()` funksiyası `accept` geri çağırışını `-ENETDOWN` və kontekstin `user_data` dəyəri ilə işə salır. v4.3.0 versiyasında geri çağırış bundan sonra deaktiv edilmirdi, buna görə də ikinci interfeys-sönmə hadisəsi əvvəllər saxlanılmış `errno` dəyərini `zsock_accepted_cb()` funksiyasına ötürürdü; bu funksiya həmin dəyəri valideyn konteksti kimi istifadə edərək onun vasitəsilə bir neçə yazma əməliyyatı yerinə yetirirdi (`sock_set_error()` tərəfindən `socket_data`-nın oxu-dəyişdir-yaz prosesi, `k_fifo_cancel_wait(&parent->recv_q)`) — bu, düzəlişin commit mesajında təsvir olunan sistem çökməsidir. v4.3.1 və v4.4.x versiyaları xəta geri çağırışından sonra `conn->accept_cb`-ni təmizləyən sonrakı dəyişiklikləri ehtiva edir (v4.3 budağında `269cb8823d3`, main budağında `913fae5169425550f2364655298fceb79b320066`), bu isə həmin təkrarlanan yolu bağlayır; həmin buraxılışlarda korlanmış "cookie" yalnız daha dar bir yarış vəziyyəti (race condition) vasitəsilə — interfeys sönməsi ilə eyni vaxtda tamamlanan əl sıxma (handshake) hələ də köhnəlmiş cookie-ni `k_fifo_put(&parent->accept_q, ...)` funksiyasına ötürməsi ilə və ya sahəni şərtsiz oxuyan `getsockopt(SO_ERROR)` vasitəsilə əlçatan qalır. v4.3.0 versiyasında, təkrarlanan bağlantı-kəsilmə hadisələri zamanı dinləyici TCP soketini açıq saxlayan tətbiq bu qüsuru ortaya çıxarmaq üçün kifayətdir; tetikləyici şərt hücumçu tərəfindən göndərilən paket məlumatları deyil, şəbəkə interfeysinin vəziyyətinin dəyişməsidir, buna görə də praktiki hücumçu bağlantını təkrarlanaraq kəsməyə qadir olan şəxsdir (məsələn, simsiz bağlantını pozan yaxınlıqdakı hücumçu) və ya lokal/fiziki giriş imkanı olan şəxsdir. Həm səhv ünvan, həm də saxlanılan məlumatlar `errno` dəyərindən törəyən sabit kiçik konstantlar olduğu üçün nəticə kernel-də kritik xətaya səbəb olan "wild-pointer" girişidir — bu, hücumçu tərəfindən idarə olunan yaddaş korlanmasından ziyadə, xidmətdən imtinadır (cihazın çökməsi və ya yenidən başladılması). Düzəliş gözlənilən xətanı xüsusi `net_context.sock_error` sahəsində saxlayır və bütün istehsalçı və istehlakçıları `sock_set_error()/sock_get_error()` funksiyalarına çevirərək `user_data` sahəsinə toxunmur. Yan təsir olaraq, bu həmçinin şərtsiz qiymətləndirilən `getsockopt(SO_ERROR)` funksiyasının `user_data`-da saxlanılan kernel ünvanını istifadəçi sahəsi tətbiqinə qaytarmasının qarşısını alır.
Necə düzəltmək olar
- zephyrproject zephyr4.4.2 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| zephyrproject zephyr | 4.3.0 ≤ v < 4.4.2 | 4.4.2 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.