CVE-2026-31706: ksmbd: validate num_aces and harden ACE walk in smb_inherit_dacl()
Noroxi assessment
Priority: Monitor (action score 35/100)
- The sources we track (CISA KEV, Exploit-DB, Metasploit, Nuclei, GitHub) show no public exploit code or exploitation in the wild.
- Probability of exploitation in the next 30 days: 0.49% (FIRST EPSS).
- Anyone who can reach it over the internet can trigger it. A low-privileged account is enough. No user action is required. No special conditions are required; it is repeatable.
- Fixed version: Linux Linux 063a7409b0de46d7c770b65bb0338e6fdb3b1f0a, 3e4e2ea2a781018ed5d75f969e3e5606beb66e48, 3e5360b422dd741cb315654a191fa73869a37414.
Low priority for now. Upgrade to Linux Linux 063a7409b0de46d7c770b65bb0338e6fdb3b1f0a, 3e4e2ea2a781018ed5d75f969e3e5606beb66e48, 3e5360b422dd741cb315654a191fa73869a37414 or later.
Generated automatically from the record's data: CVSS (NVD and CNA), CISA KEV and SSVC, FIRST EPSS, exploit sources, fixed versions. How we calculate it
Primary sources: NVD · CVE.org · FIRST EPSS
In the Linux kernel, the following vulnerability has been resolved: ksmbd: validate num_aces and harden ACE walk in smb_inherit_dacl() smb_inherit_dacl() trusts the on-disk num_aces value from the parent directory's DACL xattr and uses it to size a heap allocation: aces_base = kmalloc(sizeof(struct smb_ace) * num_aces * 2, ...); num_aces is a u16 read from le16_to_cpu(parent_pdacl->num_aces) without checking that it is consistent with the declared pdacl_size. An authenticated client whose parent directory's security.NTACL is tampered (e.g. via offline xattr corruption or a concurrent path that bypasses parse_dacl()) can present num_aces = 65535 with minimal actual ACE data. This causes a ~8 MB allocation (not kzalloc, so uninitialized) that the subsequent loop only partially populates, and may also overflow the three-way size_t multiply on 32-bit kernels. Additionally, the ACE walk loop uses the weaker offsetof(struct smb_ace, access_req) minimum size check rather than the minimum valid on-wire ACE size, and does not reject ACEs whose declared size is below the minimum. Reproduced on UML + KASAN + LOCKDEP against the real ksmbd code path. A legitimate mount.cifs client creates a parent directory over SMB (ksmbd writes a valid security.NTACL xattr), then the NTACL blob on the backing filesystem is rewritten to set num_aces = 0xFFFF while keeping the posix_acl_hash bytes intact so ksmbd_vfs_get_sd_xattr()'s hash check still passes. A subsequent SMB2 CREATE of a child under that parent drives smb2_open() into smb_inherit_dacl() (share has "vfs objects = acl_xattr" set), which fails the page allocator: WARNING: mm/page_alloc.c:5226 at __alloc_frozen_pages_noprof+0x46c/0x9c0 Workqueue: ksmbd-io handle_ksmbd_work __alloc_frozen_pages_noprof+0x46c/0x9c0 ___kmalloc_large_node+0x68/0x130 __kmalloc_large_node_noprof+0x24/0x70 __kmalloc_noprof+0x4c9/0x690 smb_inherit_dacl+0x394/0x2430 smb2_open+0x595d/0xabe0 handle_ksmbd_work+0x3d3/0x1140 With the patch applied the added guard rejects the tampered value with -EINVAL before any large allocation runs, smb2_open() falls back to smb2_create_sd_buffer(), and the child is created with a default SD. No warning, no splat. Fix by: 1. Validating num_aces against pdacl_size using the same formula applied in parse_dacl(). 2. Replacing the raw kmalloc(sizeof * num_aces * 2) with kmalloc_array(num_aces * 2, sizeof(...)) for overflow-safe allocation. 3. Tightening the per-ACE loop guard to require the minimum valid ACE size (offsetof(smb_ace, sid) + CIFS_SID_BASE_SIZE) and rejecting under-sized ACEs, matching the hardening in smb_check_perm_dacl() and parse_dacl(). v1 -> v2: - Replace the synthetic test-module splat in the changelog with a real-path UML + KASAN reproduction driven through mount.cifs and SMB2 CREATE; Namjae flagged the kcifs3_test_inherit_dacl_old name in v1 since it does not exist in ksmbd. - Drop the commit-hash citation from the code comment per Namjae's review; keep the parse_dacl() pointer.
- Published
- May 1, 2026
- Updated
- Oct 30, 2026
- EPSS
- 0.4% · 42th percentile
- CWE
- —
Report tools
Action score
35
Monitor
Low priority for now.
- CVSS
- 35 / 40 · 8.8 / 10
- CISA KEV
- 0 / 30 · Not listed
- EPSS
- 0 / 30 · 0.4%
CNA vs NVD score
- NVD
- —
- CNA · Linux
- 8.8
- NVD has not scored this yet; the score shown is the CNA’s.
The score given by the assigning authority versus NVD’s independent score. A gap means the severity is contested.
Get told when this record changes
- Not in KEV: no record of exploitation in the wild
- No public exploit code on record
- A fix has been released
If any of these changes, we'll tell you in the daily email digest.
Running WordPress? Scan your site free with WP Lens
Noroxi analysis
What does it mean in your environment?
The assessment above is generated automatically from the record's data; it doesn't know your environment. Our team verifies on your systems whether this vulnerability is actually exploitable and which mitigation is enough.
We use this product, ask for helpAffected systems
Is your version affected?
Pick the product and type the version you run. It's compared with this record's version ranges in your browser; the version isn't sent anywhere.
| Vendor | Product | CPE |
|---|---|---|
| linux | linux kernel | cpe:2.3:o:linux:linux_kernel |
Affected versions
NVD version ranges (for catalog products). Add the product to your stack with a version and matching uses these.
- linux linux kernel5.15 and later · before 6.12.84
- linux linux kernel6.13 and later · before 6.18.25
- linux linux kernel6.19 and later · before 7.0.2
Versions reported by the vendor
Affected version ranges reported by the assigning authority (Linux). Independent of NVD's CPE analysis and usually ahead of it.
Linux Linux
- 5.15affected
- e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 and later · before 4d37830c2c834987de329d58fb9a319067400361affected · git
- e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 and later · before ad7d18df7423c522ed9dc7e33bd5d54c66b1bc37affected · git
- e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 and later · before 063a7409b0de46d7c770b65bb0338e6fdb3b1f0aaffected · git
- e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 and later · before 3e5360b422dd741cb315654a191fa73869a37414affected · git
- e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 and later · before 59c32abaaec9cdd6164811c7e864e72f7554b82daffected · git
- e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 and later · before 3e4e2ea2a781018ed5d75f969e3e5606beb66e48affected · git
- before 5.15not affected · semver
- 6.1.191 and later · up to and including 6.1.*not affected · semver
- 6.6.160 and later · up to and including 6.6.*not affected · semver
Package-level exposure
OSV and GitHub Advisory data: ecosystem, package and range. SBOM matching uses this table.
| Ecosystem | Package | Affected range | Fix |
|---|---|---|---|
| Debian:12 | linux | from 0 | — |
| Debian:13 | linux | before 6.12.85-1 | 6.12.85-1 |
| Debian:14 | linux | before 7.0.3-1 | 7.0.3-1 |
| openSUSE:Tumbleweed | kernel-source | before 7.0.7-1.1 | 7.0.7-1.1 |
Same product
linux: all recordsOther highest-scoring records for the same primary product.
- CVE-2026-31431crypto: algif_aead - Revert to operating out-of-placeKEV90Now
- CVE-2022-0847A flaw was found in the way the "flags" member of the new pipe buffer structure was lacking proper initialization in copy_page_to_iter_pipe KEV89Now
- CVE-2021-22555Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACEKEV85Now
Published before and after this one in the same product
- ← EarlierCVE-2026-31704May 1, 2026 · ksmbd: use check_add_overflow() to prevent u16 DACL size overflow22Monitor
- ← EarlierCVE-2026-31705May 1, 2026 · ksmbd: fix out-of-bounds write in smb2_get_ea() EA alignment39Monitor
- Later →CVE-2026-31707May 1, 2026 · ksmbd: validate response sizes in ipc_validate_msg()28Monitor
Remediation
Which version to upgrade to
Fix versions compiled from the vendor, package registries and Microsoft. Verify the vendor's note before upgrading.
| Product / package | Fixed version | Source |
|---|---|---|
| Linux Linux | 063a7409b0de46d7c770b65bb0338e6fdb3b1f0a | Vendor (CNA) |
| Linux Linux | 3e4e2ea2a781018ed5d75f969e3e5606beb66e48 | Vendor (CNA) |
| Linux Linux | 3e5360b422dd741cb315654a191fa73869a37414 | Vendor (CNA) |
| Linux Linux | 4d37830c2c834987de329d58fb9a319067400361 | Vendor (CNA) |
| Linux Linux | 59c32abaaec9cdd6164811c7e864e72f7554b82d | Vendor (CNA) |
| Linux Linux | ad7d18df7423c522ed9dc7e33bd5d54c66b1bc37 | Vendor (CNA) |
| debian:linux | 6.12.85-1 · Debian:13 | Package registry (OSV) |
| opensuse:kernel-source | 7.0.7-1.1 · openSUSE:Tumbleweed | Package registry (OSV) |
Exploit status
No known public exploit
No public exploit has been observed yet. That doesn't mean you're safe, only that the bar is a little higher.
Research context
For pentesters and researchers: attack profile, score disagreement, timeline, patch commits, credits, variant and chain candidates, bug bounty scope. All derived from existing data; no exploit code.
Timeline
From publication to today: proof of concept, Metasploit module, CISA KEV and fix record. Dates are as reported by the sources.
No dated events beyond publication.
No history yet (it accumulates with the daily EPSS job).
Patch and commit links
Commit, PR and diff links among the references. A starting point for patch-diffing and variant hunting; fixes, not exploits.
No commit or PR link among the references.
Credits
All researchersFinders, reporters and analysts named in the CNA record. Click a name for that researcher’s other records.
No credits in the CNA record.
Variant candidates
Same product, same weakness class, within 18 months. If the patch missed the root cause, the sibling bug is here.
No nightly-computed relations.
Chain candidates
An authentication bypass and a privilege-requiring bug in the same product, published close together: combined they may become an unauthenticated path.
—
Bug bounty scope
No known public program.
Source: bounty-targets-data (public HackerOne, Bugcrowd, Intigriti, YesWeHack listings).
Technical details
Attack conditions
- Anyone who can reach it over the internet can trigger it.
- A low-privileged account is enough.
- No user action is required.
- No special conditions are required; it is repeatable.
If successful
- Confidentiality
- high · data can be read
- Integrity
- high · data or configuration can be modified
- Availability
- high · the service can be disrupted
- Attack vector
- Network
- Attack complexity
- Low
- Privileges required
- Low
- User interaction
- None
- Scope
- Unchanged
- Confidentiality impact
- High
- Integrity impact
- High
- Availability impact
- High
Weakness class (CWE)
—
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
nvd-secondary
Attack context
MITRE CAPEC attack patterns and ATT&CK techniques for this weakness class (CWE). A starting point for detection rules and threat hunting.
MITRE has no CAPEC/ATT&CK mapping for this CWE.
Change log
- Fix✗ → ✓
For records you follow, these changes also arrive as notifications. →
References
Show all references (5 more)Show less
- git.kernel.org/stable/c/3e4e2ea2a781018ed5d75f969e3e5606beb66e48
- git.kernel.org/stable/c/3e5360b422dd741cb315654a191fa73869a37414
- git.kernel.org/stable/c/4d37830c2c834987de329d58fb9a319067400361
- git.kernel.org/stable/c/59c32abaaec9cdd6164811c7e864e72f7554b82d
- git.kernel.org/stable/c/ad7d18df7423c522ed9dc7e33bd5d54c66b1bc37
Vendor advisories and official records. Exploit/PoC links are deliberately left out.