Skip to main content

Zephyr Bluetooth OTS EUVDEUVD-2026-109972

| CVE-2026-81038 HIGH
Reachable Assertion (CWE-617)
2026-10-26 zephyr
7.1
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Connect to OTS server within BLE range
  2. Delivery
    Enable OACP indications via CCC
  3. Exploit
    Write failing Calculate Checksum command
  4. Execution
    Error path pulls from empty buffer
  5. Impact
    Device panics or leaks 4 bytes of stack

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V16 - Security Logging and Error Handling Reachable assertion handling
Exploitation Conditions

The target device must run Zephyr's Bluetooth Object Transfer Service (OTS) server with the OACP characteristic exposed and be connectable/advertising; no pairing, encryption, or authentication is required (BT_GATT_PERM_WRITE / BT_GATT_PERM_READ|WRITE). The attacker must be within Bluetooth radio range (adjacent, not remote-over-internet). The trigger is a Calculate Checksum (BT_GATT_OTS_OACP_PROC_CHECKSUM_CALC) command that fails validation - e.g. issued with no object selected (returns INV_OBJ) or with invalid offset/len (returns INV_PARAM); because oacp_command_decode() handles the op code unconditionally (no CONFIG_BT_OTS_OACP_CHECKSUM_SUPPORT guard), even builds without checksum support are reachable via OPCODE_NOT_SUP. Limiting factors: the denial-of-service panic requires CONFIG_ASSERT to be enabled, while the 4-byte uninitialized-stack disclosure requires assertions to be disabled; adjacent-only vector limits reach to physically nearby attackers; and the disclosure is bounded to four bytes per request with no memory corruption.

Impact

This is a genuine but moderate-priority issue, not a top-tier emergency. The provided CVSS 3.1 vector (AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H, 7.1) is consistent with the description: exploitation requires only Bluetooth radio-range (adjacent) access, low complexity, and no authentication (PR:N), because the OACP characteristic and its CCC are declared BT_GATT_PERM_WRITE / BT_GATT_PERM_READ|WRITE with no pairing or encryption. The dominant impact is availability (A:H) via a remotely triggered kernel panic on CONFIG_ASSERT-enabled builds, plus low confidentiality (C:L) from four bytes of uninitialized stack disclosure on asserts-disabled builds. The vuln.today Decision label is 'this_week', which aligns with a real-but-not-critical adjacent-only flaw. No EPSS score was provided, so statistical exploitation probability cannot be weighed. KEV status is not indicated in the input, so there is no evidence of active exploitation - treat it as not currently KEV-listed. A detailed PoC/reproduction is described in the vendor GHSA advisory (runtime-reproduced crash on mps2/an385, Zephyr v4.3.0, with a 9-byte crashing input), raising practical risk above a theoretical finding, though the attack is bounded (adjacent vector, 4-byte disclosure per request, no memory corruption). The main limiter on real-world urgency is that it only affects devices actually running Zephyr's optional OTS server with the OACP characteristic exposed and connectable.

Exploit ScenarioDerived

An attacker within Bluetooth radio range connects to a device running Zephyr's OTS server, enables OACP indications, and sends a nine-byte Calculate Checksum command that fails validation (for example with no object selected). On an assertion-enabled build this trips net_buf_simple_pull_mem() and panics the device (denial of service); on an assertion-disabled build it returns four bytes of uninitialized stack memory in the indication, repeatable on every request. The vendor GHSA advisory documents a runtime-reproduced PoC for the panic.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 26, 2026

