CVE-2024-50118
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: btrfs: sert ro gereksinimleri varsa ro->rw yeniden yapılandırmasını reddet [BUG] Syzbot şu çökmeyi raporlamaktadır: BTRFS info (device loop0 state MCS): disabling free space tree BTRFS info (device loop0 state MCS): clearing compat-ro feature flag for FREE_SPACE_TREE (0x1) BTRFS info (device loop0 state MCS): clearing compat-ro feature flag for FREE_SPACE_TREE_VALID (0x2) Oops: general protection fault, probably for non-canonical address 0xdffffc0000000003: 0000 [#1] PREEMPT SMP KASAN NOPTI KASAN: null-ptr-deref in range [0x0000000000000018-0x000000000000001f] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014 RIP: 0010:backup_super_roots fs/btrfs/disk-io.c:1691 [inline] RIP: 0010:write_all_supers+0x97a/0x40f0 fs/btrfs/disk-io.c:4041 Call Trace: <TASK> btrfs_commit_transaction+0x1eae/0x3740 fs/btrfs/transaction.c:2530 btrfs_delete_free_space_tree+0x383/0x730 fs/btrfs/free-space-tree.c:1312 btrfs_start_pre_rw_mount+0xf28/0x1300 fs/btrfs/disk-io.c:3012 btrfs_remount_rw fs/btrfs/super.c:1309 [inline] btrfs_reconfigure+0xae6/0x2d40 fs/btrfs/super.c:1534 btrfs_reconfigure_for_mount fs/btrfs/super.c:2020 [inline] btrfs_get_tree_subvol fs/btrfs/super.c:2079 [inline] btrfs_get_tree+0x918/0x1920 fs/btrfs/super.c:2115 vfs_get_tree+0x90/0x2b0 fs/super.c:1800 do_new_mount+0x2be/0xb40 fs/namespace.c:3472 do_mount fs/namespace.c:3812 [inline] __do_sys_mount fs/namespace.c:4020 [inline] __se_sys_mount+0x2d6/0x3c0 fs/namespace.c:3997 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x77/0x7f [NEDEN] Yeni mount API'leri için farklı alt bölümlerin (subvolume) farklı RO/RW bayraklarıyla bağlanmasını desteklemek amacıyla, btrfs bu özelliği desteklemek için iki geçici çözüm getirmiştir: - Farklı bir alt bölüm bağlanıyorsa mount seçeneği/özellik kontrollerini atla - İlk bağlantı RO ise dosya sistemini RW olarak yeniden yapılandır Bu ikisi birleştiğinde şu senaryo oluşabilir: - Dosya sistemi ro,rescue=all,clear_cache,space_cache=v1 ile bağlanır. rescue=all, dosya sistemini sert salt okunur (hard read-only) olarak işaretler, böylece v2 önbellek temizleme işlemi gerçekleşmez. - Aynı dosya sisteminin bir alt bölümü rw olarak bağlanır. btrfs_get_tree_subvol() fonksiyonuna girilir ancak yeni fc RW olduğu ve orijinal dosya sisteminden farklı olduğu için fc_mount() EBUSY döndürür. Ardından mevcut fs_info bilgisini alabilmek için önce RO bayrağını değiştiren btrfs_reconfigure_for_mount() fonksiyonuna girilir ve ardından dosya sistemi RW olarak yeniden yapılandırılır. - Yeniden yapılandırma sırasında seçenek/özellik kontrolü atlanır. Bu durum, v2 önbellek temizlemenin yeniden başlatılacağı ve tekrar v1 önbelleğe dönüştürüleceği anlamına gelir. Bu işlem dosya sistemi yazmalarını tetikler ve orijinal dosya sistemi "rescue=all" seçeneğine sahip olduğundan, csum ağacı okuması atlanır. Bu durum nihayetinde süper blok geri yazımında (writeback) NULL işaretçi referansına (NULL pointer dereference) neden olur. [ÇÖZÜM] Farklı alt bölüm RO/RW bayraklarının neden olduğu yeniden yapılandırmalar için, uygun sert RO gereksinimlerinin karşılandığından emin olmak adına her zaman btrfs_check_options() fonksiyonunun çalıştırılması sağlanmıştır. Aslında btrfs_check_options() fonksiyonu çok karmaşık kontroller yapmamakta; yalnızca sert RO gereksinimlerini ve bazı özellik bağımlılıklarını kontrol etmektedir, dolayısıyla mount yeniden yapılandırması için bu kontrolün yapılmamasının özel bir nedeni yoktur.
Nasıl düzeltilir
- linux linux_kernel6.11.6 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 | 6.8 ≤ v < 6.11.6, 6.12 | 6.11.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.
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.