Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-31706— ksmbd: validate num_aces and harden ACE walk in smb_inherit_dacl()

Quick assessment

Affected
Linux Linux
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于smb_inherit_dacl()未验证num_aces值,可能导致堆分配过大且未初始化,以及ACE遍历使用过小的最小大小检查。

CVSS 8.8 · High EPSS 0.63% · P49

Affected Version Matrix 10

VendorProduct Version RangeStatus
Linux Linux e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9< 063a7409b0de46d7c770b65bb0338e6fdb3b1f0a affected
e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9< 3e5360b422dd741cb315654a191fa73869a37414 affected
e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9< 59c32abaaec9cdd6164811c7e864e72f7554b82d affected
e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9< 3e4e2ea2a781018ed5d75f969e3e5606beb66e48 affected
5.15 affected
< 5.15 unaffected
6.12.84≤ 6.12.* unaffected
6.18.25≤ 6.18.* unaffected
… +2 more rows
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-31706

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
ksmbd: validate num_aces and harden ACE walk in smb_inherit_dacl()
Source: CVE Program / CVE List V5
Vulnerability Description
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.
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Source: CVE Program / CVE List V5
Vulnerability Type
N/A
Source: CVE Program / CVE List V5
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于smb_inherit_dacl()未验证num_aces值,可能导致堆分配过大且未初始化,以及ACE遍历使用过小的最小大小检查。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

Vendor Product Affected Versions CPE Subscribe
Linux Linux e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 ~ 063a7409b0de46d7c770b65bb0338e6fdb3b1f0a -
Linux Linux 5.15 -

II. Public POCs for CVE-2026-31706

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-31706

请登录查看更多情报信息。

Patches & Fixes for CVE-2026-31706 (4)

Same Patch Batch · Linux · 2026-05-01 · 146 CVEs total

CVE-2026-43037 9.8 CRITICAL ip6_tunnel: clear skb2->cb[] in ip4ip6_err()
CVE-2026-43038 9.8 CRITICAL ipv6: icmp: clear skb2->cb[] in ip6_err_gen_icmpv6_unreach()
CVE-2026-43039 9.8 CRITICAL net: ti: icssg-prueth: fix missing data copy and wrong recycle in ZC RX dispatch
CVE-2026-43011 9.8 CRITICAL net/x25: Fix potential double free of skb
CVE-2026-31705 9.8 CRITICAL ksmbd: fix out-of-bounds write in smb2_get_ea() EA alignment
CVE-2026-31718 9.8 CRITICAL ksmbd: fix use-after-free in __ksmbd_close_fd() via durable scavenger
CVE-2026-43048 8.8 HIGH HID: core: Mitigate potential OOB by removing bogus memset()
CVE-2026-31739 8.8 HIGH crypto: tegra - Add missing CRYPTO_ALG_ASYNC
CVE-2026-31735 8.8 HIGH iommupt: Fix short gather if the unmap goes into a large mapping
CVE-2026-31773 8.8 HIGH Bluetooth: SMP: derive legacy responder STK authentication from MITM state
CVE-2026-31717 8.8 HIGH ksmbd: validate owner of durable handle on reconnect
CVE-2026-43018 8.8 HIGH Bluetooth: hci_event: fix potential UAF in hci_le_remote_conn_param_req_evt
CVE-2026-31709 8.8 HIGH smb: client: validate the whole DACL before rewriting it in cifsacl
CVE-2026-31712 8.3 HIGH ksmbd: require minimum ACE size in smb_check_perm_dacl()
CVE-2026-31779 8.1 HIGH wifi: iwlwifi: mvm: fix potential out-of-bounds read in iwl_mvm_nd_match_info_handler()
CVE-2026-31771 8.1 HIGH Bluetooth: hci_event: move wake reason storage into validated event handlers
CVE-2026-31708 8.1 HIGH smb: client: fix OOB read in smb2_ioctl_query_info QUERY_INFO path
CVE-2026-43051 8.1 HIGH HID: wacom: fix out-of-bounds read in wacom_intuos_bt_irq
CVE-2026-43019 7.8 HIGH Bluetooth: hci_conn: fix potential UAF in set_cig_params_sync
CVE-2026-31772 7.8 HIGH Bluetooth: hci_sync: fix stack buffer overflow in hci_le_big_create_sync

Showing top 20 of 146 CVEs. View all on vendor page &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2026-31706

No comments yet


Leave a comment