Linux kernel btrfs の xattr 更新で破損、修正版あり
Linux カーネルの btrfs で、ファイルの拡張属性(xattr)の値を別のサイズに書き換えると、属性が消えたりファイルシステムの整合性エラーが起きたりする不具合が見つかりました。btrfs を使っている Linux 環境が対象で、修正版のカーネルが公開されています。まず btrfs の利用有無とカーネルの版を確認し、修正を含む版かディストリビューションの更新を適用してください。
急ぎ度: 早めに
評価値は9.8と高い一方、公表されている再現手順はローカルでの属性操作で、実際の悪用の確認は公表されておらず、影響もbtrfs利用環境に限られるためです。
関係があるか
btrfsをマウントして使っているLinuxサーバー、ワークステーション、一部のNASやコンテナ基盤が対象です。特に、複数の利用者やコンテナが同じbtrfs上でファイルを操作できる環境は優先して確認してください。ext4やXFSだけを使っている環境は、この問題の対象外です。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| Linux kernel(3.19 系から 6.6 系の手前まで) | >= 3.19.0, < 6.6.160 | 6.6.160 |
| Linux kernel(6.7 系から 6.12 系) | >= 6.7.0, < 6.12.113 | 6.12.113 |
| Linux kernel(6.13 系から 6.18 系) | >= 6.13.0, < 6.18.57 | 6.18.57 |
| Linux kernel(6.19 系から 7.2 系) | >= 6.19.0, < 7.2.11 | 7.2.11 |
確かめ方
- 1
uname -rで稼働中のカーネルの版を確認し、上の表の「影響を受ける版」に当てはまるか見ます。 - 2
findmnt -t btrfsでbtrfsがマウントされているか確認します。何も表示されなければ、そのホストは対象外と考えられます。 - 3RHEL系、Debian系、SUSE系などの配布カーネルは、版番号が上の表と一致しなくても修正が取り込まれている場合があります。ディストリビューションのセキュリティ告知でCVE-2026-98959の扱いを確認してください。
- 4NASやアプライアンス製品は、製品ベンダーの告知で対応状況を確認してください。
何が起きたか
Linuxカーネルのファイルシステムbtrfsで、ファイルに付ける追加情報である拡張属性(xattr)の値を書き換えると、場合によって属性が消え、その後ファイルシステムの整合性チェックでエラーが検出される不具合が見つかりました。2026年10月23日にCVE-2026-98959として公表され、修正版のカーネルが出ています。
発生するのは、名前から計算したハッシュ値(crc32c)がたまたま同じになる複数の属性が、btrfsの内部で1つの項目にまとめて保存されているときです。この状態で一方の値を元とは異なるサイズの値に置き換えると、新しい項目が正しく初期化されないまま作られます。再現例では、置き換えたはずの属性が一覧から消え、ファイルシステムのアンマウント時にトランザクションの中断(transaction abort)と、カーネルログへの警告が出ました。
技術的には、btrfs_setxattr() が同居する項目の一つを削除して新しい項目を挿入する際、リーフ内のデータが移動します。サイズが違うと新しい項目が未初期化の領域に置かれますが、コードは値のデータと長さしか設定せず、名前、名前の長さ、キー、種別フラグ、トランザクションIDが設定されません。その結果、ツリーチェッカーが書き戻し時に破損を検出し、btrfs_listxattr から呼ばれる読み出しでも範囲外アクセスの警告が出ています。
攻撃の流れ
-
1
属性が同居
名前のハッシュが同じ複数のxattrが、btrfs内部で1つの項目にまとめて保存されている。
-
2
値をサイズ違いで更新
その一方の値を `setxattr` 系のシステムコールで、元と異なる大きさの値に置き換える。
-
3
未初期化の項目
削除と再挿入でデータが移動し、新しい項目が初期化されていない領域に作られる。
-
4
属性が消える
名前などが設定されないため、置き換えたはずの属性が一覧から消える。
-
5
書き戻しでエラー
ツリーチェッカーが破損を検出し、トランザクションが中断される。
どう悪用されるか
公表されている再現手順は、btrfs上のファイルに対して、そのファイルを操作できる利用者が setfattr などで属性を設定するものです。つまり、対象のシステム上でファイルの属性を書き換えられる立場が前提で、特別な権限や利用者の操作は手順に含まれていません。CVSSベクターはネットワーク経由で認証不要(AV:N、PR:N)と評価していますが、説明にはネットワーク経由で直接悪用できる経路は書かれていません。実際の危険度は、自社で誰がbtrfs上のファイルに属性を書けるかによって変わります。
公表されている範囲での影響は、属性の消失、ファイルシステムの整合性エラーとトランザクションの中断、カーネルログの警告です。評価値は機密性、完全性、可用性のすべてが高いとされていますが、情報の漏えいや任意のコード実行が可能になるといった具体的な被害は、公表されていません。実際の攻撃での悪用が確認されたという情報も、現時点では見当たりません。
今すぐやること
-
1
btrfsを使っているホストを洗い出す
サーバー、仮想基盤、コンテナホスト、NASなどでbtrfsのマウントの有無を確認します。ルートファイルシステムがbtrfsの配布形態もあるため、見落としに注意してください。
findmnt -t btrfs -
2
稼働中のカーネルの版を確認する
表の影響範囲に当てはまるか確認します。配布カーネルは修正が取り込まれている場合があるため、ディストリビューションの告知と照らし合わせてください。
uname -r -
3
修正済みカーネルへ更新して再起動する
6.6.160、6.12.113、6.18.57、7.2.11以降、またはディストリビューションが提供する修正版に更新します。カーネルは再起動しないと切り替わらないため、メンテナンス枠を確保してください。
-
4
ログにbtrfsの警告が出ていないか見る
更新前後で、btrfsに関する警告やエラーが出ていないか確認します。出ている場合は、該当ホストのバックアップ状態を先に確認し、ベンダーや配布元に相談してください。
dmesg | grep -i btrfs -
5
バックアップを確認する
更新までの間に属性の消失や整合性エラーが起きても戻せるよう、btrfs上の重要データの最新バックアップがあるか確認します。
すぐ更新できないとき
回避策は公表されていません。修正版の適用までは、btrfs上のファイルに信頼できない利用者やコンテナが属性を書き込めないよう、共有環境の権限を見直すことが現実的な軽減策です。ただし、これは公式の回避策ではなく、根本的な解決には修正版への更新が必要です。
背景
カーネルはストレージやメモリを管理するOSの中核で、ファイルシステムの不具合はデータの消失や、システム全体の停止につながりやすい分野です。btrfsはスナップショットやチェックサムの機能を持ち、一部のLinuxディストリビューションで標準のファイルシステムとして採用されているほか、NAS製品でも使われています。
拡張属性はファイルに付ける追加情報で、セキュリティ機能やコンテナ関連のツールなどが内部で使うこともあります。ファイルシステムは内部でデータをまとめて保存する仕組みが複雑なため、まとめ方が特殊な場合(今回はハッシュの衝突)の処理に抜けがあると、通常の運用では見つかりにくい不具合になりがちです。
よくある質問
Q.ext4やXFSを使っていますが、対応は必要ですか。
findmnt -t btrfs で一度確認してください。Q.CVSSが9.8ですが、今夜中に更新すべきですか。
Q.すでに属性が消えたかどうかは確認できますか。
dmesg にbtrfsの警告が出ていないか確認し、疑わしい場合はバックアップとの比較や、ベンダー、配布元への相談をお勧めします。まだ分かっていないこと
- 実際の攻撃で悪用された事例や、悪用される見込みを示す数値(EPSS)は公表されていません。
- データ漏えいや任意のコード実行につながるかどうかは、公表されていません。
- 各ディストリビューションやNAS製品の個別の修正版番号は、それぞれのベンダーの告知で確認する必要があります。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| Linux | Linux | — | — |
| Linux | Kernel |
3.19.0 以上 6.6.160 未満 6.7.0 以上 6.12.113 未満 6.13.0 以上 6.18.57 未満 6.19.0 以上 7.2.11 未満 |
6.6.160 6.12.113 6.18.57 7.2.11 |
ディストリビューション別の修正状況
各ディストリビューションが公開している、この CVE の修正パッケージ
- Debian DEBIAN-CVE-2026-98959 linux
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
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
se…
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory nvd.nist.gov
- advisory github.com
- package git.kernel.org
- web git.kernel.org
- web git.kernel.org
- web git.kernel.org
- web git.kernel.org
- web git.kernel.org
- web github.com