Bluetooth Object Transfer Service (OTS) servers in Zephyr (>= 3.3.0 through <= 4.4.2) mishandle failed Calculate Checksum responses: oacp_ind_send() appends a four-byte Checksum Value field based only on the requested op code, then calls net_buf_simple_pull_le32() on a zero-length stack buffer whenever validation failed. Any peer within radio range can abuse this with a nine-byte OACP write and no pairing, encryption or authentication, because the OACP characteristic and its CCC are exposed with unauthenticated write permissions. On CONFIG_ASSERT builds the zero-length pull trips the assertion in net_buf_simple_pull_mem() and panics the device (remote DoS); with assertions compiled out the same path copies four bytes of uninitialized stack memory into the indication sent to the peer, repeatable per request and bounded to four bytes with no memory corruption; the reporter's reproducer demonstrates the panic and no public exploit tooling beyond it is confirmed.

RemediationAI

Apply the upstream fix commit https://github.com/zephyrproject-rtos/zephyr/commit/36145a6f1164e2e0a18c8c83d5b1be6e7d3f6e23, which adds the condition oacp_status == BT_GATT_OTS_OACP_RES_SUCCESS to the checksum field append in oacp_ind_send(), or move to Zephyr 4.5.0 once released (the advisory's fixed version is a projection since the fix is merged on main but untagged); the fix is complete for this component, as olcp_ind_send() builds a fixed three-byte response and has no equivalent defect. Until patched, drop or avoid enabling the OTS server (CONFIG_BT_OTS) on devices that do not need object transfer, since restricting the characteristic's permissions would require source changes and CONFIG_BT_OTS_OACP_CHECKSUM_SUPPORT does not help because the op code is decoded unconditionally. Do not treat disabling CONFIG_ASSERT as a mitigation: it converts the remote panic into the four-byte uninitialized-stack disclosure rather than removing the defect. For deployments that must keep OTS running, limit which peers can connect to the GATT server (bonded-only policies can be layered at the application level, with the trade-off of excluding unpaired clients), and schedule the update for the current patch cycle.

Affected VersionsENISA

Zephyr 3.3.0 ≤4.4.2

Affected Packages

euvd zephyr no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Zephyr's Bluetooth OTS implementation exposes an Object Action Control Point (OACP) GATT characteristic over which peers issue procedures such as Calculate Checksum, answered via indications built in subsys/bluetooth/services/ots/ots_oacp.c. The response payload is a bare four-byte stack array declared with NET_BUF_SIMPLE_DEFINE(resp_param, sizeof(uint32_t)), which expands to an uninitialized array with len = 0; oacp_checksum_proc_validate() only calls net_buf_simple_add_le32() on its success path, so INV_OBJ, INV_PARAM, OBJ_LOCKED and OPER_FAILED all leave the buffer empty. Before the fix, oacp_ind_send() appended the Checksum Value field whenever oacp_proc.type was BT_GATT_OTS_OACP_PROC_CHECKSUM_CALC regardless of result code, so net_buf_simple_pull_le32() ran against a zero-length buffer. This maps to CWE-617 (reachable assertion): with CONFIG_ASSERT enabled, __ASSERT_NO_MSG(buf->len >= len) inside net_buf_simple_pull_mem() fires and panics the kernel. It also maps to CWE-908 (use of uninitialized resource): with assertions compiled out the boundary check is absent, the pull returns the pre-advance pointer into the untouched stack array, and four bytes of uninitialized stack memory are encoded into the indication. The write stays inside the seven-byte res indication buffer (OACP_OLCP_RES_MAX_SIZE == 7, uint8_t res[7]), so there is no memory corruption. oacp_command_decode() accepts BT_GATT_OTS_OACP_PROC_CHECKSUM_CALC unconditionally, without a CONFIG_BT_OTS_OACP_CHECKSUM_SUPPORT guard, so builds without checksum support also reach the defective path and fail with OPCODE_NOT_SUP.

Know when Zephyr gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (zephyr) PRIMARY 7.1 HIGH
AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H
vuln.today AI 7.1 HIGH

Bluetooth radio-range gives AV:A; the OACP characteristic needs no pairing or auth so PR:N/AC:L/UI:N; A:H for the panic and C:L for the bounded 4-byte stack leak, with no integrity impact.

