CVE-2025-38670
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: arm64/entry: cpu_switch_to() ve call_on_irq_stack() fonksiyonlarında DAIF maskelendi `cpu_switch_to()` ve `call_on_irq_stack()` fonksiyonları, etkinleştirilmişse Shadow Call Stack ile birlikte farklı yığınlara geçmek için SP'yi manipüle eder. Bu iki yığın değişikliği atomik olarak yapılamaz ve her iki fonksiyon da düşük bir ihtimal olsa da SError veya Debug Exception tarafından kesintiye uğratılabilir; bu durum ciddi sorunlara yol açar: Kesinti oluşursa, uyumsuz yığınlar ve Shadow Call Stack durumu ortaya çıkabilir, bu da yığınların bozulmasına neden olur. `cpu_switch_to()` fonksiyonunda bu durum, SP_EL0 yeni görevi işaret ederken x18'in hala eski görevin SCS'sini işaret ettiği sırada gerçekleşebilir. Kesme işleyicisi görevin SCS işaretçisini kaydetmeye çalıştığında, eski görev SCS işaretçisini (x18), SP_EL0 tarafından işaret edilen yeni görev yapısına kaydederek onu bozar. `call_on_irq_stack()` fonksiyonunda ise bu durum, görev yığından IRQ yığınına geçerken ve geri dönerken meydana gelebilir. Her iki durumda da, SCS işaretçisi IRQ SCS'yi işaret ederken ancak SP görev yığınını işaret ederken kesintiye uğrayabiliriz. İç içe geçmiş kesme işleyicisi, dönüş adreslerini IRQ SCS üzerine iter. Ardından SP'nin görev yığınını işaret ettiğini tespit eder, `call_on_irq_stack()` fonksiyonunu çağırır ve görev SCS işaretçisini, kendisinin de kullanacağı IRQ SCS işaretçisiyle bozarak değiştirir! Bu durum, görevlerin yanlış SCS üzerindeki veya hatta IRQ SCS üzerindeki adreslere dönmesine yol açarak, eğer etkinleştirilmişlerse CONFIG_VMAP_STACK veya FPAC aracılığıyla kernel panic tetikler. Bu durum varsayılan konfigürasyonda mümkündür ancak düşük bir ihtimaldir. Ancak, CONFIG_ARM64_PSEUDO_NMI etkinleştirildiğinde DAIF maskesi kaldırılır ve bunun yerine önceliğe bağlı olarak işlemcinin hangi kesmeleri alacağını filtrelemekten GIC sorumlu olur. NMI'ları emüle etme hedefi göz önüne alındığında, pseudo-NMI'lar sistem konfigürasyonuna ve iş yüküne bağlı olarak `cpu_switch_to()` ve `call_on_irq_stack()` fonksiyonlarında bile muhtemelen *çok* sık alınabilir ve öngörülemeyen kernel panic'lere yol açabilir. `cpu_switch_to()` fonksiyonunda DAIF tamamen maskelenmiş ve dönüşte geri yüklenmiştir. Aynı işlem `call_on_irq_stack()` fonksiyonunda da uygulanmış, ancak geri yükleme ve maskeleme işlemi dallanma (branch) çevresinde gerçekleştirilmiştir. Tüm konfigürasyonlar arasında davranış tutarlılığı sağlamak amacıyla, CONFIG_SHADOW_CALL_STACK etkin olmasa bile DAIF maskelenmektedir. Mevcut makro sadece IF'yi maskelediği için, DAIF'yi kaydetmek ve maskelemek üzere yeni bir assembly makrosu tanıtılmış ve kullanılmıştır.
Nasıl düzeltilir
- linux linux_kernel5.10.210, 5.15.190, 6.1.149, 6.6.101, 6.12.41, 6.15.9 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.10.180 ≤ v < 5.10.210, 5.15.111 ≤ v < 5.15.190, 6.1.28 ≤ v < 6.1.149, 6.2.15 ≤ v < 6.6.101, 6.7 ≤ v < 6.12.41, 6.13 ≤ v < 6.15.9, 6.16 | 5.10.210, 5.15.190, 6.1.149, 6.6.101, 6.12.41, 6.15.9 |
| 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.