CVE-2025-23143
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: net: sock_lock_init_class_and_name() ve rmmod kaynaklı null-ptr-deref hatası düzeltildi. Yeniden üretim adımları [0] çalıştırılıp birkaç saniye beklendiğinde, bir uyarıyı hemen ardından takip eden bir null-ptr-deref olmak üzere iki LOCKDEP hatası gözlemlenmiştir [1]. Yeniden Üretim Adımları: 1) CIFS bağla (Mount) 2) CIFS için gelen FIN paketlerini düşüren bir iptables kuralı ekle 3) CIFS bağlantısını kes (Unmount) 4) CIFS modülünü kaldır (Unload) 5) iptables kuralını kaldır 3. adımda, CIFS modülü temel TCP soketi için sock_release() fonksiyonunu çağırır ve bu işlem hızlıca döner. Ancak, gelen FIN paketleri düşürüldüğü için soket FIN_WAIT_1 durumunda kalır. Bu noktada, soket hala hayattayken modülün refcnt değeri 0'dır, dolayısıyla aşağıdaki rmmod komutu başarıyla gerçekleşir. # ss -tan State Recv-Q Send-Q Local Address:Port Peer Address:Port FIN-WAIT-1 0 477 10.0.2.15:51062 10.0.0.137:445 # lsmod | grep cifs cifs 1159168 0 Bu durum, CIFS modülünün ömrü ile temel TCP soketinin ömrü arasındaki tutarsızlığı ortaya çıkarmaktadır. CIFS, sock_release() fonksiyonunu çağırdıktan ve işlem döndükten sonra bile, TCP soketi bağlantıyı düzgün bir şekilde kapatmak için hemen yok olmaz. Bu durum genellikle sorun teşkil etmese de, CIFS'in sock_lock_init_class_and_name() kullanarak TCP soketinin sk->sk_lock yapısına farklı bir kilit sınıfı ataması nedeniyle LOCKDEP ile ilgili bir soruna yol açar. Soket için gelen bir paket işlendiğinde veya bir zamanlayıcı tetiklendiğinde sk->sk_lock elde edilir. Ardından LOCKDEP, check_wait_context() içerisinde kilit bağlamını kontrol eder ve burada kilit sınıfını almak için hlock_class() çağrılır. Ancak modül zaten kaldırıldığı için hlock_class() bir uyarı kaydeder ve NULL döndürerek null-ptr-deref hatasını tetikler. LOCKDEP etkinleştirilmişse, bu sorunu önlemek için sock_lock_init_class_and_name() fonksiyonunu çağıran bir modülün (CIFS, NFS vb.), böyle bir soket hala hayattayken kaldırılmadığından emin olunmalıdır. Bunun için sock_lock_init_class_and_name() içinde modül referansını tutalım ve soket sk_prot_free() ile serbest bırakıldığında bu referansı serbest bırakalım. sock_lock_init()'in, dinleme soketi için sock_lock_init_class_and_name() çağıran ve GFP_ZERO olmadan sk_clone_lock() aracılığıyla bir soketi klonlayan svc_create_socket() için sk->sk_owner değerini temizlediği unutulmamalıdır. [0]: CIFS_SERVER="10.0.0.137" CIFS_PATH="//${CIFS_SERVER}/Users/Administrator/Desktop/CIFS_TEST" DEV="enp0s3" CRED="/root/WindowsCredential.txt" MNT=$(mktemp -d /tmp/XXXXXX) mount -t cifs ${CIFS_PATH} ${MNT} -o vers=3.0,credentials=${CRED},cache=none,echo_interval=1 iptables -A INPUT -s ${CIFS_SERVER} -j DROP for i in $(seq 10); do umount ${MNT} rmmod cifs sleep 1 done rm -r ${MNT} iptables -D INPUT -s ${CIFS_SERVER} -j DROP [1]: DEBUG_LOCKS_WARN_ON(1) WARNING: CPU: 10 PID: 0 at kernel/locking/lockdep.c:234 hlock_class (kernel/locking/lockdep.c:234 kernel/locking/lockdep.c:223) Modules linked in: cifs_arc4 nls_ucs2_utils cifs_md4 [last unloaded: cifs] CPU: 10 UID: 0 PID: 0 Comm: swapper/10 Not tainted 6.14.0 #36 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014 RIP: 0010:hlock_class (kernel/locking/lockdep.c:234 kernel/locking/lockdep.c:223) ... Call Trace: <IRQ> __lock_acquire (kernel/locking/lockdep.c:4853 kernel/locking/lockdep.c:5178) lock_acquire (kernel/locking/lockdep.c:469 kernel/locking/lockdep.c:5853 kernel/locking/lockdep.c:5816) _raw_spin_lock_nested (kernel/locking/spinlock.c:379) tcp_v4_rcv (./include/linux/skbuff.h:1678 ./include/net/tcp.h:2547 net/ipv4/tcp_ipv4.c:2350) ... BUG: kernel NULL pointer dereference, address: 00000000000000c4 PF: supervisor read access in kernel mode PF: error_code(0x0000) - not-present page PGD 0 Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI CPU: 10 UID: 0 PID: 0 Comm: swapper/10 Tainted: G W 6.14.0 #36 Tainted: [W]=WARN Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014 RIP: 0010:__lock_acquire (kernel/ ---truncated---
Nasıl düzeltilir
- linux linux_kernel5.4.300, 5.10.245, 5.15.194, 6.1.153, 6.6.107, 6.12.24, 6.13.12, 6.14.3 ya da sonraki bir sürüm
- git.kernel.org/stable/c/0bb2f7a1ad1f11d861f58e5ee5051c8974ff9569
- git.kernel.org/stable/c/2155802d3313d7b8365935c6b8d6edc0ddd7eb94
- git.kernel.org/stable/c/5f7f6abd92b6c8dc8f19625ef93c3a18549ede04
- git.kernel.org/stable/c/83083c5fc7cf9b0f136a42f26aba60da380f3601
- git.kernel.org/stable/c/905d43b8ad2436c240f844acb3ebcc7a99b8ebf1
- git.kernel.org/stable/c/b7489b753667bc9245958a4896c9419743083c27
- git.kernel.org/stable/c/c11247a21aab4b50a23c8b696727d7483de2f1e1
- git.kernel.org/stable/c/d51e47e2ab6ef10a317d576075cf625cdbf96426
- git.kernel.org/stable/c/feda73ad44a5cc80f6bf796bb1099a3fe71576d4
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 2.6.20 ≤ v < 5.4.300, 5.5 ≤ v < 5.10.245, 5.11 ≤ v < 5.15.194, 5.16 ≤ v < 6.1.153, 6.2 ≤ v < 6.6.107, 6.7 ≤ v < 6.12.24, 6.13 ≤ v < 6.13.12, 6.14 ≤ v < 6.14.3, 6.15 | 5.4.300, 5.10.245, 5.15.194, 6.1.153, 6.6.107, 6.12.24, 6.13.12, 6.14.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.