Threats affecting pkg:github/Zephyr
233 threats
Most recently published first
| Severity | CVSS | Signals | Threat | Source | Published | Score and star |
|---|---|---|---|---|---|---|
| Medium | 6.4 | EPSS 0.3% | CVE-2026-12520zephyrproject zephyr · Memory-safety Medium6.4EPSS 0.3%CVE Database V5CVE-2026-12520 CVE-2026-12520 is a memory safety vulnerability in the Zephyr project's HL7800 cellular modem driver. The flaw involves improper handling of AT response lines, leading to out-of-bounds writes on a 128-byte stack buffer. The most severe case is a full stack buffer overflow in the +KCELLMEAS handler, potentially allowing code execution in kernel context. The vulnerability affects Zephyr versions 2.4.0 up to but not including 4.3.2, and 4.4.0 up to but not including 4.4.2. A fix is available in versions 4.3.2 and 4.4.2. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| Medium | 5.0 | EPSS 0.2% | CVE-2026-12519zephyrproject zephyr · Memory-safety Medium5.0EPSS 0.2%CVE Database V5CVE-2026-12519 CVE-2026-12519 is a memory safety vulnerability in the Zephyr project's WNC-M14A2A LTE-M modem driver. The driver mishandles unsolicited %NOTIFYEV: events by improperly bounding loops that scan for quote delimiters, leading to out-of-bounds stack reads and a single-byte out-of-bounds stack write. This flaw can be triggered by network-derived content without user interaction, potentially causing stack disclosure and denial of service via modem RX thread crashes. The vulnerability is fixed in Zephyr versions 4.3.2 and 4.4.2. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| High | 8.8 | EPSS 0.1% | CVE-2026-9771zephyrproject zephyr · Memory-safety High8.8EPSS 0.1%CVE Database V5CVE-2026-9771 CVE-2026-9771 is a local privilege escalation vulnerability in the Zephyr RTOS affecting the flash_copy() system call on builds with CONFIG_USERSPACE enabled. The vulnerability arises because the kernel-side verification did not validate device pointers passed from user mode, allowing an unprivileged thread to supply forged device structures with attacker-controlled function pointers. This enables arbitrary code execution in supervisor mode, kernel crashes, or information disclosure. The issue is fixed by adding proper kernel object validation for the device pointers before dereferencing them. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| Medium | 4.3 | EPSS 0.3% | CVE-2026-12630zephyrproject zephyr · Bounds Medium4.3EPSS 0.3%CVE Database V5CVE-2026-12630 Zephyr's 6LoWPAN IP Header Compression (IPHC) uncompression code contains an out-of-bounds read in get_ihpc_inlined_size() (subsys/net/ip/6lo.c). The destination inline size is looked up in da_inline_size_table, which has 13 entries, using an index built from the M, DAC and DAM bits of the received IPHC dispatch word (iphc & NET_6LO_IPHC_DA_MASK, a 4-bit value of 0-15). The reserved combinations 13, 14 and 15 are not bounds-checked and read past the end of the table. The iphc word is taken directly from the received frame, and get_ihpc_inlined_size() is reached on every inbound 6LoWPAN frame via net_6lo_uncompress() from the 802.15.4 receive path (subsys/net/l2/ieee802154/ieee802154_6lo.c and ieee802154_6lo_fragment.c). An unauthenticated attacker on the radio/adjacent link can therefore craft a frame whose destination addressing-mode nibble selects an out-of-range index, with no privileges or user interaction. The out-of-bounds value becomes the computed inline_size, which then drives header reconstruction before the buffer-length check: it is used to dereference *(pkt->buffer->data + sizeof(iphc) + inline_size) and to compute a size_t diff that can underflow, leading to a further out-of-bounds read of the packet buffer and malformed uncompression. The practical impact is a radio-triggerable out-of-bounds read / denial-of-service on the receiver; the leaked byte is not returned to the attacker. The fix rejects any destination index beyond the table, aborting processing of the malformed frame. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| Medium | 4.6 | EPSS 0.2% | CVE-2026-12629zephyrproject zephyr · Dos Medium4.6EPSS 0.2%CVE Database V5CVE-2026-12629 CVE-2026-12629 is a denial of service vulnerability in the ARM PL011 UART driver of the Zephyr project. The driver fails to acknowledge certain receive error interrupts, causing an interrupt storm and CPU livelock when error interrupts are enabled and triggered by a malicious UART peer. This results in a permanent hang of the affected core. The vulnerability affects Zephyr versions from 1.14.0 up to but not including 4.3.2, and from 4.4.0 up to but not including 4.4.2. A fix is available in versions 4.3.2 and 4.4.2. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| High | 8.8 | EPSS 0.2% | CVE-2026-12366zephyrproject zephyr · Use After Free High8.8EPSS 0.2%CVE Database V5CVE-2026-12366 CVE-2026-12366 is a use-after-free vulnerability in the Zephyr RTOS kernel's dynamic kernel-object disposal path affecting versions from 1.12.0 up to but not including 4.5.0. The flaw occurs because the cleanup code did not handle timer objects properly, leading to a dangling pointer in the global timeout queue after the timer's memory is freed. When the timer expires, the kernel dereferences freed memory in interrupt context, causing memory corruption. This vulnerability can be triggered by an unprivileged user thread and can lead to privilege escalation via sandbox escape. The issue is fixed in Zephyr version 4.5.0 by adding proper cleanup for timer objects before freeing their memory. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 5.8 | EPSS 0.1% | CVE-2026-12365zephyrproject zephyr · Use After Free Medium5.8EPSS 0.1%CVE Database V5CVE-2026-12365 CVE-2026-12365 is a use-after-free vulnerability in the Zephyr project's kernel work queue implementation affecting versions from 2.6.0 up to but not including 4.5.0. The flaw occurs when a delayable work item's timeout handler runs concurrently with a cancellation that does not properly wait for the handler to finish, leading to kernel memory corruption or crash. This is a kernel-internal concurrency defect requiring an SMP build and specific timing conditions. The vulnerability has a medium severity with a CVSS score of 5.8. A fix is available in Zephyr version 4.5.0. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| High | 8.4 | EPSS 0.2% | CVE-2026-12364zephyrproject zephyr · Memory-safety High8.4EPSS 0.2%CVE Database V5CVE-2026-12364 CVE-2026-12364 is a memory-safety vulnerability in the Zephyr project affecting the user-space system-call verifier for z_log_msg_static_create(). The verifier failed to perform mandatory checks on user-supplied arguments, allowing unprivileged user-mode threads to pass arbitrary pointers and lengths to the kernel. This leads to kernel-mode denial of service via kernel faults and potential disclosure of arbitrary kernel memory through log messages. The vulnerability does not allow kernel memory corruption or out-of-bounds writes. Fixed in Zephyr versions 4.3.2 and 4.4.2. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 4.2 | EPSS 0.2% | CVE-2026-12363zephyrproject zephyr · Bounds Medium4.2EPSS 0.2%CVE Database V5CVE-2026-12363 CVE-2026-12363 is a vulnerability in the Zephyr project's LoRaWAN Fragmented Data Block Transport service where the fragment counter in a received DATA_FRAGMENT command is not validated before use. This can cause an out-of-bounds write to the decoder's internal state, leading to corruption and denial of the firmware update session. Exploitation requires authenticated downlink access and an active fragmentation session. The issue is fixed by rejecting fragment counters with a value of zero. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.5 | EPSS 0.2% | CVE-2026-12236zephyrproject zephyr · Dos Medium6.5EPSS 0.2%CVE Database V5CVE-2026-12236 CVE-2026-12236 is a denial of service vulnerability in the Zephyr Bluetooth host GATT client. It occurs in the parse_read_std_char_desc() function when processing a malicious ATT Read By Type Response with a zero-length entry. This causes an infinite loop that hangs the Bluetooth host processing thread, leading to a denial of service. The flaw can be triggered by any connected peer during standard descriptor discovery without requiring authentication. The issue is fixed in Zephyr versions 4.3.2 and 4.4.2. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.3 | EPSS 0.1% | CVE-2026-12235zephyrproject zephyr · Bounds Medium6.3EPSS 0.1%CVE Database V5CVE-2026-12235 The Linkable Loadable Extensions (llext) subsystem mis-handles PLT/RELA relocation entries when linking a relocatable (partially-linked) ELF extension. In llext_link_plt() (subsys/llext/llext_link.c), the relocatable branch (tgt != NULL, the path used for Xtensa relocatable objects) computed the patch address as ext->mem[LLEXT_MEM_TEXT] - text.sh_offset + rela.r_offset + tgt->sh_offset and then performed the relocation write there without validating rela.r_offset. Its sibling shared/dynamic branch already rejected out-of-range offsets via llext_file_offset(). rela.r_offset is read directly from the ELF's RELA table, so a crafted entry with an offset larger than the target section makes the write land arbitrarily far outside the extension's text buffer. The result is an attacker-influenced out-of-bounds write (the location via r_offset, the written value being the resolved symbol address) performed in supervisor context at link time, before any extension code runs. The path is reached from llext_load() whenever an application loads an attacker-influenced ELF extension on Xtensa with writable storage; llext is documented to accept extensions of untrusted origin. Impact is supervisor-context memory corruption (integrity and availability loss, and a sandbox-boundary escape for user-mode extensions). Exploitation is gated by the Xtensa relocatable PLT path and writable storage, and turning the out-of-range write into a useful primitive is non-trivial. The fix adds a bound check rejecting any RELA entry whose r_offset >= tgt->sh_size, mirroring the existing validation in the shared branch. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-12234zephyrproject zephyr · Memory-safety High7.8EPSS 0.1%CVE Database V5CVE-2026-12234 The userspace syscall verifiers z_vrfy_zsock_sendmsg() and z_vrfy_zsock_recvmsg() in subsys/net/lib/sockets/sockets.c snapshot the caller-supplied struct net_msghdr into a kernel-side copy with k_usermode_from_copy(), but then re-read the still-live user struct for subsequent decisions. The kernel iovec shadow buffer is sized from one read of msg->msg_iovlen, while the population loop is bounded by a second, live read of the same field. Because msg points into ordinary user memory, a cooperating second thread in the same memory domain can inflate msg->msg_iovlen in the window between the sizing read and the loop test (a classic double-fetch / TOCTOU). The population loop then iterates past the number of net_iovec slots actually allocated, writing attacker-influenced iov_base/iov_len values beyond the end of the kernel-heap shadow buffer. The recvmsg verifier has the same defect on both its inbound and result write-back loops. The code is reachable from an unprivileged user thread whenever CONFIG_USERSPACE is enabled and the zsock_sendmsg/zsock_recvmsg syscalls are available. A successful race corrupts kernel-managed heap memory across the user-to-kernel privilege boundary, yielding a local privilege-escalation primitive or, at minimum, a kernel-fault denial of service. The fix copies the header once and derives every size, bound, and gate from the snapshot, copying each iovec entry atomically so its base and length can no longer be raced apart. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| Medium | 5.9 | EPSS 0.5% | CVE-2026-12233zephyrproject zephyr · Dos Medium5.9EPSS 0.5%CVE Database V5CVE-2026-12233 The PSA Protected Storage credential backend (subsys/net/lib/tls_credentials/tls_credentials_trusted.c) declared its credential-store mutex as a plain zero-filled static struct k_mutex credential_lock; and never called k_mutex_init() on it. A statically zero-filled k_mutex has an uninitialized wait queue (its dlist head/tail are NULL instead of the self-referential sentinels that k_mutex_init/K_MUTEX_DEFINE install). The uncontended lock path does not touch the wait queue, so the defect is latent and serialized use behaves correctly. When two execution contexts contend on the lock, k_mutex_lock() pends the blocking thread on the wait queue via z_pend_curr(), which calls sys_dlist_append() on the zeroed list and dereferences a NULL tail pointer (tail->next = node), faulting the kernel. The lock is held during TLS handshake credential loading and by all credential add/get/delete operations, so a deployment performing concurrent TLS handshakes (for example a server handling multiple simultaneous connections from a remote peer) or a credential-management operation concurrent with a handshake can trigger the dereference. The impact is a denial of service: a deterministic kernel panic / device reset on the first contention. There is no memory corruption beyond the NULL dereference and no confidentiality or integrity impact; mutual exclusion on the fast path remains correct. Exposure is limited to builds with CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE enabled (PSA Protected Storage / TF-M platforms); the default volatile RAM backend initializes its lock correctly and is unaffected. The fix initializes the mutex statically with K_MUTEX_DEFINE(credential_lock), providing a valid wait queue so the contended path no longer touches a NULL list. EPSS 0.5%Vulnerability | CVE Database V5 | ||
| Medium | 6.1 | EPSS 0.1% | CVE-2026-12232zephyrproject zephyr · Bounds Medium6.1EPSS 0.1%CVE Database V5CVE-2026-12232 The Intel ALH digital-audio-interface driver function dai_alh_get_properties() in drivers/dai/intel/alh/alh.c used a caller-supplied int stream_id with no range validation. The value indexes the fixed-size static const uint8_t alh_handshake_map[64] array and scales a FIFO register address, so an out-of-range stream_id produces an out-of-bounds read of one byte at an attacker-chosen signed offset from the array. That byte is written into prop->dma_hs_id and the resulting struct dai_properties is copied back to the caller, leaking it. dai_get_properties_copy() is a Zephyr __syscall, and its verifier z_vrfy_dai_get_properties_copy() (drivers/dai/dai_handlers.c) validates only the device-object permission and the destination buffer, not stream_id. A user-mode thread that has been granted access to the ALH DAI device object can therefore call the syscall with an arbitrary stream_id, crossing the userspace/kernel sandbox boundary. The impact is a one-byte-per-call arbitrary-offset kernel information disclosure (and leakage of a computed kernel address via fifo_address); a stream_id that resolves to an unmapped page faults in kernel context, giving a local denial of service. Exploitation requires CONFIG_USERSPACE and device access, making this a local, moderate-severity issue. The fix rejects negative and too-large stream_id values up front and returns NULL, which the copy wrapper maps to -ENOENT. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| Medium | 5.2 | EPSS 0.3% | CVE-2026-12052zephyrproject zephyr · Bounds Medium5.2EPSS 0.3%CVE Database V5CVE-2026-12052 The USB device-side CDC NCM class control-to-host handler usbd_cdc_ncm_cth in subsys/usb/device_next/class/usbd_cdc_ncm.c builds a fixed-size response for the GET_NTB_PARAMETERS (28-byte struct ntb_parameters) and GET_NTB_INPUT_SIZE (8-byte struct ntb_input_size) class requests and copies the whole structure into the control DATA IN buffer with net_buf_add_mem(buf, ..., sizeof(...)), ignoring the host-supplied wLength. The control DATA IN buffer is allocated by the USB stack with a capacity of exactly wLength bytes (usbd_ep_ctrl_data_in_alloc -> udc_ctrl_data_alloc -> net_buf_alloc_len(&udc_ep_pool, wLength); no round-up is applied for the IN endpoint). Because net_buf_add_mem/net_buf_simple_add only bounds the copy with an __ASSERT_NO_MSG, which is compiled out in production builds, a host that issues one of these standard CDC NCM control requests with a wLength smaller than the response structure (e.g. wLength = 1) causes the handler to memcpy up to 27 bytes past the end of the allocated pool buffer. The request fields come straight from the USB SETUP packet, so any host (or USB interposer) the Zephyr device enumerates against can trigger the overflow with no authentication once an image built with the device_next USB stack and the CDC NCM class is connected. The out-of-bounds write corrupts adjacent allocations and metadata in the shared udc_ep_pool, primarily causing memory corruption and denial of service of the USB stack; the overflow length is bounded (<= 27 bytes) and the written content is fixed device constants, and the bug reads nothing back so there is no information disclosure. The fix clamps the copy with MIN(sizeof(...), setup->wLength), matching the existing CDC ACM handler. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| Medium | 4.6 | EPSS 0.2% | CVE-2026-12051zephyrproject zephyr · Memory-safety Medium4.6EPSS 0.2%CVE Database V5CVE-2026-12051 The USB DFU class implementation in Zephyr's new (experimental) device_next USB device stack contains a NULL pointer dereference in handle_download() (subsys/usb/device_next/class/usbd_dfu.c). The handler computes MIN(setup->wLength, buf->len) and passes buf->data to the image write callback without checking that the buf net_buf pointer is non-NULL. The handler is reached over the USB control endpoint, driven by the USB host. For a DFU_DNLOAD (download) request with no Data OUT stage — notably the zero-length terminating download that the DFU protocol uses to end a firmware transfer — the USB core invokes the class handler with a NULL buffer. After the device has been advanced to the DFU_DNLOAD_IDLE state (by sending one valid download block and a GET_STATUS), a zero-length DFU_DNLOAD reaches handle_download() with buf == NULL, dereferencing it. The result is a NULL+offset read that triggers a fatal CPU fault, i.e. a denial of service (device crash/reset). The attacker is whatever controls the USB host the device is attached to; DFU download support must be enabled with a registered image. There is no memory corruption or information disclosure — impact is limited to availability. The fix adds an explicit if (buf != NULL) guard so the callback receives a zero-length, NULL-data transfer instead of crashing. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 5.9 | EPSS 0.2% | CVE-2026-11894zephyrproject zephyr · Use After Free Medium5.9EPSS 0.2%CVE Database V5CVE-2026-11894 The Realtek BEE Bluetooth HCI driver's send callback, bt_hci_bee_send() in drivers/bluetooth/hci/hci_bee.c, violated the bt_hci_driver_api buffer-ownership contract. That contract requires the driver to consume (unref) the transmit net_buf only on success; on an error return the host caller retains ownership and unrefs the buffer itself. The pre-fix code routed all error paths through a shared cleanup label that unconditionally called net_buf_unref(buf) before returning the error code. Because the host TX paths (in subsys/bluetooth/host/hci_core.c) unref the buffer again after send() returns an error, the buffer is freed twice: the driver returns it to its net_buf pool and the host then unrefs the already-freed buffer, corrupting the shared pool / underflowing the reference count (CWE-415). The same error branch additionally dereferenced buf->len inside a LOG_ERR call after the buffer had already been unref'd, a read of freed memory (CWE-416) that is compiled in at the default error log level. The failing edges are reached when the controller's host-to-controller buffer allocation fails or the controller send fails (resource-exhaustion / IO conditions). A remote Bluetooth peer can push the device toward these conditions indirectly by driving heavy host transmit activity, at which point the double-free corrupts the host net_buf pool and most likely crashes the device, with residual potential for further memory corruption. The impact is confined to builds using this specific Realtek BEE HCI driver. The fix returns early from each error path without unreffing and unrefs the buffer only on the success path, restoring the ownership contract and eliminating both the double-free and the use-after-free read. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Low | 3.6 | EPSS 0.1% | CVE-2026-11985zephyrproject zephyr · Info-leak Low3.6EPSS 0.1%CVE Database V5CVE-2026-11985 On the Zephyr ARM port, enabling the hardware FPU (CONFIG_FPU) forces the "Floating point ABI" choice, which defaults to CONFIG_FP_HARDABI. Both FP_HARDABI and FP_SOFTABI permit the compiler to emit hardware FP instructions in any function, even code that never uses floating-point types. However, the callee-saved FP registers (s16-s31 / d8-d15) are only saved and restored across a context switch when CONFIG_FPU_SHARING is enabled (arch/arm/core/cortex_m/swap_helper.S and arch/arm/core/cortex_a_r/swap_helper.S), and prior to this fix selecting an ABI did not enable FPU register sharing, which defaults off. In a build that enables the FPU with the default ABI but leaves CONFIG_FPU_SHARING disabled, the kernel preserves no callee-saved FP register state across thread switches. The documented precondition for this "unshared" mode — that only a single thread ever executes FP instructions — is silently violated because the compiler may generate FP instructions in every thread. Under CONFIG_USERSPACE, where threads are mutually isolated, this becomes an information-disclosure boundary crossing: a victim thread can leave secret-derived values in s16-s31, and a co-resident unprivileged thread can read those registers directly (FP register access is not privilege-gated), recovering data left behind by another thread. Without userspace the same defect causes cross-thread FP state corruption (a correctness fault). The leak is bounded to the 16 callee-saved single-precision registers and is opportunistic, so impact is low. The fix makes FP_HARDABI and FP_SOFTABI select CONFIG_FPU_SHARING and tags every thread with K_FP_REGS at creation, so callee-saved FP state is always preserved across context switches whenever the compiler may emit FP instructions. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| Medium | 5.9 | EPSS 0.2% | CVE-2026-11893zephyrproject zephyr · Use After Free Medium5.9EPSS 0.2%CVE Database V5CVE-2026-11893 The Bluetooth HCI driver for Bouffalo Lab on-chip BLE controllers (BL60x/BL70x/BL61x), bt_bflb_send() in drivers/bluetooth/hci/hci_bflb.c, violates the bt_hci_driver_api.send() buffer-ownership contract. That contract (documented at include/zephyr/drivers/bluetooth.h) requires the buffer reference to be consumed only on success; on error the caller still owns the reference and unrefs it. The driver instead routed all error paths through a shared label that unconditionally called net_buf_unref(buf) before returning the error code, consuming the buffer on failure as well. When send() returns an error, the host TX path (send_buf() in subsys/bluetooth/host/conn.c) unrefs the same buffer again, believing it still owns it. This double-unref over-decrements the net_buf reference count. Because the buffer is a TX fragment whose destroy callback also decrements its still-queued parent buffer, the parent is freed prematurely while reachable on the connection TX queue, producing a use-after-free and corruption of the shared net_buf pool rather than a benign leak. The error conditions are on the host-to-controller transmit path (controller send failure, or an unsupported H:4 packet type), so they are not driven directly by attacker-supplied radio bytes; a remote/adjacent peer can influence them only indirectly, e.g. by inducing controller TX failures under heavy link load. The consequence when reached is BLE-stack denial of service (crash / pool corruption) with possible further memory corruption, bounded to devices using one of these Bouffalo Lab on-chip controllers. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Low | 2.5 | EPSS 0.1% | CVE-2026-11812zephyrproject zephyr · Race Low2.5EPSS 0.1%CVE Database V5CVE-2026-11812 The UpdateHub management subsystem (subsys/mgmt/updatehub/updatehub.c) drives every update operation through a single file-scope ctx structure that holds the CoAP block context, payload buffer, status code, socket, and a one-element poll-fd array fds[1]. Access to ctx was not serialized, and prepare_fds() wrote ctx.fds[ctx.nfds] and incremented ctx.nfds with no bounds check. Two independent paths mutate ctx concurrently: the background autohandler running on the system workqueue, and user-triggered operations reached through the updatehub run shell command, direct API calls, or — since the operations are exposed as syscalls — userspace threads. When a second flow enters prepare_fds() while ctx.nfds is already 1, the write lands one element past the array; by struct layout it overlaps the adjacent ctx.sock/ctx.nfds members. More broadly, the unsynchronized sharing lets two flows interleave connection setup and teardown, double-closing a socket descriptor or scribbling the shared buffers. The result is corruption of the update subsystem's internal state and denial of service of the firmware-update path; the out-of-bounds write is contained within the ctx structure and there is no demonstrated path to memory outside it or to code execution. Triggering requires a local actor able to invoke update operations (or, with CONFIG_USERSPACE, an unprivileged userspace thread) and to win a timing race against the background handler; remote peers cannot control the race timing. The fix serializes the entry points with a mutex and adds a bounds check to prepare_fds(). EPSS 0.1%Vulnerability | CVE Database V5 |
Page 7 of 12