CVE-2025-38154
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: bpf, sockmap: Gönderim sırasında serbest bırakıldıktan sonra sk_socket kullanımından kaçının Backlog iş parçacığında sk->sk_socket kilitlenmemekte veya referanslanmamaktadır ve skb_send_sock() çağrısı sırasında sk_socket'in serbest bırakılmasıyla bir yarış durumu (race condition) oluşmaktadır. Tüm soket türleri (tcp/udp/unix/vsock) bundan etkilenecektir. Yarış durumları: ''' CPU0 CPU1 backlog::skb_send_sock sendmsg_unlocked sock_sendmsg sock_sendmsg_nosec close(fd): ... ops->release() -> sock_map_close() sk_socket->ops = NULL free(socket) sock->ops->sendmsg ^ burada panic meydana gelir ''' sock_map_close() yürütüldükten sonra psock referansı 0 olur. ''' void sock_map_close() { ... if (likely(psock)) { ... // !! burada psock kaldırılır ve psock referansı 0 olur sock_map_remove_links(sk, psock) psock = sk_psock_get(sk); if (unlikely(!psock)) goto no_psock; <=== Kontrol goto ile buraya atlar ... cancel_delayed_work_sync(&psock->work); <=== yürütülmez sk_psock_put(sk, psock); ... } ''' sock_map_close() içinde eğer psock tutuluyorsa zaten iş kuyruğunun (workqueue) bitmesini beklediğimiz gerçeğine dayanarak, yarış durumlarını önlemek için basitçe psock referans sayısını artırıyoruz. Bu yama ile, eğer backlog iş parçacığı çalışıyorsa, sock_map_close() backlog iş parçacığının tamamlanmasını bekleyecek ve bekleyen tüm işlemleri iptal edecektir. Eğer çalışan bir backlog yoksa, o ana kadar başlamamış olan herhangi bir bekleyen işlem, psock referans sayısı sıfırlandığı için sk_psock_get() tarafından çağrıldığında başarısız olacak ve sk_psock_drop(), cancel_delayed_work_sync() aracılığıyla tüm görevleri iptal edecektir. Özetle, backlog iş parçacığını ve close() iş parçacığını koordine etmek için senkronizasyon gerekmektedir. Yakalanan panic çıktısı: ''' Workqueue: events sk_psock_backlog RIP: 0010:sock_sendmsg+0x21d/0x440 RAX: 0000000000000000 RBX: ffffc9000521fad8 RCX: 0000000000000001 ... Call Trace: <TASK> ? die_addr+0x40/0xa0 ? exc_general_protection+0x14c/0x230 ? asm_exc_general_protection+0x26/0x30 ? sock_sendmsg+0x21d/0x440 ? sock_sendmsg+0x3e0/0x440 ? __pfx_sock_sendmsg+0x10/0x10 __skb_send_sock+0x543/0xb70 sk_psock_backlog+0x247/0xb80 ... '''
Nasıl düzeltilir
- linux linux_kernel5.15.186, 6.1.142, 6.6.94, 6.10, 6.12.34, 6.15.3 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.15.162 ≤ v < 5.15.186, 6.1.95 ≤ v < 6.1.142, 6.6.35 ≤ v < 6.6.94, 6.9.6 ≤ v < 6.10, 6.10.1 ≤ v < 6.12.34, 6.13 ≤ v < 6.15.3, 6.10 | 5.15.186, 6.1.142, 6.6.94, 6.10, 6.12.34, 6.15.3 |
| debian debian_linux | 11.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.