Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLocal access via unprivileged user namespace
-
DeliverySet FAN_MARK_MNTNS mark and create automount (MNT_SHRINKABLE)
-
ExploitTrigger repeated umount_tree() to double-queue a reparented mount
-
Executionnotify_list left pointing at freed mount objects
-
PersistSubsequent mount operation dereferences freed memory
-
ImpactKernel memory corruption / potential privilege escalation
Vulnerability Assessment
| Exploitation Conditions | Exploitation requires a specific combination called out in the description: (1) a source mount carrying MNT_SHRINKABLE - created by finish_automount() for NFS/AFS/CIFS submounts or the tracefs mount under debugfs, with the flag inherited by bind mounts; (2) a mount namespace that has a FAN_MARK_MNTNS fanotify mark, which drives the mount-notification queuing; and (3) the ability to perform these mount operations, which an otherwise unprivileged user obtains as root inside a user namespace. The trigger is a double-queue: propagate_umount() reparents a surviving overmount and queues it 'moved', then a second umount_tree() under the same namespace_sem hold (via shrink_submounts() or mark_mounts_for_expiry()) takes down and re-queues that same mount, truncating notify_list and leaving dangling pointers. Key LIMITING factors: it is local-only (AV:L), and it is reachable by non-root users only where unprivileged user namespaces are enabled - systems that disable them (common in hardened/enterprise builds) sharply reduce exposure; it also depends on automount/fanotify features being in use. |
| Impact | Signals are consistent and point to a genuine but non-emergency local-privilege-class risk. The CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N, C:H/I:H/A:H, 7.8 HIGH) describes a local, low-complexity, low-privilege use-after-free in the Linux mount-notification path that corrupts kernel memory affecting later mount operations host-wide. EPSS is low (0.21%, 10th percentile) and the CVE is NOT in CISA KEV, so there is no evidence of active or widespread exploitation; the references are stable-tree fix commits, not exploit code, so no public PoC is identified. The vuln.today decision label is 'this_week', which aligns with the picture of a real but not emergency issue - patch on a normal cadence, not a drop-everything event. The one nuance that tempers the HIGH score is the chain of preconditions in the description (MNT_SHRINKABLE source mount, a FAN_MARK_MNTNS fanotify mark on the namespace, and the ability to act as root inside a user namespace); these are reachable by an unprivileged local user only where unprivileged user namespaces are enabled, which many hardened/enterprise configurations restrict. The input tag 'Information Disclosure' understates the mechanism - this is a slab use-after-free (memory corruption) rather than a pure read primitive - so treat impact as corruption/potential escalation; verify classification against the kernel commit. |
| Exploit ScenarioDerived | A local unprivileged user on a system that permits user namespaces creates a user+mount namespace, applies a FAN_MARK_MNTNS fanotify mark, and induces an automount (e.g. an NFS/AFS/CIFS submount or tracefs) to obtain an MNT_SHRINKABLE mount that can be bind-mounted. By forcing multiple umount_tree() operations under one namespace_sem hold (via submount shrinking or expiry), the same reparented mount is queued twice on notify_list, so subsequent mount operations walk freed memory. No public exploit code is identified; weaponization into reliable privilege escalation would require additional heap-control work beyond the KASAN crash shown. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 24, 2026
The Linux kernel's mount-notification bookkeeping can queue the same mount twice on notify_list, truncating the list and leaving it pointing at memory that is freed after the grace period, so that later mount operations walk a freed slab object (CVSS 3.1 score 7.8, AV:L/PR:L, high confidentiality and integrity impact). Reaching the bug requires a local actor able to mount a source carrying MNT_SHRINKABLE (NFS, AFS or CIFS submounts created by finish_automount(), or the tracefs mount under debugfs, with the flag inherited by bind mounts) inside a mount namespace that holds a FAN_MARK_MNTNS fanotify mark, which an otherwise unprivileged user can arrange as root inside a user namespace on systems where unprivileged user namespaces are enabled. No public exploit code and no confirmed active exploitation were identified in the available data, and EPSS is low at 0.21% (10th percentile); vendor fixes are published in the stable trees.
RemediationAI
Apply the vendor-released fixes: stable 6.18.57, 7.2.11 and 7.3 contain the corrected code, delivered by commits bd2feb7796b6585938a4241e7b7c4148a6f7b762, 702ff3fe499876e09c45558a05366d21a5bc41ab and acbe9e4418e2ef7bef1a12e62e0e7d6145a15190, all reachable from https://git.kernel.org/stable/c/acbe9e4418e2ef7bef1a12e62e0e7d6145a15190 and the sibling stable links in the references; distribution kernels should be updated to the build that carries the corresponding backport. Where an immediate kernel update is not possible, the practical exposure reduction is to disable unprivileged user namespaces (for example sysctl kernel.unprivileged_userns_clone=0 or user.max_user_namespaces=0), which prevents an unprivileged local user from obtaining the root-in-userns capability the trigger needs, at the cost of breaking rootless containers, sandboxed browsers and similar tooling. Because the bug additionally depends on mounts carrying MNT_SHRINKABLE and on a FAN_MARK_MNTNS fanotify mark, systems that neither use automounted NFS/AFS/CIFS or debugfs/tracefs submounts nor place mount-namespace fanotify marks have no reachable path; removing such marks and avoiding those automounts in untrusted namespaces reduces exposure but is a workaround only, not a substitute for the fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw lives in the kernel VFS mount-namespace code that feeds fanotify mount marks. mnt_notify_add() pushes a mount onto notify_list without checking whether that mount is already queued, which is only safe if each mount is queued at most once per namespace_sem hold. That invariant breaks: propagate_umount() reparents a surviving overmount off a stack that is being torn down and queues it as moved, and then shrink_submounts() or mark_mounts_for_expiry() calling umount_tree() again under the same namespace_sem hold can take down exactly that reparented mount, reparent it a second time and queue it again. The second list_add_tail() splices out the entries queued in between while the list head still points at the last of them, so notify_mnt_list() visits only one mount and the rest are freed after the grace period with notify_list still referencing them, producing the reported KASAN slab-use-after-free (read of size 8 in __list_add_valid_or_report via mnt_add_to_ns, attach_recursive_mnt, path_mount) on every subsequent host mount operation. Triggering needs a mount with MNT_SHRINKABLE to bind from, which finish_automount() creates for NFS, AFS and CIFS submounts and for the tracefs mount below debugfs, plus a mount namespace with a FAN_MARK_MNTNS mark; the description notes that a user who is root in a user namespace can obtain both. No CWE identifier was supplied with the record, so the root cause is best characterised from the described mechanics as a double-queue/list-corruption flaw rather than by a formal weakness class. The upstream fix initialises to_notify in alloc_vfsmnt() and skips mounts that are already queued, accepting that the move event for a mount unmounted under the same hold is lost because the detach is what matters.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Local-only kernel UAF (AV:L) reachable with low privileges via unprivileged user namespaces (PR:L), no interaction, with memory corruption giving high confidentiality/integrity/availability impact.
Primary rating from Vendor (Linux).
CVSS VectorVendor: Linux
Lifecycle Timeline
4DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
namespace: queue a mount only once for mount notifications
mnt_notify_add() puts a mount on notify_list. It doesn't check whether the mount is on the list already. That's fine as long as every mount is queued at most once per namespace_sem hold. It isn't.
propagate_umount() moves a surviving overmount off a stack of mounts that are going away and queues it as moved. shrink_submounts() and mark_mounts_for_expiry() call umount_tree() for several mounts under a single namespace_sem hold. So the second umount_tree() can take down exactly the mount the first one reparented, reparent it once more and so end up queueing it a second time.
The second list_add_tail() cuts the mounts queued in between out of the list while the head still points at the last of them. notify_mnt_list() then only visits that one mount and the others are freed after the grace period with notify_list still pointing at them. Every later mount operation on the host walks freed memory:
BUG: KASAN: slab-use-after-free in __list_add_valid_or_report Read of size 8 at addr ffff8881003d57e0 by task notify_dq/162 __list_add_valid_or_report+0x15c/0x1a0 mnt_add_to_ns+0x322/0x890 attach_recursive_mnt.isra.0+0xf2a/0x1a00 path_mount+0x139c/0x1d40
This needs a mount with MNT_SHRINKABLE to bind from. That's what finish_automount() creates (submounts of NFS, AFS and CIFS and the tracefs mount below debugfs). Bind mounts inherit the flag. A mount namespace with a FAN_MARK_MNTNS mark does the rest and root in a user namespace can have both.
Initialize to_notify in alloc_vfsmnt() and leave a mount alone that is queued already. mnt_notify() looks at the state the mount has when the list is drained so a single entry per mount is enough. The move event for a mount that is unmounted under the same hold is lost. That's fine. The detach is what matters.
Executive ViewAI
CVE-2026-98991 is a high-severity Linux kernel vulnerability that allows a local attacker to potentially gain elevated privileges or cause system instability. It affects systems with unprivileged user namespaces enabled, meaning standard workstation and server environments could be at risk. Security leadership should prioritize patching due to the potential for confidentiality and integrity compromise.
If immediate patching is not possible, disable unprivileged user namespaces by setting the sysctl kernel.unprivileged_userns_clone=0, or restrict access to mount operations and fanotify marks via mandatory access controls (e.g., SELinux/AppArmor policies) and limit the ability to create user namespaces to trusted users only.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-108785
GHSA-4qhh-mf87-xrfm
NVD
CVE.org
EPSS
Exploit-DB