CVE-2022-48744

Yüksek

Açıklama

Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: net/mlx5e: Alan taşmasına neden olan memcpy() kullanımından kaçınılması FORTIFY_SOURCE'un memcpy(), memmove() ve memset() için derleme zamanı ve çalışma zamanı alan sınır kontrollerini gerçekleştirmesine hazırlık amacıyla, komşu alanların üzerine kasıtlı olarak yazmaktan kaçının. Sıfır elemanlı diziler yerine esnek diziler kullanın (bunlar her zaman taşma yapıyormuş gibi görünür) ve alanlar arası memcpy() işlemini, derleyici tarafından uygun şekilde sınır kontrolü yapılabilecek iki yarıya bölün. Şu işlem gerçekleştiriliyordu: #define ETH_HLEN 14 #define VLAN_HLEN 4 ... #define MLX5E_XDP_MIN_INLINE (ETH_HLEN + VLAN_HLEN) ... struct mlx5e_tx_wqe *wqe = mlx5_wq_cyc_get_wqe(wq, pi); ... struct mlx5_wqe_eth_seg *eseg = &wqe->eth; struct mlx5_wqe_data_seg *dseg = wqe->data; ... memcpy(eseg->inline_hdr.start, xdptxd->data, MLX5E_XDP_MIN_INLINE); Hedef wqe->eth.inline_hdr.start (derleyicinin 2 bayt boyutunda gördüğü yerdir), ancak start (aslında vlan_tci, 2 bayt) üzerinden yazmak amacıyla 18 bayt kopyalanmaktadır. Kalan 16 bayt ise byte_count (4 bayt), lkey (4 bayt) ve addr (8 bayt) alanlarını kapsayacak şekilde wqe->data[0] içine yazılmaktadır. struct mlx5e_tx_wqe { struct mlx5_wqe_ctrl_seg ctrl; /* 0 16 */ struct mlx5_wqe_eth_seg eth; /* 16 16 */ struct mlx5_wqe_data_seg data[]; /* 32 0 */ /* size: 32, cachelines: 1, members: 3 */ /* last cacheline: 32 bytes */ }; struct mlx5_wqe_eth_seg { u8 swp_outer_l4_offset; /* 0 1 */ u8 swp_outer_l3_offset; /* 1 1 */ u8 swp_inner_l4_offset; /* 2 1 */ u8 swp_inner_l3_offset; /* 3 1 */ u8 cs_flags; /* 4 1 */ u8 swp_flags; /* 5 1 */ __be16 mss; /* 6 2 */ __be32 flow_table_metadata; /* 8 4 */ union { struct { __be16 sz; /* 12 2 */ u8 start[2]; /* 14 2 */ } inline_hdr; /* 12 4 */ struct { __be16 type; /* 12 2 */ __be16 vlan_tci; /* 14 2 */ } insert; /* 12 4 */ __be32 trailer; /* 12 4 */ }; /* 12 4 */ /* size: 16, cachelines: 1, members: 9 */ /* last cacheline: 16 bytes */ }; struct mlx5_wqe_data_seg { __be32 byte_count; /* 0 4 */ __be32 lkey; /* 4 4 */ __be64 addr; /* 8 8 */ /* size: 16, cachelines: 1, members: 3 */ /* last cacheline: 16 bytes */ }; Bu nedenle, derleyicinin tampon boyutları hakkında muhakeme yapabilmesi için memcpy() işlemi bölünmüştür. "pahole", struct mlx5e_tx_wqe veya struct mlx5e_umr_wqe üzerinde herhangi bir boyut veya üye ofset değişikliği göstermemektedir. "objdump -d" anlamlı bir nesne kodu değişikliği göstermemektedir (yani sadece kaynak satır numarası kaynaklı farklılıklar ve optimizasyonlar mevcuttur).

ÖnemYüksek
CVSS7.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın20 Haz 2024
İlk görülme20 Haz 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.10.248, 5.16.6 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel4.9 ≤ v < 5.10.248, 5.11 ≤ v < 5.16.6, 5.175.10.248, 5.16.6

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-2022-48744 · Linux Kernel · Dark Radar