Threats affecting pkg:github/zephyr
220 threats
Most recently published first
| Severity | CVSS | Signals | Threat | Source | Published | Score and star |
|---|---|---|---|---|---|---|
| Low | 3.7 | EPSS 0.2% | CVE-2026-18416zephyrproject zephyr · Bounds Low3.7EPSS 0.2%CVE Database V5CVE-2026-18416 CVE-2026-18416 is a low-severity vulnerability in the Zephyr project affecting the CoAP server subsystem. It involves an out-of-bounds read in the match_path_uri() function when processing URI queries in CoAP /.well-known/core requests. The flaw causes reading past the end of a URI option value buffer, leading to undefined behavior but no information disclosure or matching errors. The issue affects Zephyr versions from 1.8.0 up to but not including 4.4.2. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.3 | EPSS <0.1% | CVE-2026-18415zephyrproject zephyr · Bounds Medium6.3EPSS <0.1%CVE Database V5CVE-2026-18415 CVE-2026-18415 is a medium severity vulnerability in the Zephyr project affecting versions from 3.2.0 up to but not including 4.4.2. It involves an out-of-bounds write in the ieee802154_send() function when sending packets through NET_AF_PACKET sockets bound to an 802.15.4 interface. The vulnerability arises because length validation is skipped in certain socket types, allowing an application to cause a buffer overrun past a fixed 125-byte transmit buffer. This can lead to memory corruption, crashes, or kernel state compromise. The issue is not reachable via normal radio packet transmission paths. A fix is available that adds proper length validation and prevents buffer overruns. EPSS <0.1%Vulnerability | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-18414zephyrproject zephyr · Bounds High7.8EPSS 0.1%CVE Database V5CVE-2026-18414 CVE-2026-18414 is a high-severity vulnerability in the Zephyr project's ADC driver for the ADI MAX32 device. The driver incorrectly validates the buffer size for ADC sampling sequences, allowing a buffer overrun by writing more data than the buffer can hold. This can lead to kernel memory corruption, potentially enabling privilege escalation or denial of service from an unprivileged user-mode thread. The issue affects Zephyr versions from 4.0.0 up to but not including 4.4.2. A fix has been implemented by replacing the faulty buffer size check with a proper validation helper that accounts for sample size. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-18413zephyrproject zephyr · Bounds High7.8EPSS 0.1%CVE Database V5CVE-2026-18413 CVE-2026-18413 is a vulnerability in the Zephyr project affecting the NXP MCUX LPADC driver. The driver fails to check if the destination buffer is large enough before writing ADC samples, allowing out-of-bounds writes. This can lead to kernel memory corruption when unprivileged user-mode threads control the ADC device with CONFIG_USERSPACE enabled. The issue enables potential privilege escalation and denial-of-service. A fix has been implemented to validate buffer sizes before sampling. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| High | 7.8 | EPSS 0.2% | CVE-2026-16513zephyrproject zephyr · Memory-safety High7.8EPSS 0.2%CVE Database V5CVE-2026-16513 CVE-2026-16513 is a high-severity memory-safety vulnerability in the Zephyr RTOS affecting versions from 3.4.0 up to but not including 4.4.2. It involves an unchecked write through a user-supplied pointer in the RTIO syscall verifier, allowing a user-mode thread with RTIO kernel object access to perform a write-what-where operation in kernel memory. This can lead to kernel memory corruption, crashes, or privilege escalation from user mode to kernel mode. The issue only affects builds with CONFIG_USERSPACE and CONFIG_RTIO enabled. A fix has been implemented to add proper memory write checks on the output parameter to prevent this vulnerability. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 5.3 | EPSS 0.2% | CVE-2026-17054zephyrproject zephyr · Bounds Medium5.3EPSS 0.2%CVE Database V5CVE-2026-17054 CVE-2026-17054 is a vulnerability in the Espressif ESP-hosted Wi-Fi driver within the Zephyr project. It involves improper bounds checking of a 16-bit TLV data_length field parsed from SPI frames, leading to out-of-bounds reads of up to approximately 62 KB past a stack object. This can cause device faults and denial of service due to heap allocations and thread blocking. The vulnerability affects Zephyr versions from 4.2.0 up to but not including 4.4.2. The impact is limited to denial of service without data disclosure. There is no indication of an official patch or vendor advisory in the provided data. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 5.3 | EPSS <0.1% | CVE-2026-15890zephyrproject zephyr · Crypto Medium5.3EPSS <0.1%CVE Database V5CVE-2026-15890 CVE-2026-15890 is a medium severity vulnerability in the Zephyr project affecting versions 4.0.0 up to but not including 4.4.2. It involves a race condition in the default AEAD nonce provider for the PSA Internal Trusted Storage (ITS) transform module, where nonce counters are stored in unsynchronized static variables. Concurrent writes to the same UID can cause nonce reuse with AES-GCM or ChaCha20-Poly1305 encryption, leading to catastrophic cryptographic failures such as plaintext leakage and authentication key exposure. The vulnerability requires an application writing concurrently to the same UID from multiple threads and the presence of raw storage access to exploit. The fix involves serializing nonce generation with a mutex to prevent race conditions. EPSS <0.1%Vulnerability | CVE Database V5 | ||
| High | 7.8 | EPSS 0.2% | CVE-2026-17052zephyrproject zephyr · Memory-safety High7.8EPSS 0.2%CVE Database V5CVE-2026-17052 The Time-aware GPIO syscall verification handler z_vrfy_tgpio_pin_read_ts_ec() in drivers/timeaware_gpio/timeaware_gpio_handlers.c validated only the port device object and passed the caller-supplied timestamp and event_count output pointers to the driver without a K_SYSCALL_MEMORY_WRITE() check. The other handlers in the same file (z_vrfy_tgpio_port_get_time(), z_vrfy_tgpio_port_get_cycles_per_second()) already performed that check, so the omission left one syscall unguarded. tgpio_pin_read_ts_ec() is declared __syscall, so with CONFIG_USERSPACE=y an unprivileged user-mode thread that has been granted access to the TGPIO device object can invoke it with arbitrary pointer values. tgpio_intel_read_ts_ec() in drivers/timeaware_gpio/timeaware_gpio_intel.c bounds-checks only the pin index and then unconditionally performs timestamp = ... and event_count = ..., executing two 8-byte stores in supervisor mode at addresses chosen by the user-mode caller. The result is a write-what-where primitive that crosses the userspace/kernel boundary: the target address is fully attacker-chosen and the stored values are the hardware time-capture and event-counter register contents. Corrupting kernel data structures this way can escalate the calling thread to supervisor privilege or crash the system; the device-object permission required is a narrow capability that is not intended to confer any kernel-memory access. The fix adds the two missing K_SYSCALL_MEMORY_WRITE() validations before the driver call. Exposure is narrow in practice. Only builds with CONFIG_USERSPACE=y and CONFIG_TIMEAWARE_GPIO=y compile the affected file, and from v3.6.0 onward the file additionally referenced a relocated header (<zephyr/syscall_handler.h>) and removed Z_SYSCALL_* macros, so such a configuration failed to build until those were repaired after v4.4.0. Downstream trees that locally corrected that breakage, and v3.5.0 builds where it did not exist, are the exposed population. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.0 | EPSS 0.2% | CVE-2026-17051zephyrproject zephyr · Bounds Medium6.0EPSS 0.2%CVE Database V5CVE-2026-17051 The Intel SEDI IPM (inter-processor mailbox) driver in drivers/ipm/ipm_sedi.c handles an inbound message interrupt in ipm_event_dispose(). It read the peer-written doorbell register, extracted the payload length with IPC_HEADER_GET_LENGTH(), and passed that length straight to sedi_ipc_read_msg() to copy the message into struct ipm_sedi_context.incoming_data_buf, without checking it against the buffer size. The doorbell length field is 10 bits wide (IPC_HEADER_LENGTH_MASK is 0x03FF), so it can encode up to 1023 bytes, while incoming_data_buf is IPC_DATA_LEN_MAX (128) bytes. The bounds check in the underlying HAL sedi_ipc_read_msg() is a DBG_CHECK that compiles away unless CONFIG_DEBUG is set, so no check remained in a production image. The doorbell register is written by the peer processor on the other side of the IPC link — for the intel_ish_5_* targets, the host CPU's ISH driver, reached through the device's memory-mapped register window. Host-side software with driver-level or raw BAR access can therefore set a length of up to 1023 and cause the interrupt handler to copy far past the destination buffer. The affected path requires an application to have registered an IPM receive callback via ipm_register_callback(), which is the driver's normal mode of use. The result is an out-of-bounds write of up to 895 bytes into static (.bss) memory, performed in interrupt context. The overflow first clobbers the rest of struct ipm_sedi_context — including the k_sem and k_mutex used by the transmit path, whose wait queues contain self-referential list pointers — and then adjacent static data, giving a kernel data-structure corruption and crash primitive. The overflowing bytes are read from registers following the message window, a portion of which are themselves peer-programmable. The fix rejects any doorbell whose encoded length exceeds IPC_DATA_LEN_MAX, logging it and acknowledging the doorbell so the peer is not left waiting. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 5.7 | EPSS 0.2% | CVE-2026-17050zephyrproject zephyr · Use After Free Medium5.7EPSS 0.2%CVE Database V5CVE-2026-17050 The experimental USB host stack allocates a per-device configuration-descriptor buffer, udev->cfg_desc, from the dedicated usb_device_heap in usbh_device_set_configuration() (subsys/usb/host/usbh_device.c). On three failure paths — a failed full-length GET_DESCRIPTOR(CONFIGURATION) read, a mismatch between the short and full descriptor reads, and a rejected descriptor in parse_configuration_descriptor() — the buffer was released with k_heap_free() but the pointer was left dangling. The cleanup in usbh_device_free() is guarded only by if (udev->cfg_desc != NULL), so it frees the same block a second time. The path is driven entirely by the attached peripheral: usbh_device_connect() calls usbh_device_init(), which ends in usbh_device_set_configuration(), and on failure usbh_device_connect() calls usbh_device_free(). On v4.4.x this happens during the same enumeration, with no unplug required; on v4.1.0–v4.3.x the second free instead arrives via dev_removed_handler()/dev_connected_handler() in subsys/usb/host/usbh_core.c, so it requires a removal or duplicate-connect event after the failed enumeration — a sequence the attached device fully controls. A malicious or malformed USB device only has to answer the first 9-byte configuration-descriptor request with a well-formed header and then fail any of the three checks, for example by returning a full descriptor whose interface count disagrees with bNumInterfaces, or by answering the second read with different bytes. The result is a double free on usb_device_heap. On builds where lib/heap hardening is active (the current default CONFIG_SYS_HEAP_HARDENING_BASIC), sys_heap_free() detects the already-free chunk and calls k_panic(), giving a deterministic, peripheral-triggered denial of service of the USB host. On builds without that detection — earlier releases, or CONFIG_SYS_HEAP_HARDENING_NONE — the second free manipulates a chunk already on the free list, corrupting the heap's free list so that later allocations can return overlapping or invalid blocks. Exploitation beyond denial of service is bounded by the fact that usb_device_heap is a small dedicated heap (CONFIG_USBH_USB_DEVICE_HEAP, default 1024 bytes) whose only client is this descriptor buffer, and by CONFIG_USB_HOST_STACK being marked experimental and disabled by default. The fix sets udev->cfg_desc = NULL after every k_heap_free(), making the cleanup guard sound. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 4.7 | EPSS 0.2% | CVE-2026-16515zephyrproject zephyr · Dos Medium4.7EPSS 0.2%CVE Database V5CVE-2026-16515 net_icmpv6_send_error() in subsys/net/ip/icmpv6.c implemented only one of the three RFC 4443 section 2.4 suppression rules (do not answer an ICMPv6 error with an ICMPv6 error). It did not check whether the triggering packet's source address identifies a single node (rule e.6) or whether the packet was sent to a multicast destination (rule e.3, whose only exceptions are Packet Too Big and Parameter Problem Code 2). Of the five call sites, only the port-unreachable path in subsys/net/ip/connection.c carried an equivalent guard of its own; the extension-header, unknown-next-header and fragmentation paths in subsys/net/ip/ipv6.c and subsys/net/ip/ipv6_fragment.c had none. An unauthenticated attacker with access to the same link can exploit this in two ways. Sending a single IPv6 packet to the link-local all-nodes group ff02::1 carrying an unrecognized next-header value, with the source address spoofed to a chosen victim, causes every Zephyr node on the link to emit an ICMPv6 Parameter Problem message to that victim — a reflector with an amplification factor equal to the number of nodes. Alternatively, sending a unicast packet whose source address is a multicast address causes the node to transmit its ICMPv6 error to that multicast address, turning one unicast packet into a link-flooded multicast frame. Packets addressed to ff02::1 are accepted unconditionally by ipv6_input(), and no check rejects a multicast source address, so no special configuration is required. The impact is degraded availability of the shared link and of the reflection victim, together with the ability for the attacker to hide its own address behind the responding nodes. The effect is amplified on constrained mesh links such as 802.15.4/Thread, where link-local multicast is flooded hop by hop. There is no memory-safety consequence: the error packet itself is well formed, it is simply emitted in cases where the protocol forbids it. The fix adds both suppression checks at the single choke point in net_icmpv6_send_error(), before any reply packet is allocated, preserving the RFC-mandated exceptions for NET_ICMPV6_PACKET_TOO_BIG and Parameter Problem Code 2. Note that the IPv4 counterpart net_icmpv4_send_error() in subsys/net/ip/icmpv4.c still checks only for a broadcast destination and retains an equivalent gap for multicast destinations and non-unique sources. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 4.3 | EPSS 0.3% | CVE-2026-16514zephyrproject zephyr · Bounds Medium4.3EPSS 0.3%CVE Database V5CVE-2026-16514 gptp_mi_qualify_announce() in subsys/net/l2/ethernet/gptp/gptp_mi.c walks the Path Trace TLV of a received IEEE 802.1AS Announce message, comparing each clock identity against the local one. The loop bound was taken solely from the attacker-controlled wire field announce->steps_removed (accepted up to 254), never from announce->tlv.len, which is the field that states how many identities the TLV actually carries. Because path_sequence is the flexible member of the wire TLV (struct gptp_path_trace_tlv) and GPTP_ANNOUNCE() yields a raw pointer into the received packet buffer, the memcmp() inside the loop can address memory well past the end of the received frame. The stack's only length validation, GPTP_ANNOUNCE_CHECK_LEN(), requires the received gPTP payload to be exactly 68 + tlv.len bytes — so it does not constrain the loop, it guarantees the data is absent. An unauthenticated attacker on the same Ethernet segment can send a single Announce frame declaring tlv.len = 0 with steps_removed = 254; the frame passes the length check and reception path (net_gptp_recv() → gptp_handle_msg() → gptp_mi_qualify_announce()), which performs no authentication, and the loop then reads 255 entries of 8 bytes each — about 2 KB — beyond the end of the network buffer. The impact is an out-of-bounds read. The bytes read are only used as a memcmp() operand and are never returned to the attacker, so there is no meaningful information disclosure; the practical risk is that the overread crosses a network buffer pool boundary into unmapped or MPU-protected memory and faults the networking RX thread, causing a denial of service. Exposure is limited to builds that enable the opt-in, experimental CONFIG_NET_GPTP (TSN/AVB deployments) and to attackers with layer-2 adjacency, since gPTP frames are sent to a link-local multicast address and are not routed. The fix computes the true entry count as tlv.len / GPTP_CLOCK_ID_LEN and rejects the announce when steps_removed + 1 exceeds it, so the loop can no longer run past the data the packet-length check proved present. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| Low | 3.1 | EPSS 0.2% | CVE-2026-16512zephyrproject zephyr · Bounds Low3.1EPSS 0.2%CVE Database V5CVE-2026-16512 gptp_handle_msg() in subsys/net/l2/ethernet/gptp/gptp.c dereferenced the gPTP header returned by GPTP_HDR() and switched on hdr->message_type without first checking that the received frame carries at least sizeof(struct gptp_hdr) (34) bytes of payload. The header accessor gptp_get_hdr() deliberately never fails for a short buffer — it returns pkt->frags->data and leaves validation to its callers — so a truncated frame produced a header pointer covering memory beyond the received data. The per-message-type checks that follow do not compensate: GPTP_VALID_LEN() reduces to len > 60 once the Ethernet header has been pulled, which is false for every fixed-size gPTP message, so GPTP_CHECK_LEN() never rejects a truncated SYNC, FOLLOWUP, PDELAY_RESP or SIGNALING message. The defect is reached by an unauthenticated peer on the same link sending an Ethernet frame with ethertype 0x88F7 to the PTP multicast address on an interface configured as a gPTP port, with CONFIG_NET_GPTP enabled. Because conformant Ethernet pads frames to 60 bytes, a payload shorter than 34 bytes generally requires a link that can deliver sub-minimum frames — for example the native_sim TAP driver (drivers/ethernet/eth_native_tap.c), which forwards whatever length the host device supplies, or a MAC configured to accept undersized frames. The short packet is retained (net_pkt_ref() into rcvd_sync_ptr, rcvd_follow_up_ptr, rcvd_pdelay_resp_ptr or rcvd_announce_ptr) and later parsed by the media-dependent and media-independent state machines in subsys/net/l2/ethernet/gptp/gptp_md.c and subsys/net/l2/ethernet/gptp/gptp_mi.c, which read tens of further bytes and copy some of them (the announce priority vector, hdr->port_id) into state that is subsequently transmitted. Under the default fixed-size buffer allocator (CONFIG_NET_BUF_FIXED_DATA_SIZE, 128-byte fragments) the accesses stay inside the allocated fragment and disclose stale recycled buffer contents; under the experimental CONFIG_NET_BUF_VARIABLE_DATA_SIZE allocator, where fragments are heap-allocated at the exact frame length, they are genuine out-of-bounds reads. There is no write and no availability impact. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.8 | EPSS 0.3% | CVE-2026-14986zephyrproject zephyr · Bounds Medium6.8EPSS 0.3%CVE Database V5CVE-2026-14986 The ITE it51xxx I2C driver, when operating as an I2C target (slave) in buffer mode (CONFIG_I2C_TARGET + CONFIG_I2C_TARGET_BUFFER_MODE), copies host-supplied write data into the fixed-size data->target_in_buffer inside its target FIFO interrupt handler target_i2c_isr_fifo() in drivers/i2c/i2c_ite_it51xxx.c. The copy loop stores to target_in_buffer[i + data->w_index] and only checks data->w_index against sizeof(data->target_in_buffer) after the write has already completed, so the bounds check cannot prevent the overflow. The running index data->w_index accumulates count bytes on every FIFO-fill interrupt of an ongoing transaction and is reset to zero only on a STOP or timeout condition. An I2C host that streams a single write transaction longer than the buffer (default CONFIG_I2C_TARGET_IT51XXX_MAX_BUF_SIZE = 256 bytes) drives data->w_index past the end of the buffer, and each subsequent host byte is written out of bounds into the adjacent data->target_out_buffer and following static device data. The trigger is a malicious or misbehaving I2C master on the same bus (for example a compromised application processor or a rogue device on an exposed I2C bus); no software privilege on the victim is required and the handler runs in the target's kernel/firmware context. Because both the written values and the overflow length are attacker-controlled, this is an out-of-bounds write that can crash the controller or be shaped toward code execution. The fix adds a pre-write bounds check in target_i2c_fifo_read_to_buf() that aborts and resets the FIFO before any out-of-bounds store. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| Medium | 4.6 | EPSS 0.2% | CVE-2026-16148zephyrproject zephyr · Dos Medium4.6EPSS 0.2%CVE Database V5CVE-2026-16148 The ITE it82xx2 USB device-controller driver initialized its bus-suspend detection work with k_work_init_delayable(&priv->suspended_work, suspended_handler) inside it82xx2_enable() (the driver's .enable op) in drivers/usb/udc/udc_it82xx2.c. This work item is scheduled essentially continuously while the USB bus is active: the interrupt handler reschedules it on every SOF frame and suspended_handler() reschedules itself, so its timeout node is normally linked in the kernel timeout list / a workqueue pending queue. k_work_init_delayable() (kernel/work.c) unconditionally overwrites the entire k_work_delayable structure, including its timeout and queue linkage, with no busy check. Because it82xx2_disable() does not cancel the work, a normal disable-then-enable cycle re-runs api->enable() (udc_enable() only rejects a redundant enable, not a re-enable after disable) and re-initializes the still-pending work in place, corrupting the kernel timeout/workqueue linked lists and causing a kernel panic. An external USB host — for example a host performing USB DFU detach (dfu-util --detach) or forcing repeated attach/reset/re-enumeration — drives the udc_disable()/udc_enable() transitions and controls suspend/resume timing, so it can arrange for the suspend work to be pending across a re-enable. This yields an unauthenticated denial of service (kernel panic) reachable across the USB boundary from a removable, physically-connected host, with no confidentiality or integrity impact demonstrated. The fix moves the k_work_init_delayable() call into the one-time preinit function so the work is initialized exactly once, eliminating the re-initialization of an in-use item. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.8 | EPSS 0.3% | CVE-2026-16147zephyrproject zephyr · Use After Free Medium6.8EPSS 0.3%CVE Database V5CVE-2026-16147 The ITE IT82xx2 USB device-controller driver (drivers/usb/udc/udc_it82xx2.c) mishandles multi-packet OUT transfers on non-control endpoints. In work_handler_out() the active transfer buffer is obtained with udc_buf_peek() (which does not dequeue it); when a full max-packet-size packet arrives but the buffer still has tailroom (the transfer is not yet complete), the pre-fix code both re-arms the endpoint to keep filling that same buf via work_handler_xfer_continue() and simultaneously hands the same, still-being-filled buffer to the upper stack with udc_submit_ep_event(). Because udc_submit_ep_event() transfers ownership of the buffer to the USB device stack (usbd_event_carrier() appends &buf->node to uds_ctx->ep_events, after which the class handler processes and net_buf_unref()s it), the driver continues to DMA subsequent host-controlled OUT packets into a buffer the upper stack may already have freed and recycled — a use-after-free write. In addition, since the buffer was never dequeued, the completing packet runs udc_buf_get() on the same object and submits it a second time, appending &buf->node to the event slist twice (singly-linked-list corruption) and causing a double net_buf_unref(). The IT82xx2 is a USB peripheral controller, so the untrusted USB host controls OUT-transfer packetization and can force this path against any non-control OUT endpoint whose queued buffer exceeds one packet — an ordinary bulk/interrupt pattern. The driver and USB device stack run in kernel context above the external host, giving the host a device-side kernel heap-corruption primitive: a reliable denial of service and, because the written bytes are attacker-controlled, plausible corruption of adjacent net_buf pool memory. The vector is physical (USB attach). The fix defers submission until the buffer is completely filled and lets xfer_work_handler() drive continuation, so each OUT buffer is submitted to the upper stack exactly once. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| Medium | 5.9 | EPSS 0.4% | CVE-2026-15924zephyrproject zephyr · Use After Free Medium5.9EPSS 0.4%CVE Database V5CVE-2026-15924 Zephyr's TLS socket layer in subsys/net/lib/sockets/sockets_tls.c keeps a single process-global array, client_cache, of cached client sessions that is shared by every TLS socket context. The functions that mutate and read it — tls_session_save(), tls_session_get(), tls_session_cache_reset(), and the settings restore handler — allocate, free, and dereference each entry's heap buffer (entry->session). Before the fix these accesses were serialized only by the per-socket context mutex ctx->lock (assigned per socket in ctx_set_lock()), which provides no mutual exclusion between different sockets touching the shared cache. Because CONFIG_NET_SOCKETS_TLS_MAX_CLIENT_SESSION_COUNT defaults to 1, any two concurrent client sockets contend for the same slot. A thread in tls_session_get() reading entry->session inside mbedtls_ssl_session_load() can run concurrently with another thread in tls_session_save() that selects the same entry for reuse and executes mbedtls_free(entry->session) before reallocating — a use-after-free read, and a double-free when two saves evict the same entry. Both corrupt the mbedTLS heap. The cache is reached on ordinary client paths: at connect time via tls_session_store()/tls_session_restore(), and (on main) whenever a TLS 1.3 session ticket arrives during recv()/poll() via tls_session_store_current(). Exploitation requires an application that opts into per-socket client session caching (the TLS_SESSION_CACHE socket option, off by default) and runs concurrent TLS client connections on multiple threads; the timing that opens the window is influenced by the remote peer(s), so a malicious or compromised server can raise session-ticket frequency to widen it. The reliably-demonstrable impact is memory corruption leading to a crash or heap corruption (denial of service). The fix adds a dedicated session_cache_lock mutex taken across every accessor of client_cache, serializing all reads and frees and closing the race. EPSS 0.4%Vulnerability | CVE Database V5 | ||
| Medium | 6.5 | EPSS 0.3% | CVE-2026-15893zephyrproject zephyr · Dos Medium6.5EPSS 0.3%CVE Database V5CVE-2026-15893 net_if_ipv6_calc_reachable_time() in subsys/net/ip/net_if.c derives a randomized ND reachable time from ipv6->base_reachable_time as min_reachable + sys_rand32_get() % (max_reachable - min_reachable), where min_reachable = base/2 and max_reachable = 3*base/2 using integer division. When base_reachable_time is 1, both min_reachable and the modulus collapse so the function returns 0, and net_if_ipv6_set_reachable_time() stores that 0 into ipv6->reachable_time. The base_reachable_time is attacker-controlled: handle_ra_input() in subsys/net/ip/ipv6_nbr.c accepts the Reachable Time field of an incoming Router Advertisement whenever it is nonzero and <= MAX_REACHABLE_TIME, so a single unauthenticated, link-local RA carrying a Reachable Time of 1 drives the computed reachable time to 0. Router Advertisements are unauthenticated by default and require only adjacency to the target link. When a neighbor is subsequently confirmed reachable, net_ipv6_nbr_set_reachable_timer() reads the value and executes NET_ASSERT(time, "Zero reachable timeout!"). On builds with CONFIG_ASSERT enabled this triggers a fatal kernel assertion — a remote denial of service; on builds without assertions the reachable timer is armed with K_MSEC(0) and fires immediately, forcing reachable neighbors into perpetual re-solicitation (STALE), degrading Neighbor Discovery. The impact is limited to availability; there is no memory-safety, confidentiality, or integrity consequence. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| Medium | 4.6 | EPSS 0.2% | CVE-2026-15923zephyrproject zephyr · Dos Medium4.6EPSS 0.2%CVE Database V5CVE-2026-15923 The Zephyr SDIO subsystem function sdio_io_rw_extended_helper() in subsys/sd/sdio.c finishes transfers with a byte-I/O loop that uses size = MIN(remaining, func->cis.max_blk_size) as the per-iteration step. The value func->cis.max_blk_size is decoded directly from the SDIO card's CIS FUNCE tuple in sdio_decode_cis() and is not validated. When a card reports a maximum block size of zero, size is always 0, remaining never decreases, and the loop spins forever. The loop is reached from the public SDIO client API used by drivers, including sdio_read_fifo(), sdio_write_fifo(), and the incrementing register read/write helpers, each of which enters the loop while holding the per-card mutex func->card->lock. A card advertising max_blk_size == 0 therefore hangs the calling thread permanently on its first non-block-aligned transfer and never releases the mutex, denying service to the SDIO peripheral (and any subsystem such as Wi-Fi that depends on it) until the device is reset. The malicious value must come from the SDIO card itself, so the defect is exploitable where a removable SDIO/combo card slot lets an attacker insert a crafted or malfunctioning card (a physical attack vector); on boards with a soldered SDIO peripheral it is not attacker-influenceable. There is no memory-safety, confidentiality, or integrity impact — only a permanent availability loss. The fix returns -EIO when func->cis.max_blk_size is zero, before the loop is entered. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 5.3 | EPSS 0.5% | CVE-2026-15892zephyrproject zephyr · Dos Medium5.3EPSS 0.5%CVE Database V5CVE-2026-15892 CVE-2026-15892 is a denial of service vulnerability in the Zephyr project's mcumgr SMP settings-management handlers. When configured to use heap buffers and an access hook that rejects requests, the handlers leak heap memory on each rejected request. This leak eventually exhausts the kernel heap, causing k_malloc() failures and service denial. The vulnerability affects versions from 3.5.0 up to but not including 4.4.2. The impact is limited to availability with no memory corruption or information disclosure. EPSS 0.5%Vulnerability | CVE Database V5 |
Page 4 of 11