CVE-2024-26853

Kritik

Açıklama

Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: igc: XDP_REDIRECT sırasında çerçevenin iki kez döndürülmesinin önlenmesi XDP_REDIRECT işleminde bir çerçeve iletilemediğinde (örneğin kuyruğun dolu olması nedeniyle), xdp_return_frame_rx_napi çağrılarak serbest bırakılması gerekir. Ancak bu durum, ndo_xdp_xmit fonksiyonunu çağıran tarafın sorumluluğundadır (örnek olarak kernel/bpf/devmap.c içindeki bq_xmit_all'e bakınız); dolayısıyla bunun igc sürücüsünün ndo_xdp_xmit fonksiyonu olan igc_xdp_xmit içerisinde de çağrılması bellek bozulmasına yol açacaktır. Aslında bq_xmit_all, başarıyla iletilen son çerçeveden sonraki tüm çerçeveleri döndürebilmeyi bekler. Bu nedenle, iletilemeyen ilk çerçevede döngüden çıkılmalı ancak igc_xdp_xmit içinde xdp_return_frame_rx_napi çağrılmamalıdır. Bu yöntem, igb gibi diğer Intel sürücülerinde de aynı şekilde uygulanmıştır. Reddedilen iki alternatif şunlardır: 1. Tüm çerçeveler iletilmiş gibi num_frames değerini döndürmek ve bunları igc_xdp_xmit içinde serbest bırakmak. Teknik olarak çalışabilse de, dönüş değerinin temsil etmesi gereken anlamla (yani BAŞARIYLA iletilen paket sayısı) örtüşmemektedir. 2. Ardışık olmayan şekilde düşürülen paketleri desteklemek için kernel/bpf/devmap.c dosyasını ve tüm sürücüleri yeniden düzenlemek. Karmaşık olmasının yanı sıra, önceki çerçeve düşürüldüğünde bir sonrakinin iletilme olasılığı düşük olduğundan, önemli bir kazanç sağlamadan muhtemelen performans üzerinde olumsuz bir etki yaratacaktır. Bellek bozulması, birkaç saniye sonra kernel panic ile sonuçlanan aşağıdaki betikle yeniden üretilebilir. Betik temel olarak, bir i225 NIC kartının iletebileceğinden daha fazla trafik oluşturur ve bunu sanal bir arayüzden fiziksel arayüze XDP_REDIRECT aracılığıyla yönlendirerek çerçevelerin düşmesine neden olur. #!/bin/bash INTERFACE=enp4s0 INTERFACE_IDX=`cat /sys/class/net/$INTERFACE/ifindex` sudo ip link add dev veth1 type veth peer name veth2 sudo ip link set up $INTERFACE sudo ip link set up veth1 sudo ip link set up veth2 cat << EOF > redirect.bpf.c SEC("prog") int redirect(struct xdp_md *ctx) { return bpf_redirect($INTERFACE_IDX, 0); } char _license[] SEC("license") = "GPL"; EOF clang -O2 -g -Wall -target bpf -c redirect.bpf.c -o redirect.bpf.o sudo ip link set veth2 xdp obj redirect.bpf.o cat << EOF > pass.bpf.c SEC("prog") int pass(struct xdp_md *ctx) { return XDP_PASS; } char _license[] SEC("license") = "GPL"; EOF clang -O2 -g -Wall -target bpf -c pass.bpf.c -o pass.bpf.o sudo ip link set $INTERFACE xdp obj pass.bpf.o cat << EOF > trafgen.cfg { /* Ethernet Header */ 0xe8, 0x6a, 0x64, 0x41, 0xbf, 0x46, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, const16(ETH_P_IP), /* IPv4 Header */ 0b01000101, 0, # IPv4 version, IHL, TOS const16(1028), # IPv4 total length (UDP length + 20 bytes (IP header)) const16(2), # IPv4 ident 0b01000000, 0, # IPv4 flags, fragmentation off 64, # IPv4 TTL 17, # Protocol UDP csumip(14, 33), # IPv4 checksum /* UDP Header */ 10, 0, 1, 1, # IP Src - adapt as needed 10, 0, 1, 2, # IP Dest - adapt as needed const16(6666), # UDP Src Port const16(6666), # UDP Dest Port const16(1008), # UDP length (UDP header 8 bytes + payload length) csumudp(14, 34), # UDP checksum /* Payload */ fill('W', 1000), } EOF sudo trafgen -i trafgen.cfg -b3000MB -o veth1 --cpp

ÖnemKritik
CVSS9.8
İstismar olasılığı50. yüzdelik%0,6
ÜrünLinux Kernel
Yayın17 Nis 2024
İlk görülme17 Nis 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.1.82, 6.6.22, 6.7.10 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel5.13 ≤ v < 6.1.82, 6.2 ≤ v < 6.6.22, 6.7 ≤ v < 6.7.10, 6.86.1.82, 6.6.22, 6.7.10

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-2024-26853 · Linux Kernel · Dark Radar