KernelScan.io

HIGH

ksmbd ACE OOB

CVE-2026-43490

CVSS 8.8 / 10.0 NVD

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI8.3HIGH

01

In the Linux kernel, the following vulnerability has been resolved: ksmbd: validate inherited ACE SID length smb_inherit_dacl() walks the parent directory DACL loaded from the security descriptor xattr. It verifies that each ACE contains the fixed SID header before using it, but does not verify that the variable-length SID described by sid.num_subauth is fully contained in the ACE. A malformed inheritable ACE can advertise more subauthorities than are present in the ACE. compare_sids() may then read past the ACE. smb_set_ace() also clamps the copied destination SID, but used the unchecked source SID count to compute the inherited ACE size. That could advance the temporary inherited ACE buffer pointer and nt_size accounting past the allocated buffer. Fix this by validating the parent ACE SID count and SID length before using the SID during inheritance. Compute the inherited ACE size from the copied SID so the size matches the bounded destination SID. Reject the inherited DACL if size accumulation would overflow smb_acl.size or the security descriptor allocation size.

02

Engine v0.2.0

Risk summary

Remote authenticated attackers can trigger out-of-bounds reads and buffer overflows in the ksmbd SMB server by supplying malformed ACE entries in security descriptors over SMB. This can lead to disclosure of kernel heap data, kernel memory corruption, and denial of service on systems running ksmbd.

Affectedfs/smb/server/smbacl.c (ksmbd)

Vulnerability analysis

The vulnerability exists in smb_inherit_dacl() which processes parent directory DACL entries loaded from security descriptor xattrs during ACE inheritance. The code verifies that each ACE contains a fixed SID header but fails to verify that the variable-length SID described by sid.num_subauth is fully contained within the ACE boundaries. A malformed inheritable ACE can advertise more subauthorities than are present, causing compare_sids() to read past the ACE buffer (out-of-bounds read). Additionally, smb_set_ace() computes the inherited ACE size using the unchecked source SID count, which advances the temporary inherited ACE buffer pointer and nt_size accounting past the allocated buffer (out-of-bounds write). The fix validates the parent ACE SID count and length before use, computes inherited ACE size from the bounded destination SID, and adds overflow checks for size accumulation.

03

BranchFixed inPatch commit
6.126.12.8847c6e37a77b1
6.186.18.301aa60fea7f63
6.66.6.141a7fb771314fb
7.07.0.7c1d95c995d5b
mainline7.1-rc3996454bc0da8