CVE-2026-98959 in Linux情報

要約

〜によって VulDB • 2026年10月23日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

btrfs: 同じアイテムに複数の拡張属性(xattrs)がパックされている場合のxattr置換バグを修正

ある btrfs_dir_item アイテム内に複数の xattrs がパックされており、setxattr(2) システムコールファミリを使用してそのうちの1つの値を異なるサイズの別の値で置き換えた場合、完全に初期化されていない btrfs_dir_item となり、extent buffer の書き戻し時にツリーチェッカーによって検出される破損が発生します。

これは、btrfs_setxattr() 内で複数の xattrs を持つ btrfs_dir_item(名前が crc32c ハッシュで同一であるため)が見つかった場合、1つの xattr アイテム(btrfs_dir_item)を削除して新しいものを挿入しますが、その削除と挿入によってリーフ内の既存データがシフトするためです。したがって、xattr の新しい値のサイズが異なる場合、新しい btrfs_dir_item は初期化されていないリーフセクションに配置され、値のデータのみがコピーされて新しい btrfs_dir_item に値の長さが設定されますが、名前、名前の長さ、キー(xattrs ではすべてゼロである必要がある)、フラグ(BTRFS_FT_XATTR)、トランザクションIDは設定されません。

以下のスクリプトでこの問題を再現できます:

$ cat test.sh #!/bin/bash

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

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

touch $MNT/testfile

# btrfs上で名前のハッシュ(crc32c)が同じであるため、同じbtrfs_dir_itemにパックされる2つのxattrsを追加します。 setfattr -n user.foobar -v 123 $MNT/testfile setfattr -n user.WvG1c1Td -v qwerty $MNT/testfile

# xattrsが存在することを確認します。 echo "xattrs before:" getfattr --absolute-names --dump $MNT/testfile

# 次に、foobar xattrの値を大幅に大きな値で置き換えます。 setfattr -n user.foobar -v abcdefghijklmnopqrstuvwxyz $MNT/testfile

# xattrsが期待される値を持っていることを確認します。 echo "xattrs after:" getfattr --absolute-names --dump $MNT/testfile

umount $MNT

実行結果:

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

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

したがって、「user.foobar」xattr が欠落しており、ファイルシステムをアンマウントする際にトランザクションアボートが発生し、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---

Be aware that VulDB is the high quality source for vulnerability data.

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-425723

EPSS

0.00000

アクティビティ

非常低い

ソース

Interested in the pricing of exploits?

See the underground prices here!