CVE-2026-98976
namespace: keep the lock on a mount that a propagated copy is moved beneath
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
Attack conditions and impact
Derived from the CNA (via NVD) CVSS 3.1 vector| Metric | Value | Meaning |
|---|---|---|
| Attack vector AV | L | Local |
| Attack complexity AC | H | High (conditions required) |
| Privileges required PR | L | Regular user |
| User interaction UI | N | None |
| Scope S | C | Changed (affects other components) |
| Confidentiality C | H | High |
| Integrity I | H | High |
| Availability A | H | High |
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H
Description
In the Linux kernel, the following vulnerability has been resolved: namespace: keep the lock on a mount that a propagated copy is moved beneath attach_recursive_mnt() transfers MNT_LOCKED from the top mount to the mount that is moved beneath it with MOVE_MOUNT_BENEATH. This allows the owner of a user namespace to replace its locked /proc or its root. The mount beneath takes on the job of covering the underlying mountpoint allowing the top mount to be unmounted. Consider two mount namespaces: (H) The host H has a shared mount P with a secret in P/d (Z) Z is a user namespace made from M. Its copy of P receives propagation from the host's P and its copy of M's cover on P/d is locked Z's owner must not get to see P/d. Now (H) mounts X on P/d. This propagates into (Z). The copy of X lands beneath (Z)'s locked cover. The locked property is transfered from (Z)'s cover to the copy of X propagated beneath it. The cover is now unlocked. Now (H) unmounts X again. The copy of X in (Z) gets unmounted and the covering mount is left unlocked on top of P/d. (Z) can now unmount it: Z: umount2(P/d) = EINVAL /* the cover is locked */ H: mount X on P/d, umount X /* both propagate into Z /* Z: umount2(P/d) = 0 /* the cover is now unlocked */ Z: read P/d/secret = "covered-by-root" /* secret revealed */ So only transfer the locked property to the mount beneath for mounts the caller has placed. A propagated copy that lands beneath a locked mount is locked as well so that the mount at the bottom of the stack carries a lock the way every check expects. The mount on top of it remains locked to ensure that it keeps covering even if the propagated mount is unmounted again.
CVSS assessments
| Provider | Version | Score | Vector |
|---|---|---|---|
| NVD / 416baaa9-dc9f-4396-8d5f-8c081fb06d67 (Secondary) | 3.1 | 7.8 HIGH | CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CNA / Linux | 3.1 | 7.8 HIGH | CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H |
Affected products and packages
CNA (CVE.org)
| Vendor | Product | Versions |
|---|---|---|
| Linux | Linux | affected: c62a4766937edec2962d52e583276b459b739f2d … < f1f0c24ca701d7d3061c7f69f7450f1734c11745 affected: c62a4766937edec2962d52e583276b459b739f2d … < d74d66aa708ccf2bc0b1e265a83fed0f2308d5c4 default: unaffected |
| Linux | Linux | affected: 7.1 unaffected: 0 … < 7.1 unaffected: 7.2.11 … <= 7.2.* unaffected: 7.3 … <= * default: affected |
Open-source packages (GitHub Advisory / OSV)
namespace: keep the lock on a mount that a propagated copy is moved beneath
| Ecosystem | Package | Affected versions | Fixed in |
|---|---|---|---|
| >= c62a4766937edec2962d52e583276b459b739f2d, < f1f0c24ca701d7d3061c7f69f7450f1734c11745; < d74d66aa708ccf2bc0b1e265a83fed0f2308d5c4 | f1f0c24ca701d7d3061c7f69f7450f1734c11745, d74d66aa708ccf2bc0b1e265a83fed0f2308d5c4 | ||
| Linux | Kernel | >= 7.1.0, < 7.2.11 | 7.2.11 |
Linux distribution status
References (5)
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git OSV
- https://git.kernel.org/stable/c/d74d66aa708ccf2bc0b1e265a83fed0f2308d5c4 NVD, CNA, OSV
- https://git.kernel.org/stable/c/f1f0c24ca701d7d3061c7f69f7450f1734c11745 NVD, CNA, OSV
- https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/98xxx/CVE-2026-98976.json OSV
- https://nvd.nist.gov/vuln/detail/CVE-2026-98976 OSV