3.1 AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H
4.0 AV:A/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

Attack Vector
Adjacent
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
High

DescriptionCVE.org

The Object Transfer Service server builds its Object Action Control Point (OACP) response indication in oacp_ind_send() (subsys/bluetooth/services/ots/ots_oacp.c). Before this fix the four-byte Checksum Value field was appended whenever the requested op code was BT_GATT_OTS_OACP_PROC_CHECKSUM_CALC, regardless of the result code. The response payload is a bare, uninitialized four-byte stack buffer declared with NET_BUF_SIMPLE_DEFINE(resp_param, sizeof(uint32_t)) in bt_gatt_ots_oacp_write(), and it is filled only on the success path of oacp_checksum_proc_validate(). On every failure path the buffer is still empty, so net_buf_simple_pull_le32() was invoked on a zero-length buffer.

The OACP characteristic and its client characteristic configuration descriptor are declared with BT_GATT_PERM_WRITE and BT_GATT_PERM_READ | BT_GATT_PERM_WRITE, so no pairing, encryption, or authentication is required. Any peer within radio range that can connect to a device running the OTS server can enable OACP indications and write a nine-byte Calculate Checksum command that fails validation - for example by issuing it with no object selected, which returns BT_GATT_OTS_OACP_RES_INV_OBJ. Because oacp_command_decode() accepts the Calculate Checksum op code unconditionally (it is not guarded by CONFIG_BT_OTS_OACP_CHECKSUM_SUPPORT), builds without checksum support are reachable too: they answer BT_GATT_OTS_OACP_RES_OPCODE_NOT_SUP and take the same bad path.

On builds with CONFIG_ASSERT enabled, the zero-length pull trips the assertion inside net_buf_simple_pull_mem() and panics the device, giving a remotely triggered denial of service. On builds with assertions disabled there is no check: the pull returns the untouched stack array and four bytes of uninitialized stack memory are copied into the indication and transmitted to the peer, repeatable on every request. The disclosure is bounded to four bytes per request and the write stays inside the seven-byte res indication buffer, so there is no memory corruption; the impact is uninitialized-memory disclosure plus an availability loss in assertion-enabled configurations.

Technical POC Analysis

CWE-617 (Reachable Assertion), secondary CWE-908 (Use of Uninitialized Resource).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A high-severity vulnerability in Zephyr's Bluetooth Object Transfer Service (OTS) affects all versions from 3.3.0 through 4.4.2, enabling any nearby unauthenticated attacker to crash or leak stack memory from affected devices via a simple nine-byte Bluetooth write. This impacts the availability and confidentiality of Bluetooth-enabled products built on Zephyr, requiring immediate patching to prevent disruption and potential information disclosure.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.1%
Top 96% exploitable
Prevalence
Medium
popular embedded RTOS, but vulnerable OTS/OACP Bluetooth service is optional
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Controlled
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +36
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Zephyr

View all
CVE-2023-4260 CRITICAL POC
10.0 Sep 27

Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),

CVE-2026-1678 CRITICAL POC
9.8 Mar 05

An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on

CVE-2023-5055 CRITICAL POC
9.8 Nov 21

Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit

CVE-2023-4257 CRITICAL POC
9.8 Oct 13

Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS

CVE-2023-3725 CRITICAL POC
9.8 Oct 06

Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner

CVE-2021-3323 CRITICAL POC
9.8 Oct 12

Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2021-3625 CRITICAL POC
9.8 Oct 05

Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable

CVE-2021-3319 CRITICAL POC
9.8 Oct 05

DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul

CVE-2018-1000800 CRITICAL POC
9.8 Sep 06

zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(

CVE-2023-4264 CRITICAL POC
9.6 Sep 27

Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul

CVE-2024-1638 CRITICAL POC
9.1 Feb 19

The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte

CVE-2023-5753 HIGH POC
8.8 Oct 25

Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy