Read the docs
TI-2026-69871 Aliases CVE-2026-19569

Integer overflow in Zephyr kernel object allocation enables heap corruption

Priority LOW 39CWE-190Published · Updated

Key facts

Attack vector
Local
Privileges required
Low
User interaction
None
Attack complexity
Low
Impact type
Code execution
Confidentiality · integrity · availability
High · High · High
Fix status
Fixed

Attack profile from CVSS 3.1 · CNA. Fix status from CNA. Impact type from CWE-190 and the CVSS impact.

Summary

Zephyr from 3.5.0 before 4.3.2 and from 4.4.0 before 4.5.0 contains an integer overflow (CWE-190) in dynamic kernel object allocation. The size used to compute the backing heap allocation is not checked for unsigned wrap-around, so a very large size from user mode makes the allocation far too small. An unprivileged user-mode thread can then have a complete kernel object written over the truncated allocation, corrupting the kernel heap. This can escape the CONFIG_USERSPACE sandbox, and exploitation requires CONFIG_USERSPACE and CONFIG_DYNAMIC_OBJECTS to be enabled.

Written with Claude Haiku 5.5 from the sources below · 2026-11-04

Description from the CNA

dynamic_object_create() in kernel/userspace/userspace.c computed the backing allocation for a dynamically allocated kernel object as obj_size_get(otype) + size, and for thread stack elements as STACK_ELEMENT_DATA_SIZE(size) (a round-up plus fixed overhead), without checking either expression for unsigned wrap-around. A size close to SIZE_MAX makes the computed total wrap to a very small value, so the heap chunk handed out is a few bytes while the object descriptor is still tagged with the full requested type and registered in the kernel object table. The size argument reaches that arithmetic directly from user mode. k_object_alloc_size() is declared __syscall in include/zephyr/sys/kobject.h, its verifier z_vrfy_k_object_alloc_size() in kernel/userspace/userspace_handler.c is a bare pass-through, and z_object_alloc() only range-checks otype — nothing bounds size. The stack-element branch is additionally reachable through the k_thread_stack_alloc() syscall via kernel/dynamic.c. Because subsequent kernel-object validation checks only the object's type and initialization state, the undersized handle passes K_SYSCALL_OBJ_INIT()/K_SYSCALL_OBJ_NEVER_INIT(), and the matching init syscall (for example k_mutex_init(), k_sem_init(), or k_thread_create()) then writes a complete object over the truncated allocation. An unprivileged user-mode thread can therefore trigger a supervisor-mode out-of-bounds write into the kernel resource-pool heap, of a size and content it substantially controls, corrupting sys_heap chunk metadata and adjacent kernel objects. Under CONFIG_GEN_PRIV_STACKS the thread-stack branch additionally stores an attacker-influenced wild pointer as a user thread's privileged stack base. The practical result is escape from the CONFIG_USERSPACE sandbox — kernel-level code execution or at minimum kernel memory corruption and system compromise. Exploitation requires CONFIG_USERSPACE together with CONFIG_DYNAMIC_OBJECTS (also selected by CONFIG_DYNAMIC_THREAD under userspace), and a calling thread with an assigned resource pool. The fix rejects both overflowing computations and frees the partially built descriptor.

Why it matters now

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00176 7th percentileScored 2026-11-07
Fix Fixed zephyr (zephyrproject): 4.3.2, 4.5.0

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
None
Automatable
No
Technical impact
Total

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
zephyrprojectzephyr3.5.0 to before 4.3.2; 4.4.0 to before 4.5.04.3.2, 4.5.0Patch availableCNA
  • zephyr Vendorzephyrproject Affected 3.5.0 to before 4.3.2; 4.4.0 to before 4.5.0 Fixed in 4.3.2, 4.5.0 Patch available CNA

CPE names Threatist (inferred) · 1

Inferred from how NVD named this product before; not given by a source.

CPEVersionsRoleVendor
cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:*——zephyrproject
  • cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:* Versions — — ·zephyrproject

Remediation

Update Zephyr to 4.3.2 or 4.5.0, the fixed versions. The sources list no fixed version for Zephyr releases before 3.5.0 in this record.

Written with Claude Haiku 5.5 from the sources below · 2026-11-04

  • Fix · CNA zephyr (zephyrproject) Fixed in 4.3.2, 4.5.0

Fixed in the same release

Records fixed by the same vendor advisory or release, as the CNA lists them.

  • Release ·

    zephyrproject zephyr 4.3.2, 4.5.0

    4 records Highest priority Priority LOW 4 LOW

    Other records, highest priority first

    • TI-2026-69875 Type confusion in Zephyr device_deinit system call allows kernel code executionPriority LOW 35
    • TI-2026-69874 ARM64 MMU reuses in-use ASIDs, breaking memory domain isolation in ZephyrPriority LOW 31
    • TI-2026-69873 Race condition in Zephyr ITE SHI backend allows out-of-bounds readPriority LOW 28

Timeline

  1. 2026-10-09 Threatist record created from CVE-2026-19569
  2. 2026-10-10 CISA SSVC decision points changed
  3. 2026-10-10 Priority changed: MEDIUM → LOW
  4. 2026-11-04 Fix available: [email protected], [email protected] · CNA

References

  • TI-2026-04422 Out-of-bounds read/write in HTTP WebSocket upgrade via non-null-terminated Sec-WebSocket-Key CVSS 3.1CRITICAL 9.8
  • TI-2026-01361 dns: memory‑safety issue in the DNS name parser CVSS 3.1CRITICAL 9.8
  • TI-2026-09174 Unterminated URI buffer causes out-of-bounds read in LwM2M firmware pull (Package URI) CVSS 3.1CRITICAL 9.1
  • TI-2026-09168 Stack buffer overflow in `net_ipaddr_parse()` IPv4 address-with-port parsing in `subsys/net/ip/utils.c` CVSS 3.1CRITICAL 9.8
  • TI-2024-09625 net: lib: http_server: Buffer Under-read CVSS 3.1HIGH 8.6
  • TI-2021-02863 Usb bluetooth device ACL read cb buffer overflow CVSS 3.1CRITICAL 9.6
See all 341 →

Sources

This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences