Zafiyet.live Keşfet. Değerlendir. Düzelt. Doğrula.
  • Yama var
  • Son 7 gün

CVE-2026-98959

Linux btrfs çekirdek: xattr değiştirirken dosya sistemi bozulması

Linux

Kritik 9,8 CVSS 3.1
Yayımlandı
Güncellendi
24 Eki 2026
Açık yaşı
5 gün
Kaydı açan
Linux

Yönetici özeti

Bu açık, sunucularda kullanılan Linux çekirdeğinde veri bozulmasına ve sistemin durmasına yol açabilecek bir risk oluşturuyor. Uzaktan ve kimlik doğrulaması olmadan istismar edilebildiği için öncelikli olarak ele alınmalı. Güncelleme yapılana kadar etkilenen sunucular dikkatle izlenmelidir.

ÖzetTürkçe

Linux çekirdeğinin btrfs dosya sisteminde, aynı dizin öğesinde birden fazla genişletilmiş öznitelik (xattr) bulunduğunda ve bunlardan birinin değeri farklı boyutta değiştirildiğinde, yeni veri yapısı tam olarak başlatılmıyor. Bu durum, ağaç denetleyicisi tarafından yakalanan dosya sistemi bozulmasına ve işlemin iptal edilmesine yol açıyor. Etkilenen sürümler, veri kaynağında belirtilen Linux çekirdek dallarıdır.

Saldırgan ne yapabilir?

Bir saldırgan, veri kaynağındaki CVSS vektörüne göre ağ üzerinden ve kimlik doğrulaması olmadan dosya sistemi meta verilerini bozarak veri bütünlüğünü ve sistemin erişilebilirliğini etkileyebilir. Çekirdek uyarıları ve işlem iptalleri sistemin kararsızlaşmasına neden olabilir.

Kaynaktaki açıklama (İngilizce)

In the Linux kernel, the following vulnerability has been resolved:

btrfs: fix xattr replace when multiple xattrs are packed in the same item

If we have a btrfs_dir_item item that packs multiple xattrs and then we
replace the value of one of them (with the setxattr(2) family of syscalls)
with another value of a different size, we end up not having a fully
initialized btrfs_dir_item, resulting in a corruption that the tree
checker will detect at extent buffer writeback time.

This is because in btrfs_setxattr() when we find a btrfs_dir_item with
multiple xattrs (due to the crc32c hash of their name being the same)
we delete one of the xattr items (btrfs_dir_item) and then insert a new
one, but the deletion and insertion results in shifting existing data in
the leaf and therefore when the new value of a xattr has a different size,
the new btrfs_dir_item is placed in a leaf section that was not
initialized and we only copy the value's data and set the value's length
in the new btrfs_dir_item, without setting the name, the name's length,
the key (which must be all zeroes for xattrs), flags (BTRFS_FT_XATTR) and
transaction ID.

The following script reproduces the issue:

$ cat test.sh
#!/bin/bash

DEV=/dev/sdi
MNT=/mnt/sdi

mkfs.btrfs -f $DEV
mount $DEV $MNT

touch $MNT/testfile

# Add two xattrs that, on btrfs, have the same hash (crc32c) for their
# name and therefore are packed into the same btrfs_dir_item.
setfattr -n user.foobar -v 123 $MNT/testfile
setfattr -n user.WvG1c1Td -v qwerty $MNT/testfile

# Verify the xattrs are present.
echo "xattrs before:"
getfattr --absolute-names --dump $MNT/testfile

# Now replace the value of the foobar xattr with a significantly larger
# value.
setfattr -n user.foobar -v abcdefghijklmnopqrstuvwxyz $MNT/testfile

# Check the xattrs have the expected values.
echo "xattrs after:"
getfattr --absolute-names --dump $MNT/testfile

umount $MNT

Running it:

$ ./test.sh
(...)
xattrs before:
# file: /mnt/sdi/testfile
user.WvG1c1Td="qwerty"
user.foobar="123"

xattrs after:
# file: /mnt/sdi/testfile
user.WvG1c1Td="qwerty"

So the "user.foobar" xattr is missing and there was a transaction abort
when unmounting the fs with the following traces in dmesg:

$ dmesg
[869800.159271] BTRFS warning (device sdi): access to eb bytenr 30474240 len 16384 out of range start 16015 len 25964
[869800.159293] ------------[ cut here ]------------
[869800.159296] WARNING: fs/btrfs/extent_io.c:4408 at report_eb_range+0x44/0x60 [btrfs], CPU#8: getfattr/2605179
[869800.168961] Modules linked in: btrfs dm_thin_pool (...)
[869800.190527] CPU: 8 UID: 0 PID: 2605179 Comm: getfattr Tainted: G W 7.3.0-rc3-btrfs-next-244+ #1 PREEMPT(full)
[869800.193726] Tainted: [W]=WARN
[869800.194502] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
[869800.197576] RIP: 0010:report_eb_range+0x44/0x60 [btrfs]
[869800.198985] Code: 48 8b 7b 18 (...)
[869800.203531] RSP: 0018:ffffce4541937d58 EFLAGS: 00010246
[869800.204609] RAX: 0000000000000000 RBX: ffff8dde054b8738 RCX: 0000000000000000
[869800.206137] RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffffffffc04c92a0
[869800.207645] RBP: 0000000000003e8f R08: 0000000000000000 R09: 3fffffffffefffff
[869800.226175] R10: ffffce4541937a88 R11: 0000000000000003 R12: 000000000000656c
[869800.227594] R13: ffff8dde14be800f R14: 000000000000656c R15: 0000000000000069
[869800.229097] FS: 00007f59023bb780(0000) GS:ffff8de5788ed000(0000) knlGS:0000000000000000
[869800.231137] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[869800.232321] CR2: 0000558dc45e6a78 CR3: 0000000765b16004 CR4: 0000000000370ef0
[869800.233783] Call Trace:
[869800.234330] <TASK>
[869800.234791] read_extent_buffer+0x4d/0x100 [btrfs]
[869800.235898] btrfs_listxattr+0x199/0x240 [btrfs]
[869800.236912] vfs_listxattr+0x51/0
---truncated---

Ne yapmalı?

  1. Linux çekirdeğini, veri kaynağında düzeltilmiş olarak belirtilen dallardan (3.11, 3.13, 3.15 ve 3.19) biri ya da daha yeni bir kararlı sürüme yükseltin. Veri kaynağına göre 6.6.160, 6.12.113, 6.18.57 ve 7.2.11 ve üzeri sürümler etkilenmiyor. Üretici
  2. Güncelleme yapılana kadar btrfs dosya sistemi kullanan sunucularda genişletilmiş öznitelik değiştirme işlemlerini kısıtlayın ve bu sunuculara erişimi yalnızca güvenilir kullanıcılarla sınırlayın. Genel öneri
  3. Güncelleme sonrasında çalışan çekirdek sürümünü doğrulayın ve sistem günlüklerinde btrfs ile ilgili uyarı veya hata kayıtlarının bulunmadığını kontrol edin. Genel öneri

Ek önlemler

  • Btrfs dosya sistemlerinde düzenli yedekleme alın ve geri yükleme işlemlerini test edin. Genel öneri
  • Çekirdek günlüklerini (dmesg) ve dosya sistemi hata kayıtlarını düzenli olarak izleyin. Genel öneri

Etkilenen sürümler1 yazılım

YazılımEtkilenenDüzeltildiği sürüm
Linux ≥ 3.10.83, < 3.11 3.11
≥ 3.12.45, < 3.13 3.13
≥ 3.14.47, < 3.15 3.15
≥ 3.18.19, < 3.19 3.19
3.19 –
< 3.19 Etkilenmiyor –
≥ 6.6.160 Etkilenmiyor –
≥ 6.12.113 Etkilenmiyor –
≥ 6.18.57 Etkilenmiyor –
≥ 7.2.11 Etkilenmiyor –

Kaynaklar7 kaynak

Kayıt geçmişi

  1. Yayımlandı

İlgili açıklar

Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.