CVE-2026-93164

Belirsiz

Açıklama

Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: uprobes/x86: Optimize edilmiş uprobe'un nop5'ten nop10'a taşınması Andrii, optimize edilmiş uprobe'lar ile ilgili olarak [1], kullanıcı kodunun rsp değerini ayarlamadan geçici verileri tutabildiği durumlarda, yığın üzerinde dönüş adresini saklayan call talimatının redzone alanını bozabileceği bir sorun bildirmiştir. Bu durum, optimize edilmiş uprobe'ların 10 baytlık nop talimatı üzerine taşınarak düzeltilmiştir; böylece call işlemini gerçekleştirmeden önce redzone alanından çıkmak için araya başka bir talimat sıkıştırılabilir: lea -0x80(%rsp), %rsp call tramp lea talimatının, flag'leri değiştirmeden rsp kaydıcısını ayarlamak için kullanıldığına dikkat edilmelidir. Peterz tarafından önerildiği üzere [2], nop10 ve yukarıdaki optimize edilmiş talimatlara gidiş-dönüş için şu dönüşümler kullanılmaktadır: Optimizasyon yolu (int3_update_optimize): 1) set_swbp() uprobe'u kurduktan sonraki başlangıç durumu: cc 2e 0f 1f 84 00 00 00 00 00 0 ofsetinden itibaren bu, orijinal 10 baytlık NOP'un kuyruğunu takip eden bir INT3'tür. Önceki bir optimizasyon kaldırma işleminden sonra, 5..9 arasındaki baytlar hala eski call talimatını içeriyor olabilir ve bu, halihazırda orada olan iş parçacıkları için geçerliliğini korur. 2) LEA kuyruğunun ve call yer değiştirme değerinin yeniden yazılması: cc [8d 64 24 80 e8 d0 d1 d2 d3] 0 ofsetinden itibaren bu, uprobe INT3 üzerinde tuzak kurar. Bayt 0 tuzaklanmışken, 1..9 arasındaki baytlar yürütülebilir giriş noktaları değildir. 3) İlk LEA baytının yayınlanması: [48] 8d 64 24 80 e8 d0 d1 d2 d3 0 ofsetinden itibaren şudur: lea -0x80(%rsp), %rsp call <uprobe-trampoline> Optimizasyon kaldırma yolu (int3_update_unoptimize): 1) Başlangıç optimize durumu: 48 8d 64 24 80 e8 d0 d1 d2 d3 Yukarıdaki 3. adım ile aynıdır. 2) NOP baytları geri yüklenmeden önce yeni girişlerin tuzaklanması: [cc] 8d 64 24 80 e8 d0 d1 d2 d3 0 ofsetinden itibaren bu tuzak kurar. Halihazırda LEA işlemini yürütmüş bir iş parçacığı, 5. ofsetteki sağlam CALL talimatına hala ulaşabilir. 3) Bayt 0 tuzaklıyken ve bayt 5 CALL olarak kalırken, orijinal NOP'un 1..4 arasındaki baytlarının geri yüklenmesi: cc [2e 0f 1f 84] e8 d0 d1 d2 d3 0 ofsetinden itibaren bu hala tuzak kurar. Ofset 5, ilk LEA baytını geçmiş herhangi bir iş parçacığı için hala CALL'dur. 4) Orijinal NOP'un ilk baytının yayınlanması: [66] 2e 0f 1f 84 e8 d0 d1 d2 d3 0 ofsetinden itibaren bu, geri yüklenen 10 baytlık NOP'tur; CALL opcode'u ve yer değiştirme değeri artık yalnızca NOP operandlarıdır. Ofset 5, halihazırda orada bulunan bir iş parçacığı için hala CALL olarak çözümlenir. Verilen nop10 talimat adresi için tek bir hedef uprobe-trampoline vardır, dolayısıyla CALL talimatı optimizasyon kaldırma/optimizasyon döngüleri boyunca değişmeyecektir. Bu nedenle, CALL talimatında öncelikli olarak kesilen (preempted) herhangi bir görevin, başka bir şey değil, o CALL'u gözlemleyeceği garanti edilir. [2]'de açıklandığı gibi, şu nop10'un kullanılması gerekmektedir: PF1 PF2 ESC NOPL MOD SIB DISP32 NOP10: 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 -- cs nopw 0x00000000(%rax,%rax,1) bu da is_prefix_bad fonksiyonunda INAT_PFX_CS özniteliğine eşleşen 0x2e önekine izin vermemiz gerektiği anlamına gelir. Ayrıca, sabitlenmiş çekirdeği tespit edebilmek için, uprobe trampoline dışından çağrıldığında dönen uprobe sistem çağrısı hatası -EPROTO olarak değiştirilmiştir. Optimize edilmiş uprobe performansı aynı kalmıştır: uprobe-nop : 3.129 ± 0.013M/s uprobe-push : 3.045 ± 0.006M/s uprobe-ret : 1.095 ± 0.004M/s --> uprobe-nop10 : 7.170 ± 0.020M/s uretprobe-nop : 2.143 ± 0.021M/s uretprobe-push : 2.090 ± 0.000M/s uretprobe-ret : 0.942 ± 0.000M/s --> uretprobe-nop10: 3.381 ± 0.003M/s usdt-nop : 3.245 ± 0.004M/s --> usdt-nop10 : 7.256 ± 0.023M/s [1] https://lore.kernel.org/bpf/[email protected]/ [2] https://lore.kernel.org/bpf/[email protected]/#t

ÖnemBelirsiz
CVSS—
İstismar olasılığı—
ÜrünLinux
Yayın17 Eyl 2026
İlk görülme17 Eyl 2026

Nasıl düzeltilir

Güncelleyin
  • Linux Linux7abc9b49ad01a179e893ba137364a560e21b09f8, 1b3fecd09910040668b752f3377d7218ca5c59ac, 554ba38456dad8053a1a80afe6ae6da9eff745cc ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
Linux Linuxba2bfc97b4629b10bd8d02b36e04f3932a04cac4 ≤ v < 7abc9b49ad01a179e893ba137364a560e21b09f8, ba2bfc97b4629b10bd8d02b36e04f3932a04cac4 ≤ v < 1b3fecd09910040668b752f3377d7218ca5c59ac, ba2bfc97b4629b10bd8d02b36e04f3932a04cac4 ≤ v < 554ba38456dad8053a1a80afe6ae6da9eff745cc, 6.187abc9b49ad01a179e893ba137364a560e21b09f8, 1b3fecd09910040668b752f3377d7218ca5c59ac, 554ba38456dad8053a1a80afe6ae6da9eff745cc

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-2026-93164 · Linux · Dark Radar