Look up another CVE · open CVE-2026-93282 in the interactive tracker
CVE-2026-93282
ksmbd: fix maximum allowed access checks
Published 2026-09-24 (24 days ago) by the Linux kernel CNA. Subsystem fs/smb. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-93282 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 | vulnerable | 6.12.113-1 | No fix published anywhere yet, neither in Debian nor upstream for the series trixie tracks. Watch the Debian tracker page for this CVE. Advisories for trixie have historically landed a median of 11 days after publication. |
| 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. |
The vulnerability
What the bug is
The DACL permission check looks for an ACE matching the current user and falls back to the Everyone ACE. It does not consider an Authenticated Users ACE, even though an authenticated session is a member of that well-known group. As a result, opening a file whose access is granted through S-1-5-11 can incorrectly fail with STATUS_ACCESS_DENIED. Treat an Authenticated Users ACE as a fallback entry alongside Everyone. The maximal access calculation also combines access masks from every ACE, regardless of whether its SID applies to the current user. This can grant rights belonging to an unrelated principal. Process only ACEs applying to the user, Everyone, or Authenticated Users, and accumulate allowed and denied masks in ACL order. Preserve explicitly requested access bits so they are validated against the resulting maximal mask. When ACCESS_SYSTEM_SECURITY is denied, report STATUS_PRIVILEGE_NOT_HELD instead of the generic STATUS_ACCESS_DENIED. Access to the system ACL requires a security privilege that ksmbd does not grant. For regular files, include FILE_EXECUTE in maximal access when the client requested GENERIC_EXECUTE and the DACL grants the complete file-read set. Keep a direct FILE_EXECUTE request subject to the explicit DACL bit. This matches the POSIX file ACL mapping without broadening specific execute requests. Do not replace rights from an applicable NT ACE with a POSIX ACL entry. The POSIX ACL is only a fallback when no user, Everyone, or Authenticated Users ACE applies; otherwise it can incorrectly broaden the stored DACL. This fixes smb2.maximum_allowed.maximum_allowed.
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/smb/server/smb2pdu.c
fs/smb/server/smbacl.c
fs/smb/server/smbacl.h
- What this is
- KERNEL SMB3 SERVER (KSMBD)MAINTAINERS section matched on fs/smb/server/ · linux-cifs@vger.kernel.org · Maintained
- Kernel module
- ksmbd
Check it on the machine
grep -wE 'CONFIG_SMBFS|CONFIG_SMB_SERVER' /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 ksmbdPrints 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, sidm
- m
- a loadable module on every flavour - check lsmod, can be blacklisted
- Build switches
- CONFIG_SMBFS, CONFIG_SMB_SERVER
- 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-24 (24 days ago)source
- CVSS
- 8.1 high
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Nsource recompute it - Attack vector
- network (AV:N)source
- EPSS
- 0.34%, higher than 25.7% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- fs/smb
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 5.15 | 6.18.57 | 28289d880e6d |
| 5.15 | 7.2.6 | 35d5c59fe6b1 |
| 5.15 | 7.3 | cc2f133e80eb |
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
- SMB2_CREATE carries req->DesiredAccess into smb2_open(), which calls smb_check_perm_dacl() on the NT DACL from ksmbd_vfs_get_sd_xattr(); ksmbd_conn_handler_loop() delivers that CREATE on TCP/445 through __handle_ksmbd_work() after smb2_check_user_session()/smb2_get_ksmbd_tcon().
- AC:LAttack complexity, low
- With FILE_MAXIMAL_ACCESS_LE set, smb_check_perm_dacl() does granted |= ace->access_req for every ACE regardless of SID, and when the user SID is not found it applies a POSIX ACL_USER/ACL_GROUP entry even if an Everyone ACE exists; one attacker-sent SMB2_CREATE triggers that with no race.
- PR:LPrivileges required, low
- SMB2_CREATE is not in the smb2_check_user_session() pre-auth skip list (only NEGOTIATE/SESSION_SETUP/ECHO); __handle_ksmbd_work() requires SMB2_SESSION_VALID and smb2_get_ksmbd_tcon() before smb2_open(), so this is an authenticated share user, not a pre-auth or host-root path.
- UI:NUser interaction, none
- The attacker sends the SMB2_CREATE that smb2_open() uses to call smb_check_perm_dacl() on a file they name; no victim mount, click, or other interactive step is required.
- S:UScope, unchanged
- smb_check_perm_dacl() only miscomputes the access mask stored as fp->daccess for that ksmbd open; the extra rights stay inside the host kernel SMB server and do not cross a VM, IOMMU, or sandbox boundary.
- C:HConfidentiality impact, high
- When FILE_MAXIMAL_ACCESS_LE is set, granted ORs access_req from unrelated SIDs, and a POSIX ACL_USER match can replace a tighter Everyone ACE; *pdaccess becomes fp->daccess, so smb2_read() seeing FILE_READ_DATA_LE returns file contents the stored DACL would have denied with -EACCES.
- I:HIntegrity impact, high
- The same inflated mask can include FILE_WRITE_DATA, WRITE_DAC, or DELETE from another principal's ACE or from mode_to_access_flags() on a POSIX rwx/r-- entry; smb2_write(), smb2_set_info_sec(), and set_file_disposition_info() then allow writes, DACL replacement, or deletes the stored DACL would have rejected.
- A:NAvailability impact, none
- smb_check_perm_dacl() only returns 0 with a wider granted mask or -EACCES mapped to STATUS_ACCESS_DENIED/STATUS_PRIVILEGE_NOT_HELD; the ACE walks stay inside the NTSD and do not oops, panic, hang, or crash ksmbd.