Threat database
213 threats
Most recently published first
| Severity | CVSS | Signals | Threat | Source | Published | Score and star |
|---|---|---|---|---|---|---|
| High | 8.8 | EPSS 0.1% | CVE-2026-19569zephyr · integer-overflow High8.8EPSS 0.1%CVE Database V5CVE-2026-19569 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. | CVE Database V5 | ||
| High | 7.0 | EPSS <0.1% | CVE-2026-19574zephyr · auth High7.0EPSS <0.1%CVE Database V5CVE-2026-19574 The ARM64 MMU back-end allocated address space identifiers (ASIDs) for memory domains with a bare round-robin counter in arch_mem_domain_init() (arch/arm64/core/mmu.c). VM_ASID_BITS is 8, so only 255 ASIDs exist; once the counter wrapped, arch_mem_domain_init() could hand an ASID to a new domain while a still-live domain held the same one. Domain-private mappings are installed non-global (MT_NG), so the ASID is the only tag separating one domain's cached translations from another's in the TLB. The context-switch path in z_arm64_swap_ptables() only flushes the TLB when the outgoing and incoming domains carry the same ASID, which does not cover a duplicate reached through a third domain: for domains A and C sharing an ASID and an unrelated domain B, the schedule A -> B -> C never takes the flush branch, so the ASID-tagged entries A populated remain resident while C runs. Under SMP two live domains sharing an ASID can additionally be resident on two CPUs at once, which the architecture does not allow for distinct translation-table sets. Triggering the wrap requires a CONFIG_USERSPACE application on ARM64 that creates more than 255 memory domains over its lifetime; k_mem_domain_init() and k_mem_domain_deinit() are supervisor-only APIs and are not exposed as syscalls, so an unprivileged thread cannot drive the counter directly. Once two live domains alias, however, a user-mode thread in one domain can read and write memory belonging to the other domain's partitions and thread stacks with that domain's permissions, defeating the memory-domain isolation boundary. The fix scans the live domain_list before assigning an ASID, advances the round-robin counter past ASIDs already in use, and returns -ENOMEM when all are taken, so domain creation fails closed instead of silently aliasing. | CVE Database V5 | ||
| Medium | 6.7 | EPSS <0.1% | CVE-2026-19571zephyr · race Medium6.7EPSS <0.1%CVE Database V5CVE-2026-19571 The ITE IT8xxx2 SHI host-command backend (subsys/mgmt/ec_host_cmd/backends/ec_host_cmd_backend_shi_ite.c) copied the 8-byte host-command request header from the SPI Rx FIFO directly into the shared receive buffer data->in_msg and only afterwards checked the protocol version and the derived packet length. The interrupt handler also accepted a chip-select assertion and an Rx-valid-length (RVLI) interrupt in any driver state other than SHI_STATE_DISABLED, so a new header could be parsed while the host-command thread was still processing the previous request out of the very same buffer. The host processor is the SPI controller and drives both chip select and the clock. After sending a well-formed request it can immediately de-assert chip select — which returns the driver to the ready state and re-enables the FIFO — and start a second transaction carrying a header with data_len = 0xFFFF. Those eight bytes are written into in_msg before the oversized length is rejected, so they land in a buffer whose contents verify_rx() in subsys/mgmt/ec_host_cmd/ec_host_cmd_handler.c has already validated. If this lands in the window before the host-command thread executes args.input_buf_size = rx_header->data_len, the framework hands the registered command handler a 65535-byte input length over a 256-byte buffer. The result is an out-of-bounds read of up to roughly 64 KiB beyond the request buffer: command handlers that copy or echo input_buf_size bytes disclose adjacent embedded-controller memory back to the host or overflow the response buffer, and a read past the end of SRAM faults the controller. The same race also allows cmd_id and cmd_ver to be swapped after checksum verification and after handler lookup. Exploitation requires the ability to drive the inter-processor SHI bus (a compromised host OS or physical access to the SPI lines) and winning a timing race, which the SPI controller can retry indefinitely. The fix parses the header into a local struct ec_host_cmd_request_header and copies it into in_msg only after the length has been bounded by sizeof(data->in_msg), and ignores chip-select and RVLI interrupts outside SHI_STATE_READY_TO_RECV/SHI_STATE_RECEIVING. A residual, bounded race remains: an end-of-transaction interrupt still resets the state to ready while the host-command thread owns the buffer, so a valid second request can still overwrite the in-flight request's contents, unlike the NPCX backend which parks in SHI_STATE_CNL_RESP_NOT_RDY while the buffer is in use. | CVE Database V5 | ||
| High | 8.8 | EPSS 0.3% | CVE-2026-19570zephyr · memory-safety High8.8EPSS 0.3%CVE Database V5CVE-2026-19570 The LE Audio Broadcast Sink in subsys/bluetooth/audio/bap_broadcast_sink.c copies subgroup metadata from a received Basic Audio Announcement (BASE) into the static Broadcast Audio Scan Service parameter structure mod_src_param without any bounds check. In base_subgroup_meta_cb() the destination element was selected as mod_src_param.subgroups[mod_src_param.num_subgroups] with no test against ARRAY_SIZE(mod_src_param.subgroups) (sized by CONFIG_BT_BAP_BASS_MAX_SUBGROUPS, default 1), and the metadata was copied with memcpy() using the raw on-air length returned by bt_bap_base_get_subgroup_codec_meta() into a metadata array sized by CONFIG_BT_AUDIO_CODEC_CFG_MAX_METADATA_SIZE (default 4). The BASE validator bt_bap_base_get_base_from_ad() only checks structural consistency and permits up to ~24 subgroups and metadata LTVs of ~240 octets. The defect is reached from the periodic advertising receive callback: pa_recv() → bt_data_parse() → pa_decode_base() → update_recv_state_base() → bt_bap_base_foreach_subgroup() → base_subgroup_meta_cb(). Every broadcast sink registers a scan-delegator receive state at creation (bt_bap_broadcast_sink_create() calls broadcast_sink_add_src()), and CONFIG_BT_BAP_BROADCAST_SINK depends on CONFIG_BT_BAP_SCAN_DELEGATOR, so the path is active in every broadcast-sink build once the device is periodic-advertising-synced. An attacker in radio range who operates a broadcast source the device syncs to — or who impersonates the advertiser address and SID of one already in use, periodic advertising data being unauthenticated — can change the BASE at will; each new BASE is re-parsed. A crafted BASE therefore writes attacker-chosen bytes past the end of a fixed static object in .bss: up to roughly 236 bytes for an oversized metadata LTV, plus whole struct bt_bap_bass_subgroup records for each subgroup beyond CONFIG_BT_BAP_BASS_MAX_SUBGROUPS. This is memory corruption of adjacent Bluetooth-audio state reachable with no pairing, bonding or GATT connection, with a potential for remote code execution in the Bluetooth RX thread; in addition, the unvalidated metadata_len is forwarded to bt_bap_scan_delegator_mod_src(), which neither clamps it nor rejects it, leading to a further copy into the receive state and to out-of-bounds memory being disclosed in the BASS receive-state notification sent to a connected Broadcast Assistant. The fix rejects a BASE carrying more subgroups than the receive state can hold (discarding the update entirely) and omits metadata that does not fit rather than copying it, and additionally honours the previously-ignored error return of the subgroup decode pass. | CVE Database V5 | ||
| High | 8.8 | EPSS 0.3% | CVE-2026-15894zephyr · memory-safety High8.8EPSS 0.3%CVE Database V5CVE-2026-15894 The Bluetooth Mesh On-Demand Private Proxy solicitation handler in subsys/bluetooth/mesh/solicitation.c copies a received Solicitation PDU into a fixed 17-byte stack buffer without bounding the source length. In sol_pdu_decrypt(), out is allocated as NET_BUF_SIMPLE(17) and then filled with net_buf_simple_add_mem(out, in->data, in->len); net_buf_simple_add() guards its tailroom only with __ASSERT_NO_MSG, which is compiled out in production builds, so when in->len > 17 the underlying memcpy writes attacker-controlled bytes past the 17-byte stack buffer. The copy occurs before any decryption or authentication, so no key material is required to trigger it. The oversized length arises because the mesh scan callback in subsys/bluetooth/mesh/adv.c calls net_buf_simple_restore() before dispatching to bt_mesh_sol_recv(), leaving buf->len covering the entire remaining advertising payload rather than just the Solicitation Service Data. After the parser locates the Service Data AD and consumes the Identification Type byte, the remaining buf->len is the 17-octet Network PDU plus any trailing advertising bytes, and prior to this fix there was no maximum-length check (only a minimum). An attacker can therefore append extra AD structures or padding after the Solicitation Service Data to make buf->len exceed 17. bt_mesh_scan_cb() is registered directly as the BLE scan callback, so buf is raw, unauthenticated advertising data received over the air. Any device in radio range can send a non-connectable advertisement carrying a crafted mesh Proxy Solicitation to a node that has CONFIG_BT_MESH_OD_PRIV_PROXY_SRV enabled and is currently eligible to be solicited (GATT proxy disabled, On-Demand Private Proxy enabled), with no pairing, bonding, or provisioning. The result is an attacker-controlled stack overwrite — plausibly leading to remote code execution and at minimum a reliable remote denial of service. The fix trims buf->len to the spec-fixed 17 octets (dropping the PDU if fewer remain) before decryption. | CVE Database V5 | ||
| High | 8.1 | EPSS 0.2% | CVE-2026-19186zephyr · integer-overflow High8.1EPSS 0.2%CVE Database V5CVE-2026-19186 CVE-2026-19186 is an integer overflow vulnerability in the Zephyr project's IEEE 802.15.4 network layer. It occurs when the payload length calculation underflows due to insufficient frame length validation, leading to out-of-bounds memory reads and writes during decryption. This can cause memory corruption and denial of service. The vulnerability affects Zephyr versions from 3.2.0 up to but not including 4.5.0 and requires specific security configurations to be enabled. The flaw is fixed by rejecting frames shorter than the required length before processing. | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-19185zephyr · memory-safety High7.8EPSS 0.1%CVE Database V5CVE-2026-19185 The system-call verifier for i3c_do_ccc() in drivers/i3c/i3c_handlers.c validated the outer struct i3c_ccc_payload, the broadcast ccc.data buffer and the targets.payloads[] array, but did not validate the per-target data buffers those array elements point at. Each struct i3c_ccc_target_payload carries its own data pointer and data_len, and neither was passed through K_SYSCALL_MEMORY() before the payload was handed to z_impl_i3c_do_ccc() and on to the controller driver. The verifier also operated on the caller's live structure rather than a snapshot, so validated fields could be changed by a second user thread between the check and the driver's use — unlike the sibling z_vrfy_i3c_transfer(), which has always copied its message array first. The defect is only present in CONFIG_USERSPACE builds, where drivers/i3c/i3c_handlers.c is compiled. An unprivileged user-mode thread that has been granted access to the I3C controller device object — the ordinary way an application lets a user thread talk to I3C peripherals — can issue a direct CCC whose target payload data pointer names an arbitrary kernel address. Controller drivers dereference that pointer directly (for example drivers/i3c/i3c_mcux.c, drivers/i3c/i3c_cdns.c, drivers/i3c/i3c_stm32.c, drivers/i3c/i3c_npcx.c), using rnw to decide direction. A read CCC therefore causes the kernel-mode driver to write bus-received bytes into an attacker-chosen kernel address for an attacker-chosen length, and a write CCC transmits kernel memory out onto the I3C bus. The result is an out-of-bounds kernel write plus a kernel memory disclosure, i.e. escalation from a user-mode thread to supervisor privilege, defeating the isolation CONFIG_USERSPACE is meant to provide. The fix introduces copy_ccc_and_do(), which snapshots the payload, copies the target array into kernel memory with k_usermode_alloc_from_copy() (bounding num_targets to fewer than 32), validates each per-target buffer with K_SYSCALL_MEMORY() according to rnw, and copies the driver-written num_xfer and err fields back to the caller. | CVE Database V5 | ||
| High | 8.4 | EPSS 0.1% | CVE-2026-19184zephyr · bounds High8.4EPSS 0.1%CVE Database V5CVE-2026-19184 The NXP GAU ADC driver (drivers/adc/adc_mcux_gau_adc.c) validated the caller-supplied sequence->buffer_size, which is expressed in bytes, against the number of active channels, which is a sample count. It then stored that byte count directly in data->results_length and used it in mcux_gau_adc_read_samples() as the number of uint16_t slots available. Because each conversion result occupies sizeof(uint16_t) bytes, a buffer that was accepted as "large enough" could be written with up to twice its size in bytes, so every sample past the buffer's midpoint was written out of bounds. adc_read() and adc_read_async() are Zephyr system calls. The syscall verifier in drivers/adc/adc_handlers.c only confirms that the caller owns buffer_size writable bytes (K_SYSCALL_MEMORY_WRITE); deciding whether that size is sufficient for the requested channels and extra_samplings is delegated entirely to the driver. On a build with CONFIG_USERSPACE=y, a user-mode thread that has been granted the ADC device object could therefore submit a deliberately half-sized buffer and cause the driver's work-queue handler — which runs in supervisor mode, outside the caller's MPU restrictions — to write ADC conversion results past the end of that buffer, at an address and for a length of the caller's choosing. The overrun is bounded by the requested sequence: with sequence->options->extra_samplings set, the sampling loop walks the buffer pointer forward across every sampling, so the total overrun can reach the full size of the supplied buffer (kilobytes for a large extra_samplings). The written words are 16-bit ADC conversion results, so the content is only partially attacker-influenced (via the selected analog input, gain and resolution), but the destination and length are fully controlled — sufficient for kernel memory corruption, a crash, or a userspace-to-kernel privilege escalation. Builds without CONFIG_USERSPACE, or on SoCs other than NXP RW61x with the GAU ADC node enabled, are not exposed to the privilege boundary; there the same defect only causes a silent overflow when the application itself passes an undersized buffer. The fix replaces the ad-hoc check with the shared adc_sequence_validate_buffer() helper (validating against num_channels * sizeof(uint16_t)), stores buffer_size / sizeof(uint16_t) in results_length, and corrects the loop bound to a post-decrement so exactly the available number of slots may be written. | CVE Database V5 | ||
| Medium | 4.4 | EPSS <0.1% | CVE-2026-17053zephyr · auth Medium4.4EPSS <0.1%CVE Database V5CVE-2026-17053 The SMBus driver API exposed smbus_smbalert_remove_cb() and smbus_host_notify_remove_cb() as Zephyr syscalls. Their verifiers in drivers/smbus/smbus_handlers.c validated only the dev argument with K_SYSCALL_OBJ(dev, K_OBJ_DRIVER_SMBUS) and forwarded the caller-supplied struct smbus_callback *cb pointer into kernel-mode driver code without any K_SYSCALL_MEMORY_READ/K_SYSCALL_MEMORY_WRITE validation. A companion change in 2023 had already removed the matching smbus_smbalert_set_cb() / smbus_host_notify_set_cb() syscalls for this reason, but the two removal syscalls were left exposed. On a build with CONFIG_USERSPACE=y, CONFIG_SMBUS=y and a driver implementing the callback operations (drivers/smbus/intel_pch_smbus.c with CONFIG_SMBUS_INTEL_PCH_SMBALERT/CONFIG_SMBUS_INTEL_PCH_HOST_NOTIFY, or drivers/smbus/smbus_stm32.c with CONFIG_SMBUS_STM32_SMBALERT), any user-mode thread that has been granted the SMBus device object can invoke these syscalls with an arbitrary pointer. The value reaches smbus_callback_remove() in drivers/smbus/smbus_utils.h, which uses it as a node identity against the kernel's sys_slist_t of registered callbacks. The consequence is that an unprivileged thread can unregister an SMBALERT or Host Notify callback that a supervisor-mode component registered, silently disabling alert handling for the rest of the system; because Zephyr images have fixed symbol addresses and the syscall returns 0 on a hit versus -ENOENT on a miss, the target address is both derivable and searchable. In builds with CONFIG_ASSERT=y the __ASSERT(callback->handler, ...) check additionally dereferences the caller-supplied address in supervisor mode, so a bogus pointer raises a kernel-mode fault and a fatal system error, and the fault/no-fault outcome discloses which addresses are mapped. The fix removes both syscall entry points, demoting the two functions to ordinary static inline calls so that callback list manipulation is available only to supervisor-mode code. There is no impact on builds without CONFIG_USERSPACE, and no impact on configurations that do not enable an SMBus driver with SMBALERT or Host Notify support. | CVE Database V5 | ||
| Medium | 6.8 | EPSS 0.1% | CVE-2026-18747zephyr · integer-overflow Medium6.8EPSS 0.1%CVE Database V5CVE-2026-18747 CVE-2026-18747 is an integer underflow vulnerability in the Zephyr project's MCUmgr SMP-over-console transport. It occurs when a malformed base64 frame declares a packet length of zero or one, causing an underflow during CRC stripping and resulting in an inflated packet length. This leads to out-of-bounds reads in the SMP request processing, potentially causing denial of service or memory disclosure. The vulnerability can be triggered by an unauthenticated 7-byte input on the management console, such as a USB CDC-ACM port. A fix is available that rejects packet lengths of two bytes or fewer, preventing the underflow. | CVE Database V5 | ||
| Medium | 5.9 | EPSS 0.3% | CVE-2026-18746zephyr · memory-safety Medium5.9EPSS 0.3%CVE Database V5CVE-2026-18746 CVE-2026-18746 is a memory-safety vulnerability in the Zephyr project affecting the LwM2M CoAP block-wise write handling. It occurs when the function parse_write_op() improperly dereferences a NULL pointer due to a logic flaw in handling block contexts during inbound CoAP WRITE/CREATE requests with the Block1 option. This can cause a fatal memory fault leading to device crashes or resets. The vulnerability does not affect confidentiality or integrity. It impacts Zephyr versions from 3.7.0 up to but not including 4.5.0. | CVE Database V5 | ||
| Medium | 6.5 | EPSS 0.2% | CVE-2026-18417zephyr · memory-safety Medium6.5EPSS 0.2%CVE Database V5CVE-2026-18417 CVE-2026-18417 is a memory-safety vulnerability in the Zephyr project's native BSD-socket layer affecting versions 4.3.0 up to but not including 4.4.2. The issue arises from improper handling of asynchronous socket errors by storing error codes in a field expected to hold a pointer, leading to wild-pointer dereferences during repeated network interface down events. This results in a kernel fatal error causing denial of service (device crash or reset) but does not allow attacker-controlled memory corruption. The vulnerability requires an attacker to repeatedly cause link-down events, such as disrupting a wireless link or having local/physical access. Later versions fix this by separating error storage from the user_data field and preventing stale error propagation. | CVE Database V5 | ||
| Low | 3.7 | EPSS 0.2% | CVE-2026-18416zephyr · 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. | CVE Database V5 | ||
| Medium | 6.3 | EPSS <0.1% | CVE-2026-18415zephyr · 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. | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-18414zephyr · 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. | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-18413zephyr · 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. | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-16513zephyr · memory-safety High7.8EPSS 0.1%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. | CVE Database V5 | ||
| Medium | 5.3 | EPSS 0.2% | CVE-2026-17054zephyr · 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. | CVE Database V5 | ||
| Medium | 5.3 | EPSS <0.1% | CVE-2026-15890zephyr · 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. | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-17052zephyr · memory-safety High7.8EPSS 0.1%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. | CVE Database V5 |
Showing 41–60 of 213 results