Threats affecting pkg:github/Zephyr
233 threats
Most recently published first
| Severity | CVSS | Signals | Threat | Source | Published | Score and star |
|---|---|---|---|---|---|---|
| High | 7.5 | EPSS 0.4% | CVE-2026-87045zephyrproject zephyr · Memory-safety High7.5EPSS 0.4%CVE Database V5CVE-2026-87045 CVE-2026-87045 is a memory safety vulnerability in the HTTP/2 server component of Zephyr (subsys/net/lib/http/http_server_http2.c). It occurs because the server clears the stream binding at the start of every frame, but CONTINUATION frames do not open a new stream, leaving client->current_stream unset. Subsequent code writes through this NULL pointer, causing a crash. This can be triggered remotely without authentication by sending a CONTINUATION frame after the client preface requesting any unregistered path. The impact is a denial of service due to system halt. There is no confidentiality or integrity impact. The vulnerability affects Zephyr versions >=4.1.0 <4.3.2 and >=4.4.0 <4.5.0 and is fixed in versions 4.3.2 and 4.5.0. EPSS 0.4%Vulnerability | CVE Database V5 | ||
| Medium | 6.5 | EPSS 0.2% | CVE-2026-87044zephyrproject zephyr · Dos Medium6.5EPSS 0.2%CVE Database V5CVE-2026-87044 CVE-2026-87044 is a denial-of-service vulnerability in the Zephyr project's Mbed TLS crypto shim driver. The flaw causes heap memory leaks on certain error paths during multipart cipher and AEAD operations, leading to exhaustion of the fixed-size Mbed TLS heap. An unauthenticated attacker can exploit this by sending a stream of invalid IEEE 802.15.4 frames or OSDP secure channel messages, causing repeated failures and memory leaks. This results in permanent failure of cryptographic operations until the device is rebooted. No memory corruption or data disclosure occurs. The issue is fixed in Zephyr version 4.5.0. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 4.8 | EPSS 0.2% | CVE-2026-87043zephyrproject zephyr · Crypto Medium4.8EPSS 0.2%CVE Database V5CVE-2026-87043 CVE-2026-87043 is a vulnerability in the Zephyr project's entropy-device random number generator where an early return on device unavailability causes the system to return stale or uninitialized memory as random data. This affects non-cryptographic random values used in various network protocols and system components, potentially leaking sensitive memory contents. The issue is fixed in Zephyr version 4.5.0. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-87041zephyrproject zephyr · Memory-safety High7.8EPSS 0.1%CVE Database V5CVE-2026-87041 CVE-2026-87041 is a memory-safety vulnerability in the Zephyr RTIO subsystem affecting versions from 3.3.0 up to but not including 4.3.2 and 4.4.0 up to but not including 4.5.0. The flaw arises from incorrect verification of user-supplied buffer pointers in the RTIO submission-queue verifier, allowing user threads with RTIO context to submit buffers that reference arbitrary kernel memory. This leads to arbitrary kernel memory writes, disclosures, or kernel faults, effectively allowing escape from user-mode isolation. The issue is fixed in versions 4.3.2 and 4.5.0. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| High | 8.3 | EPSS 0.3% | CVE-2026-87040zephyrproject zephyr · Bounds High8.3EPSS 0.3%CVE Database V5CVE-2026-87040 CVE-2026-87040 is a high-severity vulnerability in the Zephyr open-source Bluetooth LE Controller affecting versions >=1.6.0 <4.3.2 and >=4.4.0 <4.5.0. It arises from improper validation of the on-air LENGTH field of received PDUs against the maximum receive length programmed in the radio. This flaw allows an attacker within radio range to send crafted PDUs with length fields exceeding the configured maximum, leading to out-of-bounds memory reads and writes, remote memory corruption, controller crashes, and potential disclosure of controller memory to the host. The vulnerability affects unencrypted LE connections and certain ISO and extended-advertising PDUs. The issue is fixed in Zephyr versions 4.3.2 and 4.5.0. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-87039zephyrproject zephyr · Memory-safety High7.8EPSS 0.1%CVE Database V5CVE-2026-87039 CVE-2026-87039 is a memory-safety vulnerability in the Zephyr project's I2S driver subsystem affecting versions 4.4.0 up to but not including 4.5.0. It arises from insufficient validation of a user-supplied pointer during the unconfigure operation of an I2S stream, allowing an unprivileged user-mode thread to cause the kernel to perform arbitrary pointer read/write operations. This breaks the user-space isolation boundary and can lead to full kernel compromise. The issue is fixed in version 4.5.0 by zeroing out the vulnerable pointer fields during unconfigure calls. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| High | 7.0 | EPSS <0.1% | CVE-2026-87038zephyrproject zephyr · Race High7.0EPSS <0.1%CVE Database V5CVE-2026-87038 CVE-2026-87038 is a race condition vulnerability in the Zephyr project's i3c_transfer() system call handler. The flaw arises because the user-supplied device descriptor is validated in place without snapshotting, allowing a race where a second thread can modify the bus field after validation but before use. This can lead to kernel-mode code execution from an unprivileged user thread, escaping the userspace memory-protection sandbox. The issue affects Zephyr versions from 3.2.0 up to but not including 4.3.2, and from 4.4.0 up to but not including 4.5.0. The vulnerability is fixed in versions 4.3.2 and 4.5.0 by copying and validating the descriptor in kernel space before use. EPSS <0.1%Vulnerability | CVE Database V5 | ||
| High | 8.8 | EPSS 0.2% | CVE-2026-16511zephyrproject zephyr · Memory-safety High8.8EPSS 0.2%CVE Database V5CVE-2026-16511 CVE-2026-16511 is a memory-safety vulnerability in the Zephyr RTOS affecting the RTIO syscall verifiers. It allows user-mode threads with certain permissions to write to arbitrary kernel memory addresses by exploiting insufficient validation of user-supplied pointers. This can lead to privilege escalation and unauthorized cancellation of I/O submissions. The issue affects Zephyr versions from 3.4.0 up to but not including 4.3.2, and from 4.4.0 up to but not including 4.5.0. Fixed versions are 4.3.2 and 4.5.0. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 5.7 | EPSS 0.2% | CVE-2026-85036zephyrproject zephyr · Memory-safety Medium5.7EPSS 0.2%CVE Database V5CVE-2026-85036 CVE-2026-85036 is a memory-safety vulnerability in the Zephyr project's Bluetooth Classic AVDTP layer affecting versions 4.3.0 up to but not including 4.3.2 and 4.4.0 up to but not including 4.5.0. The flaw arises from improper handling of session stream endpoints during connection reuse, leading to corruption of the system work queue's pending list. This corruption can cause the system work queue to stop processing work or enter a spin loop, resulting in a device-wide denial of service that requires a reboot. The vulnerability affects builds with CONFIG_BT_CLASSIC and CONFIG_BT_A2DP enabled. A two-commit fix is available in versions 4.3.2 and 4.5.0 that must be applied together to fully remediate the issue. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| High | 8.8 | EPSS 0.2% | CVE-2026-85035zephyrproject zephyr · Use After Free High8.8EPSS 0.2%CVE Database V5CVE-2026-85035 The can_add_rx_filter_msgq() system call installs a CAN RX filter whose callback (can_msgq_put() in drivers/can/can_common.c) is handed the caller's struct k_msgq * as user_data. The controller driver stores that raw pointer in its filter table and dereferences it from the RX path every time a matching frame arrives. The system call verifier z_vrfy_can_add_rx_filter_msgq() in drivers/can/can_handlers.c validated the queue only with K_SYSCALL_OBJ(), which is a point-in-time check of type, initialization and caller permission and says nothing about the object's lifetime. On a build with CONFIG_USERSPACE=y and CONFIG_DYNAMIC_OBJECTS=y, an unprivileged user-mode thread that has been granted access to a CAN device can obtain a message queue whose lifetime it fully controls: k_object_alloc(K_OBJ_MSGQ) followed by k_msgq_alloc_init(). The lifetime of such an object is driven solely by its permission bitmask, and a pointer retained by the kernel is not represented there. After registering the filter, the thread calls k_object_release() — or simply terminates — and unref_check() frees the struct k_msgq storage while the CAN driver still holds the pointer. The next matching CAN frame causes k_msgq_put() to run in supervisor context against freed memory that the attacker can have groomed with another kernel allocation: the frame payload is memcpy()d through the reused block's write_ptr, and the queue's wait_q (and poll_events under CONFIG_POLL) list nodes are manipulated. This yields kernel-heap corruption reachable from a user-mode thread, defeating the isolation CONFIG_USERSPACE is intended to provide; the same dangling pointer also arises benignly when an application thread exits without calling can_remove_rx_filter(). The fix validates the queue with K_SYSCALL_OBJ_STATIC(), which additionally rejects objects carrying K_OBJ_FLAG_ALLOC, so only statically defined queues (CAN_MSGQ_DEFINE()) may be registered from user mode. Supervisor-mode callers bypass the verifier and must themselves keep the queue valid until the filter is removed. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.7 | EPSS 0.2% | CVE-2026-85034zephyrproject zephyr · Bounds Medium6.7EPSS 0.2%CVE Database V5CVE-2026-85034 The Bluetooth host's GATT client passed the value of a received Handle Value Notification, Handle Value Indication or Multiple Handle Value Notification to bt_gatt_subscribe_params::notify callbacks using only the length derived from the received ATT PDU. bt_att_recv() in subsys/bluetooth/host/att.c validates only a minimum PDU length and does not enforce the negotiated ATT MTU, and the fixed ATT L2CAP channel in subsys/bluetooth/host/l2cap.c applies no rx.mtu check either, so the only ceiling was the ACL reassembly buffer CONFIG_BT_BUF_ACL_RX_SIZE. Values longer than the 512-octet maximum attribute length defined by the Bluetooth Core Specification (Vol 3, Part F, Section 3.2.9) could therefore be handed to subscribers that size their buffers to that documented limit. A remote peer that a device has connected and subscribed to — a malicious, spoofed or compromised GATT server within radio range — triggers the flaw by sending a notification or indication whose value exceeds 512 octets on a subscribed handle. In the LE Audio unicast client this reaches a concrete out-of-bounds write: unicast_client_ep_notify() in subsys/bluetooth/audio/bap_unicast_client.c copies the notification into the 512-byte att_buf of struct unicast_client with net_buf_simple_add_mem() and no tailroom check whenever length equals bt_audio_get_max_ntf_size(), i.e. the negotiated ATT MTU minus three. notify_handler() in subsys/bluetooth/audio/bap_broadcast_assistant.c has the same shape. Reaching the overflow requires a build whose ATT MTU exceeds 515 octets (CONFIG_BT_L2CAP_TX_MTU and CONFIG_BT_BUF_ACL_RX_SIZE set for full-length attribute support); the shipped defaults are far smaller. The overflow writes peer-controlled bytes past att_buf directly over the adjacent struct net_buf_simple net_buf — its data, __buf, len and size fields — which the subsequent long-read accumulation then uses as its destination, turning a small linear overflow into a controlled write. net_buf_simple_add() only asserts on insufficient tailroom unless CONFIG_NET_BUF_HARDENING is enabled, and that option is disabled by default, so ordinary production builds perform the copy. Beyond the in-tree LE Audio clients, any application subscriber that sized its receive buffer to the specification's 512-octet limit was exposed to the same overflow. The fix rejects notification, indication and multiple-notification values longer than BT_ATT_MAX_ATTRIBUTE_LEN in call_notify_cb_and_maybe_unsubscribe() in subsys/bluetooth/host/gatt.c before any subscriber callback is invoked, so no subscriber can be handed more than the specified maximum. Remaining tuples of a multiple handle value notification are still delivered and oversized indications are still confirmed. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 4.6 | EPSS 0.2% | CVE-2026-85033zephyrproject zephyr · Dos Medium4.6EPSS 0.2%CVE Database V5CVE-2026-85033 The AVRCP Target role in subsys/bluetooth/host/classic/avrcp.c keeps its vendor-dependent response transmit state in a per-connection object selected by connection index (get_avrcp_tg()), with the per-transfer context (tid, sent_len, and the BT_AVRCP_TG_FLAG_TX_ONGOING flag) stored in the user_data of the queued response net_buf. The AVCTP teardown handler avrcp_disconnected() did not cancel tg->vd_rsp_tx_work and did not release the buffers still queued on tg->vd_rsp_tx_pending, so a link drop in the middle of a fragmented response left the buffer on the list with TX_ONGOING still set. A remote AVRCP Controller can trigger this deterministically: it issues a vendor-dependent command whose response exceeds one AVRCP fragment (for example GetElementAttributes or GetCapabilities), lets bt_avrcp_tg_vendor_tx_work() emit the START fragment, and then drops the ACL link instead of sending REQUEST_CONTINUING_RESPONSE. The AVCTP control channel requires an encrypted BR/EDR link (BT_SECURITY_L2), so the attacker must be a paired peer within radio range; no user interaction is needed. Because the Target objects are static and reused, the next connection landing on the same connection index finds the stale buffer at the head of vd_rsp_tx_pending. Every run of the TX work sees TX_ONGOING and returns immediately, so all further vendor-dependent responses queue behind the stale head and are never sent — a persistent loss of AVRCP Target function that no timeout clears and only a reboot recovers. Each cycle also leaks one response buffer from a shallow application pool, and a new peer that sends REQUEST_CONTINUING_RESPONSE clears the stale TX_ONGOING via bt_avrcp_tg_process_continuing_cmd(), causing the un-sent remainder of the previous peer's response to be transmitted to it. The fix cancels tg->vd_rsp_tx_work and unrefs every buffer on tg->vd_rsp_tx_pending in avrcp_disconnected(); since the TX context lives in the buffer user_data, releasing the buffers also resets the TX state machine. There is no memory corruption: the pre-fix buffer is leaked with a live reference, so no use-after-free arises. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 4.8 | EPSS 0.2% | CVE-2026-85032zephyrproject zephyr · Use After Free Medium4.8EPSS 0.2%CVE Database V5CVE-2026-85032 The MCTP over USB device class in subsys/pmci/mctp/mctp_usb.c splits RX handling across two threads: the system workqueue runs mctp_usb_class_out_work(), which parses host OUT data byte by byte and fills a packet buffer at usb->rx_pkt, while the USB device stack thread runs mctp_usb_class_disable(). The disable handler used k_work_cancel(), which removes a queued work item but returns immediately without waiting for a handler that is already running, and then called mctp_usb_reset_rx_state() to mctp_pktbuf_free() the packet buffer the worker may still be using. Both entry points into mctp_usb_class_disable() are driven by the attached USB host: a SET_CONFIGURATION request and a USB bus reset both reach it via usbd_config_reset() in subsys/usb/device_next/usbd_config.c. A host that streams partial MCTP frames on the bulk OUT endpoint and repeatedly forces a configuration change or bus reset therefore controls both the data being parsed and the moment the teardown runs, and can retry the race indefinitely without credentials or user interaction. If the free lands while the worker holds the pointer, the worker writes host-supplied bytes into freed memory of the dedicated MCTP heap (CONFIG_MCTP_HEAP_SIZE in subsys/pmci/mctp/mctp_memory.c), corrupting recycled buffers or sys_heap free-block metadata; this window requires genuine parallelism, i.e. CONFIG_SMP or a preemptible CONFIG_SYSTEM_WORKQUEUE_PRIORITY. With the default cooperative workqueue the worker can still yield inside mctp_bus_rx() (application callback or a control-message reply blocking in mctp_usb_tx()), after which it resumes and calls mctp_pktbuf_free(usb->rx_pkt) on a pointer the teardown has NULLed, dereferencing NULL and faulting on targets with null-pointer detection. The fix replaces the cancel with k_work_cancel_sync() plus a new struct k_work_sync out_work_sync, so disable waits for the RX worker to finish before draining the FIFO and freeing the packet buffer. The affected code is the MCTP subsystem, which is marked experimental, built only with CONFIG_MCTP_USB. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.5 | EPSS 0.3% | CVE-2026-82962zephyrproject zephyr · Memory-safety Medium6.5EPSS 0.3%CVE Database V5CVE-2026-82962 ethernet_fill_header() in subsys/net/l2/ethernet/ethernet.c can prepend the Ethernet header in place, by pushing it into the headroom of the packet's first fragment, instead of allocating a separate header fragment. Before this fix the in-place path was selected purely from the build-time value of CONFIG_NET_L2_ETHERNET_RESERVE_HEADER, with no check that the packet actually has that headroom, and then called net_buf_push(pkt->buffer, hdr_len). Only Ethernet TX allocations reserve that space: net_pkt_alloc_buffer() invokes the L2 alloc hook (ethernet_l2_alloc()) only when is_pkt_tx() is true and the packet's interface is the Ethernet interface. A packet that was allocated by a different L2 and then handed to Ethernet for transmission therefore has too little (usually zero) headroom. Such packets are produced by ordinary routing and tunnelling paths: net_route_packet_if() re-targets a received packet to another interface when CONFIG_NET_IPV4_FORWARDING / CONFIG_NET_IPV6_FORWARDING are enabled (for example an 802.15.4/OpenThread or PPP interface forwarding to Wi-Fi/Ethernet), net_route_ipv6_mcast_forward_packet() forwards an RX-slab clone that carries no reserve, and the IPIP tunnel interface_send() prepends an outer IP header allocated on the virtual interface. In these configurations a remote or adjacent attacker triggers the condition simply by sending traffic that the device forwards. Because net_buf_simple_push() only asserts on the headroom bound, a build without CONFIG_ASSERT (and without the newer CONFIG_NET_BUF_HARDENING) moves the fragment data pointer below the start of its data block and writes 14 bytes — 18 with VLAN — of Ethernet header out of bounds. With the default fixed-size buffer pools this overwrites the tail of the neighbouring buffer's payload or memory preceding the pool array; with variable-size pools it overwrites the buffer reference count and the heap chunk header. The attacker controls neither the written bytes nor the offset, so the practical impact is memory corruption leading to a crash, packet corruption, or heap inconsistency rather than controlled code execution. The fix takes the in-place path only when net_buf_headroom(pkt->buffer) is large enough and otherwise falls back to a separate header fragment. EPSS 0.3%Vulnerability | CVE Database V5 | ||
| High | 7.8 | EPSS 0.1% | CVE-2026-82961zephyrproject zephyr · Bounds High7.8EPSS 0.1%CVE Database V5CVE-2026-82961 The GPIO syscall handlers in drivers/gpio/gpio_handlers.c did not validate the pin argument supplied by a user-mode caller. z_vrfy_gpio_pin_configure(), z_vrfy_gpio_pin_get_config() and z_vrfy_gpio_pin_interrupt_configure() verified only the device object (K_SYSCALL_DRIVER_GPIO() / K_SYSCALL_OBJ()) and then passed the caller-supplied gpio_pin_t straight through to z_impl_gpio_pin_*() and on to the driver. The only pin check in include/zephyr/drivers/gpio.h was __ASSERT(gpio_port_pin_is_supported(cfg->port_pin_mask, pin), ...), which compiles to nothing unless CONFIG_ASSERT is enabled, so in a production build no check existed at all. GPIO drivers use pin as a shift count and as an array index on the documented assumption that it is a pin the controller supports. On STM32, for example, gpio_stm32_pin_interrupt_configure() turns pin into an EXTI line and stm32_gpio_intc_set_irq_callback() writes data->cb[line_num].cb and data->cb[line_num].data into a NUM_EXTI_LINES-entry array (default 16) in drivers/interrupt_controller/intc_gpio_stm32.c, guarded only by a compiled-out __ASSERT_NO_MSG(); the same function then reads exti_irq_table[line_num] and calls irq_enable() on the result. Other controllers index fixed-size per-pin configuration tables the same way — drivers/gpio/gpio_ite_it8xxx2_v2.c reads an MMIO base pointer out of wuc_base[8] with the caller's pin and performs a read-modify-write through it. The issue is reachable only in builds with CONFIG_USERSPACE=y (the file is compiled under that symbol), by a user-mode thread that has been granted access to a GPIO device object. Such a grant is intended to authorize control of that port's pins; the missing validation instead lets the thread drive a supervisor-mode out-of-bounds write of a function pointer and an associated void * past a kernel .bss array, and out-of-bounds reads that feed irq_enable() and MMIO accesses — an escape from the user-mode sandbox that can lead to kernel memory corruption, arbitrary code execution, or a crash. The fix validates pin against the controller's gpio_driver_config.port_pin_mask with gpio_port_pin_is_supported() in every pin-taking z_vrfy_ handler and returns -EINVAL otherwise, complemented by an unconditional pin >= GPIO_MAX_PINS_PER_PORT range check added to the shared z_impl_gpio_pin_*() inlines. EPSS 0.1%Vulnerability | CVE Database V5 | ||
| Low | 3.7 | EPSS 0.2% | CVE-2026-82390zephyrproject zephyr · Race Low3.7EPSS 0.2%CVE Database V5CVE-2026-82390 CVE-2026-82390 is a low-severity vulnerability in the Zephyr project's Espressif AES driver that causes a race condition in multi-session cipher operations. The driver incorrectly programs hardware key registers outside a mutex lock, allowing concurrent sessions to interfere with each other's encryption keys. This results in cryptographic failures where data intended to be protected by one key is encrypted or decrypted using another session's key. The vulnerability affects applications that use two or more concurrent sessions with different keys, which is not currently the case for in-tree Zephyr subsystems. The issue is fixed in Zephyr versions 4.3.2 and 4.5.0 by moving key programming inside the mutex lock for each operation. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 6.5 | EPSS 0.2% | CVE-2026-82389zephyrproject zephyr · Memory-safety Medium6.5EPSS 0.2%CVE Database V5CVE-2026-82389 In the Bluetooth Classic Hands-Free Profile Audio Gateway role, hfp_ag_create() in subsys/bluetooth/host/classic/hfp_ag.c starts an SDP discovery toward the peer, which links the embedded ag->sdp_param._node into the SDP client's pending request list in subsys/bluetooth/host/classic/sdp.c. If the subsequent bt_rfcomm_dlc_connect() call fails, bt_hfp_ag_connect() cleaned up by memset()-ing the entire AG object while that node was still linked, and while ag->slc_work could still be queued on the system work queue. An in-flight SDP discovery cannot be cancelled — bt_sdp_discover_cancel() is declared in the public header but has no implementation — so the request stays in the list with its func, pool and uuid pointers zeroed. The RFCOMM channel passed to bt_hfp_ag_connect() is taken from the peer's own SDP Hands-Free service record in the normal AG flow (bt_sdp_get_proto_param() performs no range validation, and samples/bluetooth/classic/handsfree_ag feeds the value straight through), so a remote BR/EDR device in radio range that advertises an RFCOMM channel outside the valid range 0x01..0x1e deterministically forces bt_rfcomm_dlc_connect() to fail and reach the wipe. Reading the peer's SDP record requires no pairing, and the peer can also trigger the failure by dropping the ACL or racing an RFCOMM DLC on the same DLCI at the right moment. When the SDP client next advances its request list, sdp_client_discover() dereferences the zeroed parameters — net_buf_alloc(param->pool, …) with a NULL pool and param->uuid->type — and the result-notification paths call through the NULL params->func. Zeroing a linked node also truncates the request list behind a stale tail pointer, and re-arming the freed AG slot re-appends the same node and can produce a self-looping list that hangs the Bluetooth RX thread. The impact is a crash or hang of the Bluetooth stack; the written value is a constant zero at a fixed static address, so no attacker-controlled write is available. Only builds with CONFIG_BT_CLASSIC and CONFIG_BT_HFP_AG that use the Audio Gateway role are affected. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Medium | 5.3 | EPSS 0.2% | CVE-2026-82388zephyrproject zephyr · Use After Free Medium5.3EPSS 0.2%CVE Database V5CVE-2026-82388 bt_hfp_hf_connect() in subsys/bluetooth/host/classic/hfp_hf.c allocates the per-connection HFP Hands-Free object with hfp_hf_create(), which starts an SDP discovery by passing the object's embedded hf->sdp_param to bt_sdp_discover(). That call links the caller-owned parameter block into the SDP client's request list (session->reqs in subsys/bluetooth/host/classic/sdp.c). If the subsequent bt_rfcomm_dlc_connect() then failed, the affected code wiped the entire object with (void)memset(new_hf, 0, sizeof(*new_hf)) while that discovery was still outstanding, zeroing the sys_snode_t _node that is still linked in the SDP client's list along with the request's func, uuid and pool pointers, and zeroing the hf->slc_work work item that may already be queued on the system workqueue. The discovery could not be retracted instead: bt_sdp_discover_cancel() is declared in include/zephyr/bluetooth/classic/sdp.h but has no implementation. The failing branch is reachable with peer-supplied input. The documented use of bt_hfp_hf_connect() is to pass the RFCOMM channel read out of the remote Audio Gateway's SDP record; neither bt_sdp_get_proto_param() nor bt_hfp_hf_connect() range-checks that value, so a remote device advertising an HFP AG record with an RFCOMM channel outside 1-30 makes bt_rfcomm_dlc_connect() return -EINVAL and drives the local device into the wipe. The same branch is reached without any application misuse when the remote peer controls connection timing, for example when the RFCOMM session is in BT_RFCOMM_STATE_DISCONNECTING or the ACL is dropped between object creation and the RFCOMM call. Once the object has been wiped, the Bluetooth host continues to use it: sdp_client_alloc_buf() dereferences session->param->pool, which is now NULL, and the SDP receive paths call session->param->func() through a null function pointer, neither of which is NULL-checked. Because the wipe also clears hf->acl, the pool slot is considered free and a retry or an incoming HFP connection re-appends the same still-linked list node, turning session->reqs into a self-referential list that the host's list walkers never leave. The result is a fault or an unrecoverable hang in the Bluetooth host thread; the stray indirect call is through an all-zero pointer whose target the attacker does not control, so the practical impact is denial of service. The fix keeps the object allocated and marks it with a new BT_HFP_HF_FLAG_RELEASING flag, letting bt_hfp_hf_discover_cb() release it once the discovery completes instead of destroying it under the SDP client. Only builds with CONFIG_BT_CLASSIC and CONFIG_BT_HFP_HF enabled are affected. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| Low | 3.7 | EPSS 0.2% | CVE-2026-19742zephyrproject zephyr · Crypto Low3.7EPSS 0.2%CVE Database V5CVE-2026-19742 CVE-2026-19742 is a vulnerability in the Zephyr project's IPv6 stack where the long-lived secret key used for generating RFC 7217 stable and RFC 8981 temporary interface identifiers is derived from a non-cryptographically secure random source. This allows attackers observing device traffic to recover the key and predict or track IPv6 addresses, defeating privacy protections. The issue affects Zephyr versions from 3.7.0 up to but not including 4.3.2 and from 4.4.0 up to but not including 4.5.0. The vulnerability has a low severity score and does not impact memory safety, integrity, or availability. A fix is available in versions 4.3.2 and 4.5.0, which replaces the insecure random source with a cryptographically secure one and aborts IID generation if secure randomness is unavailable. EPSS 0.2%Vulnerability | CVE Database V5 | ||
| High | 7.1 | EPSS 0.1% | CVE-2026-81038zephyrproject zephyr · Info-leak High7.1EPSS 0.1%CVE Database V5CVE-2026-81038 CVE-2026-81038 is a vulnerability in the Zephyr project's Object Transfer Service (OTS) server where an uninitialized four-byte stack buffer is disclosed in response to certain Calculate Checksum commands. This occurs because the response payload buffer is only properly initialized on a success path, but remains uninitialized on failure paths, leading to leakage of stack memory. The OACP characteristic requires no authentication, allowing any nearby peer to trigger this information leak or cause a denial of service by triggering an assertion failure. The flaw affects Zephyr versions >=3.3.0 <4.3.2 and >=4.4.0 <4.5.0 and is fixed in versions 4.3.2 and 4.5.0. EPSS 0.1%Vulnerability | CVE Database V5 |
Page 1 of 12