CVE-2024-45003

Orta

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: vfs: inode lru gezinti bağlamı altında inode tahliye etmeyin Inode geri kazanım süreci (bkz. prune_icache_sb fonksiyonu), önce geri kazanılabilir tüm inode'ları toplar ve bunları I_FREEING bayrağı ile işaretler; bu sırada diğer süreçler bu inode'ları almaya çalışırlarsa takılırlar (bkz. find_inode_fast fonksiyonu), ardından geri kazanım süreci dispose_list() fonksiyonu ile inode'ları yok eder. Bazı dosya sistemleri (örneğin ea_inode özelliğine sahip ext4 veya xattr içeren ubifs), inode tahliye geri çağırma fonksiyonunda inode araması yapabilir; eğer inode araması inode lru gezinti bağlamı altında gerçekleştirilirse, ölü kilitleme (deadlock) sorunları meydana gelebilir. Durum 1: ext4_evict_inode() fonksiyonunda, ea_inode özelliği etkinse ea inode araması gerçekleşebilir ve arama süreci tahliye bağlamı altında şu şekilde takılır: 1. Dosya A, i_reg inode'una ve bir ea inode olan i_ea'ya sahiptir. 2. getfattr(A, xattr_buf) // i_ea lru'ya eklenir // lru->i_ea 3. Ardından, aşağıdaki üç süreç şu şekilde çalışır: PA PB echo 2 > /proc/sys/vm/drop_caches shrink_slab prune_dcache_sb // i_reg lru'ya eklenir, lru->i_ea->i_reg prune_icache_sb list_lru_walk_one inode_lru_isolate i_ea->i_state |= I_FREEING // inode durumu ayarlanır inode_lru_isolate __iget(i_reg) spin_unlock(&i_reg->i_lock) spin_unlock(lru_lock) rm file A i_reg->nlink = 0 iput(i_reg) // i_reg->nlink 0'dır, tahliye edilir ext4_evict_inode ext4_xattr_delete_inode ext4_xattr_inode_dec_ref_all ext4_xattr_inode_iget ext4_iget(i_ea->i_ino) iget_locked find_inode_fast __wait_on_freeing_inode(i_ea) ----→ AA ölü kilitleme dispose_list // prune_icache_sb tarafından yürütülemez wake_up_bit(&i_ea->i_state) Durum 2: Silinen inode yazma fonksiyonu ubifs_jnl_write_inode() içinde, dosya silme süreci xattr inode'unu alırken BASEHD'nin wbuf->io_mutex kilidini tutar; bu durum inode geri kazanım süreciyle yarışabilir (geri kazanım süreci, inode tahliye fonksiyonunda BASEHD'nin wbuf->io_mutex kilidini almaya çalışabilir), böylece aşağıdaki gibi bir ABBA ölü kilitleme sorunu oluşur: 1. Dosya A, ia inode'una ve bir xattr'a (ixa inode'u ile) sahiptir; normal dosya B ise ib inode'una ve bir xattr'a sahiptir. 2. getfattr(A, xattr_buf) // ixa lru'ya eklenir // lru->ixa 3. Ardından, aşağıdaki üç süreç şu şekilde çalışır: PA PB PC echo 2 > /proc/sys/vm/drop_caches shrink_slab prune_dcache_sb // ib ve ia lru'ya eklenir, lru->ixa->ib->ia prune_icache_sb list_lru_walk_one inode_lru_isolate ixa->i_state |= I_FREEING // inode durumu ayarlanır inode_lru_isolate __iget(ib) spin_unlock(&ib->i_lock) spin_unlock(lru_lock) rm file B ib->nlink = 0 rm file A iput(ia) ubifs_evict_inode(ia) ubifs_jnl_delete_inode(ia) ubifs_jnl_write_inode(ia) make_reservation(BASEHD) // wbuf->io_mutex kilitlenir ubifs_iget(ixa->i_ino) iget_locked find_inode_fast __wait_on_freeing_inode(ixa) | iput(ib) // ib->nlink 0'dır, tahliye edilir | ubifs_evict_inode | ubifs_jnl_delete_inode(ib) ↓ ubifs_jnl_write_inode ABBA ölü kilitleme ←-----make_reservation(BASEHD) dispose_list // prune_icache_sb tarafından yürütülemez wake_up_bit(&ixa->i_state) Olası ölü kilitleme sorunu, inode_lru_isolate sırasında inode'u bellekte sabitlemek için yeni I_LRU_ISOLATING inode durum bayrağı kullanılarak düzeltilmiştir.

ÖnemOrta
CVSS4.7
İstismar olasılığı—
ÜrünLinux Kernel
Yayın4 Eyl 2024
İlk görülme4 Eyl 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.4.283, 5.10.225, 5.15.166, 6.1.107, 6.6.48, 6.10.7 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel4.13 ≤ v < 5.4.283, 5.5 ≤ v < 5.10.225, 5.11 ≤ v < 5.15.166, 5.16 ≤ v < 6.1.107, 6.2 ≤ v < 6.6.48, 6.7 ≤ v < 6.10.7, 6.115.4.283, 5.10.225, 5.15.166, 6.1.107, 6.6.48, 6.10.7

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