data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-93282 in the interactive tracker

CVE-2026-93282

ksmbd: fix maximum allowed access checks

8.1 EPSS 0.3% AV:N

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

ReleaseStatus VersionWhat this means
Debian 12bookwormvulnerable6.1.190-1No 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 13trixievulnerable6.12.113-1No 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 14forkyfixed7.2.6-1Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.2.6-1Update 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 ksmbd

Prints 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

IntroducedFixed inCommit
5.156.18.5728289d880e6d
5.157.2.635d5c59fe6b1
5.157.3cc2f133e80eb

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.