【活用ガイド】

JVNDB-2026-017123

LinuxのLinux KernelにおけるTime-of-check Time-of-use (TOCTOU) 競合状態の脆弱性

概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。cephの非同期unlink中に発生するi_nlinkアンダーランの問題の修正です。非同期unlinkの間、完了(最終的にi_nlinkを更新する処理)が来る前にi_nlinkカウンターを減少させてしまいます。これは「unlinkが成功すると仮定している」ために起きていました。この方法は悪い考えではありませんが、他のクライアントによる削除(または自身のunlinkの完了)と競合し、以下のようなWARNINGを引き起こすアンダーランとなります。具体的には、WARNING: CPU: 85 PID: 25093 at fs/inode.c:407 drop_nlink+0x50/0x68 という警告が表示されます。ceph_unlink()内ではceph_mdsc_submit_request()がCEPH_MDS_OP_UNLINKのリクエストをMDSに送信しますが、完了を待ちません。この呼び出しと後続のdrop_nlink()呼び出しの間に、ワーカースレッドがCEPH_CAP_OP_IMPORT、CEPH_CAP_OP_GRANT、またはCEPH_MSG_CLIENT_REPLY(自身の完了の可能性あり)を処理する可能性があります。その結果、set_nlink()が呼ばれ、MDSから受け取った値でi_nlinkカウンターが更新されます。もし新しいi_nlinkの値が0の場合、それ以上の減少は違法ですが、ceph_unlink()は減少処理を行ってしまいます。WARNINGは次の手順で再現可能です。1. 非同期unlinkを強制します。非同期経路のみが影響を受けます。Ceph内部の詳細は不明ですが、MDSが「Fxr」権限を与えない理由はわかっていません。そこでget_caps_for_async_unlink()を常に成功するようにパッチしました。(このWARNINGは未パッチのカーネルでも発見されており、理論上のバグではありません。)2. ceph_mdsc_submit_request()の後にsleepを挿入し、unlink完了処理がdrop_nlink()の前にワーカースレッドで処理されるようにします。これによりdrop_nlink()実行前にi_nlinkが既に0となります。解決策としては、カウンターがすでに0の場合は減算をスキップすることですが、ロックなしでは依然として競合状態(TOCTOU問題)が発生します。ceph_fill_inode()とhandle_cap_grant()は共にset_nlink()実行中にceph_inode_info.i_ceph_lockスピンロックを保持しているため、このロックでi_nlinkの更新処理を保護することが適切だと考えられます。類似の先行例としてはNFSやSMB(inode.i_lock使用)、AFS(afs_vnode.cb_lock使用)があり、これらはいずれもゼロチェックを行っています。
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 4.7 (警告) [NVD値]
  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 高
  • 攻撃に必要な特権レベル: 低
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): なし
  • 完全性への影響(I): なし
  • 可用性への影響(A): 高
影響を受けるシステム


Linux
  • Linux Kernel 5.11 以上 5.15.203 未満
  • Linux Kernel 5.16 以上 6.1.167 未満
  • Linux Kernel 5.7 以上 5.10.253 未満
  • Linux Kernel 6.13 以上 6.18.19 未満
  • Linux Kernel 6.19 以上 6.19.9 未満
  • Linux Kernel 6.2 以上 6.6.130 未満
  • Linux Kernel 6.7 以上 6.12.78 未満
  • Linux Kernel 7.0

想定される影響

当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。
また、当該ソフトウェアが扱う情報について、書き換えは発生しません。
さらに、当該ソフトウェアが完全に停止する可能性があります。
そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。
対策

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。
ベンダ情報

CWEによる脆弱性タイプ一覧  CWEとは?

  1. Time-of-check Time-of-use (TOCTOU) 競合状態(CWE-367) [NVD評価]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-43420
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-43420
  2. 関連文書 : ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/fcc477a6e8856c8a42b3c9e171724d8d6dfadd06)
  3. 関連文書 : ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/7db008e85a5d17b64bc5390b828bf457ae91a415)
  4. 関連文書 : ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/aedd29386b23f3e1e6818943e11abfff2953732f)
  5. 関連文書 : ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/8975b85b0d45ca811ace6fac5907652f2310e5ac)
  6. 関連文書 : ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/9b31e88ac5623d15c8bc46f69dfe1d3b43a8f67c)
  7. 関連文書 : ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/6d5fd8bb574bef039eb3b738e523870433a2aeb9)
  8. 関連文書 : ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/b3f5513141ecc6b277a8f7b7efe58a0cf9a5e859)
  9. 関連文書 : ceph: fix i_nlink underrun during async unlink - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/ce0123cbb4a40a2f1bbb815f292b26e96088639f)
更新履歴

  • [2026年05月28日]
      掲載