Look up another CVE · open CVE-2026-89671 in the interactive tracker
CVE-2026-89671
nfsd: gate nfs3 setacl by argp->mask
Published 2026-09-11 (37 days ago) by the Linux kernel CNA. Subsystem fs/nfsd. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-89671 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | vulnerable | 6.1.190-1 | No fix published anywhere yet, neither in Debian nor upstream for the series bookworm tracks. Watch the Debian tracker page for this CVE. Advisories for bookworm have historically landed a median of 23 days after publication. |
| Debian 13trixie | fixedDSA-6528-1 · 2026-09-29 · text | 6.12.111-1 | Update the kernel and reboot. DSA-6528-1 shipped the fix on 2026-09-29, in 6.12.111-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian 12bookworm · linux-6.12 | fixedDLA-4817-1 · 2026-10-04 · text | 6.12.111-1~deb12u1 | Update the kernel and reboot. DLA-4817-1 shipped the fix on 2026-10-04, in 6.12.111-1~deb12u1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
nfsd3_proc_setacl() calls set_posix_acl() unconditionally for both ACL_TYPE_ACCESS and ACL_TYPE_DEFAULT, passing argp->acl_access and argp->acl_default verbatim. The NFSv3 ACL decoder only populates those pointers when the corresponding mask bit is set: nfs3svc_decode_setaclargs() if (args->mask & NFS_ACL) decode into acl_access if (args->mask & NFS_DFACL) decode into acl_default /* otherwise the pointer stays NULL (pc_argzero) */ nfsd3_proc_setacl() set_posix_acl(.., ACL_TYPE_ACCESS, argp->acl_access) set_posix_acl(.., ACL_TYPE_DEFAULT, argp->acl_default) set_posix_acl(idmap, dentry, type, NULL) is the VFS "remove this ACL type" operation. A NULL pointer that means "the client did not send this arm" is therefore indistinguishable from "the client asked to remove this ACL". A SETACL with mask=NFS_ACL silently drops the directory's default ACL; mask=0 drops both. The sibling nfsd3_proc_getacl() already consults argp->mask before touching each arm; mirror that in setacl. Fix by wrapping each set_posix_acl() call in the matching mask bit check and initializing error to 0 before inode_lock so that a request with neither bit set leaves the on-disk ACLs untouched and returns nfs_ok. The out_drop_lock path and the unconditional posix_acl_release() at out: are preserved; both NULL-tolerate the skipped arms.
Where it lives
The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.
fs/nfsd/nfs3acl.c
- What this is
- KERNEL NFSD, SUNRPC, AND LOCKD SERVERSMAINTAINERS section matched on fs/nfsd/ · linux-nfs@vger.kernel.org · Supported
- Kernel module
- nfsd
Check it on the machine
grep -wE 'CONFIG_NFSD|CONFIG_NFSD_V3_ACL' /boot/config-$(uname -r)Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.
lsmod | grep -w nfsdPrints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.
Show whether Debian builds this, per release
Debian builds this as a loadable module. Every release below compiles it as a module on every flavour, so whether the code is in the running kernel depends on whether that module is loaded.
- bookworm, trixie, forky, sid, bookworm · linux-6.12m
- m
- a loadable module on every flavour - check lsmod, can be blacklisted
- Build switches
- CONFIG_NFSD, CONFIG_NFSD_V3_ACL
- Reads as
- all on means the file is compiled; any one off means it is not.
From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages
Signals
- Published
- 2026-09-11 (37 days ago)source
- CVSS
- 9.1 critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Nsource recompute it - Attack vector
- network (AV:N)source
- EPSS
- 0.50%, higher than 41.5% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- fs/nfsd
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 2.6.13 | 6.6.157 | 3be1d8611dae |
| 2.6.13 | 6.12.109 | 68a80b26efdf |
| 2.6.13 | 6.18.50 | b3bff820d068 |
| 2.6.13 | 7.2.4 | ff99ed007f06 |
| 2.6.13 | 7.3 | 453d7198a0ab |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4817-1 | 2026-10-04 | bookworm 6.12.111-1~deb12u1 | tracker |
| DSA-6528-1 | 2026-09-29 | trixie 6.12.111-1 | tracker |
Why the CNA scored it this way
Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source
- AV:NAttack vector, network
- nfsd3_proc_setacl() is NFSACL v3 SETACL (RPC program 100227) on the in-kernel NFS server, reached over TCP/UDP (typically port 2049) from a remote peer; no local syscall or physical access is required.
- AC:LAttack complexity, low
- A single SETACL with mask omitting NFS_ACL and/or NFS_DFACL reliably deletes the corresponding POSIX ACL; there is no race or attacker-uncontrollable layout, and CONFIG_NFSD_V3_ACL is enabled on common distro NFS server kernels.
- PR:NPrivileges required, none
- Default nfsd exports accept AUTH_UNIX and AUTH_NULL with no shared secret; AUTH_UNIX UIDs are attacker-chosen, so the caller spoofs the inode owner to pass inode_owner_or_capable() without any account on the server.
- UI:NUser interaction, none
- The attacker triggers the flaw by sending crafted NFSACL SETACL RPCs; no victim must mount a filesystem, open a file, or otherwise interact.
- S:UScope, unchanged
- Impact stays on POSIX ACL metadata of the exported filesystem in the same kernel/host security authority; this is not a VM escape, IOMMU bypass, or sandbox breakout.
- C:HConfidentiality impact, high
- Removing an access ACL drops named-user/group entries that may be the only restriction beyond mode bits, and removing a directory default ACL stops inheritance of restrictive policy, so ACL-protected file contents can become readable.
- I:HIntegrity impact, high
- set_posix_acl(..., NULL) is the VFS remove-ACL operation, so an omitted mask bit silently deletes that ACL type on disk; mask=NFS_ACL strips the default ACL and mask=0 strips both, destroying access-control metadata.
- A:NAvailability impact, none
- The path performs a defined VFS ACL-remove and does not oops, panic, hang, deadlock, or leak kernel memory, so nfsd and the host remain available.