CVE-2025-22058

Orta

Açıklama

Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: udp: Bellek muhasebesi sızıntısı düzeltildi. Matt Dowling, garip bir UDP bellek kullanımı sorunu bildirdi. Normal çalışma altında, /proc/net/sockstat içinde bildirilen UDP bellek kullanımı sıfıra yakın kalır. Ancak zaman zaman 524.288 sayfaya yükseliyor ve asla düşmüyordu. Dahası, uygulama sonlandırıldığında değer iki katına çıkıyordu. Son olarak, aralıklı paket kayıplarına neden oluyordu. Sorunu aşağıdaki betikle [0] yeniden üretebiliyoruz: 1. /proc/net/sockstat 0 sayfa bildirir # cat /proc/net/sockstat | grep UDP: UDP: inuse 1 mem 0 2. Rapor 524.288'e ulaşana kadar betiği çalıştırın # python3 test.py & sleep 5 # cat /proc/net/sockstat | grep UDP: UDP: inuse 3 mem 524288 <-- (INT_MAX + 1) >> PAGE_SHIFT 3. Soketi sonlandırın ve sayının asla düşmediğini doğrulayın # pkill python3 && sleep 5 # cat /proc/net/sockstat | grep UDP: UDP: inuse 1 mem 524288 4. (v6.0'dan itibaren gereklidir) proto_memory_pcpu_drain() işlevini tetikleyin # python3 test.py & sleep 1 && pkill python3 5. Sayı iki katına çıkar # cat /proc/net/sockstat | grep UDP: UDP: inuse 1 mem 1048577 Uygulama, SO_RCVBUF için INT_MAX değerini ayarladı ve bu, udp_rmem_release() içinde bir tamsayı taşmasını tetikledi. Bir soket close() ile kapatıldığında, udp_destruct_common() alma kuyruğunu temizler ve kuyruktaki skb->truesize değerlerini toplar. Bu toplam hesaplanır ve yerel bir unsigned integer değişkeninde saklanır. Toplam boyut daha sonra bellek muhasebesini ayarlamak için udp_rmem_release() işlevine geçirilir. Ancak, işlev signed integer argüman aldığı için toplam boyut sarmalanabilir ve taşmaya neden olabilir. Ardından, serbest bırakılan miktar şu şekilde hesaplanır: 1) size, sk->sk_forward_alloc değerine eklenir. 2) sk->sk_forward_alloc, PAGE_SIZE'ın en yakın alt katına yuvarlanır ve amount değişkenine atanır. 3) amount, sk->sk_forward_alloc değerinden çıkarılır. 4) amount >> PAGE_SHIFT, __sk_mem_reduce_allocated() işlevine geçirilir. Sorun oluştuğunda, udp_destruct_common() içindeki toplam 2147484480 (INT_MAX + 833) idi ve bu, udp_rmem_release() içinde -2147482816 olarak dönüştürüldü. 1) adımında sk->sk_forward_alloc 3264'ten -2147479552'ye değişir ve 2) adımı -2147479552 değerini amount'a atar. 3) adımı sarmalanmayı geri alır, böylece inet_sock_destruct() içinde bir uyarı görmeyiz. Ancak udp_memory_allocated, 4) adımında iki katına çıkar. 3cd3399dd7a8 ("net: implement per-cpu reserves for memory_allocated") commit'inden bu yana, __sk_mem_reduce_allocated() miktarı udp_memory_per_cpu_fw_alloc içinde önbelleğe aldığı için bellek kullanımı bir soket close() ile kapatıldıktan hemen sonra iki katına çıkmaz. Ancak bir UDP soketi bir sonraki paketi aldığında çıkarma işlemi etkili olur ve UDP bellek kullanımının iki katına çıkmasına neden olur. Bu sorun, soketin sk->sk_rmem_alloc değeri net.ipv4.udp_rmem_min değerini aştığında daha fazla bellek tahsisinin başarısız olmasına ve paket kayıplarına neden olur. Bu sorunu önlemek için hesaplamada unsigned int kullanalım ve sk_forward_alloc_add() işlevini küçük delta için yalnızca bir kez çağıralım. first_packet_length() işlevinin de potansiyel olarak aynı soruna sahip olduğunu unutmayın. [0]: from socket import * SO_RCVBUFFORCE = 33 INT_MAX = (2 ** 31) - 1 s = socket(AF_INET, SOCK_DGRAM) s.bind(('', 0)) s.setsockopt(SOL_SOCKET, SO_RCVBUFFORCE, INT_MAX) c = socket(AF_INET, SOCK_DGRAM) c.connect(s.getsockname()) data = b'a' * 100 while True: c.send(data)

ÖnemOrta
CVSS5.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın16 Nis 2025
İlk görülme16 Nis 2025

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.4.301, 5.10.246, 5.15.195, 6.1.134, 6.6.87, 6.12.23, 6.13.11, 6.14.2 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel4.10 ≤ v < 5.4.301, 5.5 ≤ v < 5.10.246, 5.11 ≤ v < 5.15.195, 5.16 ≤ v < 6.1.134, 6.2 ≤ v < 6.6.87, 6.7 ≤ v < 6.12.23, 6.13 ≤ v < 6.13.11, 6.14 ≤ v < 6.14.25.4.301, 5.10.246, 5.15.195, 6.1.134, 6.6.87, 6.12.23, 6.13.11, 6.14.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-2025-22058 · Linux Kernel · Dark Radar