CVE-2024-46734

Yüksek

Açıklama

Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: btrfs: aynı fd kullanılırken doğrudan IO yazma ve fsync arasındaki yarış durumu düzeltildi Aynı dosya tanımlayıcısını (file descriptor) kullanan iki iş parçacığından biri doğrudan IO yazma işlemleri yaparken diğeri fsync işlemi gerçekleştiriyorsa, şu sonuçlarla biten bir yarış durumu oluşmaktadır: 1) Inode kilidi tutulmadan bir fsync denemesi yapılır ve assertionlar etkinleştirilmişse assertion hataları tetiklenir; 2) Dosyanın özel alanı (private), doğrudan IO iş parçacığı tarafından yığında (stack) tahsis edilen belleğe işaret ettiği için, yığın yok edildikten sonra fsync görevi tarafından kullanılması durumunda geçersiz bellek erişimi gerçekleşir. Yarış durumu şu şekilde meydana gelir: 1) Bir kullanıcı alanı programı, O_DIRECT ile bir dosya tanımlayıcısı açar; 2) Program, örneğin libpthread kullanarak 2 iş parçacığı oluşturur; 3) İş parçacıklarından biri dosya tanımlayıcısını doğrudan IO yazmaları yapmak için kullanırken, diğeri aynı dosya tanımlayıcısını kullanarak fsync çağrısı yapar. 4) Doğrudan IO yazmaları yapan iş parçacığına Görev A, fsync işlemlerini yapan iş parçacığına ise Görev B denilsin; 5) Görev A bir doğrudan IO yazma işlemi gerçekleştirir ve btrfs_direct_write() fonksiyonunda, dosyanın özel alanını (private), 'fsync_skip_inode_lock' üyesi true olarak ayarlanmış yığında tahsis edilmiş bir yapıya atar; 6) Görev B, btrfs_sync_file() fonksiyonuna girer ve dosyaya ilişkili olan ve 'fsync_skip_inode_lock' değeri true olan bir özel yapı olduğunu görür, bu nedenle inode'un VFS kilidini kilitlemeyi atlar; 7) Görev A doğrudan IO yazma işlemini tamamlar ve daha önce mevcut bir özel yapı olmadığı ve bizim yapımız yığında tahsis edildiği için dosyanın özel alanını NULL olarak sıfırlar. Ardından inode'un VFS kilidini açar; 8) Görev B, btrfs_get_ordered_extents_for_logging() fonksiyonuna girer; Görev B hiçbir zaman kilitlemediği ve Görev A zaten kilidi açtığı için, inode'un VFS kilidinin tutulduğunu kontrol eden assertion başarısız olur. Üretilen yığın izi (stack trace) şöyledir: assertion failed: inode_is_locked(&inode->vfs_inode), in fs/btrfs/ordered-data.c:983 ------------[ cut here ]------------ kernel BUG at fs/btrfs/ordered-data.c:983! Oops: invalid opcode: 0000 [#1] PREEMPT SMP PTI CPU: 9 PID: 5072 Comm: worker Tainted: G U OE 6.10.5-1-default #1 openSUSE Tumbleweed 69f48d427608e1c09e60ea24c6c55e2ca1b049e8 Hardware name: Acer Predator PH315-52/Covini_CFS, BIOS V1.12 07/28/2020 RIP: 0010:btrfs_get_ordered_extents_for_logging.cold+0x1f/0x42 [btrfs] Code: 50 d6 86 c0 e8 (...) RSP: 0018:ffff9e4a03dcfc78 EFLAGS: 00010246 RAX: 0000000000000054 RBX: ffff9078a9868e98 RCX: 0000000000000000 RDX: 0000000000000000 RSI: ffff907dce4a7800 RDI: ffff907dce4a7800 RBP: ffff907805518800 R08: 0000000000000000 R09: ffff9e4a03dcfb38 R10: ffff9e4a03dcfb30 R11: 0000000000000003 R12: ffff907684ae7800 R13: 0000000000000001 R14: ffff90774646b600 R15: 0000000000000000 FS: 00007f04b96006c0(0000) GS:ffff907dce480000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f32acbfc000 CR3: 00000001fd4fa005 CR4: 00000000003726f0 Call Trace: <TASK> ? __die_body.cold+0x14/0x24 ? die+0x2e/0x50 ? do_trap+0xca/0x110 ? do_error_trap+0x6a/0x90 ? btrfs_get_ordered_extents_for_logging.cold+0x1f/0x42 [btrfs bb26272d49b4cdc847cf3f7faadd459b62caee9a] ? exc_invalid_op+0x50/0x70 ? btrfs_get_ordered_extents_for_logging.cold+0x1f/0x42 [btrfs bb26272d49b4cdc847cf3f7faadd459b62caee9a] ? asm_exc_invalid_op+0x1a/0x20 ? btrfs_get_ordered_extents_for_logging.cold+0x1f/0x42 [btrfs bb26272d49b4cdc847cf3f7faadd459b62caee9a] ? btrfs_get_ordered_extents_for_logging.cold+0x1f/0x42 [btrfs bb26272d49b4cdc847cf3f7faadd459b62caee9a] btrfs_sync_file+0x21a/0x4d0 [btrfs bb26272d49b4cdc847cf3f7faadd459b62caee9a] ? __seccomp_filter+0x31d/0x4f0 __x64_sys_fdatasync+0x4f/0x90 do_syscall_64+0x82/0x160 ? do_futex+0xcb/0x190 ? __x64_sys_futex+0x10e/0x1d0 ? switch_fpu_return+0x4f/0xd0 ? syscall_exit_to_user_mode+0x72/0x220 ? do_syscall_64+0x8e/0x160 ? syscall_exit_to_user_mod ---kesildi---

ÖnemYüksek
CVSS7.8
İstismar olasılığı—
ÜrünLinux Kernel
Yayın18 Eyl 2024
İlk görülme18 Eyl 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel5.15.167, 6.1.110, 6.6.51, 6.10.10 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel5.15.165 ≤ v < 5.15.167, 6.1.105 ≤ v < 6.1.110, 6.6.46 ≤ v < 6.6.51, 6.10.5 ≤ v < 6.10.10, 6.115.15.167, 6.1.110, 6.6.51, 6.10.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.