Skip to main content

Zephyr RTOS CVE-2026-19937

MEDIUM
Missing Release of Resource after Effective Lifetime (CWE-772)
2026-10-12 zephyr
5.7
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Access
    Provisioned peer with valid NetKey/AppKey
  2. Delivery
    Flood segmented requests, withhold Segment ACKs
  3. Exploit
    Pin TX contexts busy and starve chunk pool
  4. Execution
    Hit error path leaking message context
  5. Impact
    Pool drained, node stops answering (persistent DoS until reboot)

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Resource cleanup on lifecycle end
Exploitation Conditions

Requires an attacker already provisioned into the target mesh network, holding a valid NetKey plus an AppKey or DevKey bound to a server model, and within Bluetooth radio range of the victim (AV:A). The target must be built with CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG and CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CTX_ENABLED, both enabled by default, so default configurations are vulnerable. The attacker must simultaneously drive two runtime conditions: keep all segmented-TX contexts occupied (by flooding requests that elicit segmented responses while withholding Segment Acknowledgments) and keep the chunk pool (CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CHUNK_COUNT, default 40) short, so each further request hits the error path and leaks one of the four default contexts. Limiting factors: the Bluetooth-adjacent position, the requirement to be a trusted/provisioned mesh participant (not anonymous), and the need to maintain the TX-busy + chunk-starvation window; pre-fix releases that size chunks from buffer capacity rather than payload length make the starvation easier to provoke.

Impact

This is a medium-severity, availability-only defect (CWE-772, missing resource release) and the signals are internally consistent rather than conflicting. The provided CVSS 3.1 vector (AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H, base 5.7) correctly caps impact at availability - the description explicitly rules out memory corruption, information disclosure, and integrity impact, so the 'Buffer Overflow' and 'Information Disclosure' tags in the input are wrong and should be disregarded. Two factors meaningfully constrain real-world risk: AV:A means the attacker must be within Bluetooth radio range (not internet-reachable), and PR:L means the attacker must already be provisioned into the target mesh network holding a valid NetKey plus an AppKey or DevKey bound to a server model - i.e. an insider/compromised-node position, not an anonymous remote attacker. No EPSS score, CISA KEV listing, or public POC was supplied, so there is no evidence of active exploitation; per precision rules this is 'no public exploit identified at time of analysis.' The one amplifying factor is that the required pre-conditions (CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG and CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CTX_ENABLED) are enabled by default, and the resource leak is permanent across unprovision/re-provision/suspend/resume until reboot, making the DoS sticky. Net: a genuine but moderate-priority issue for operators of default-configured Zephyr Bluetooth Mesh nodes who cannot fully trust every provisioned peer; prioritize patching, but it is not a widespread remote-exploitation emergency.

Exploit ScenarioDerived

A node already provisioned into the mesh (e.g. a compromised or malicious peer with a valid NetKey and a bound AppKey/DevKey) floods a victim node with requests that elicit segmented responses while deliberately withholding Segment Acknowledgments, pinning all transmit contexts busy while queued responses hold the chunk pool. Each additional request that hits the chunk-exhaustion error path in bt_mesh_delayable_msg_manage() permanently leaks one of the four static message contexts; once the pool is drained the node silently drops all Configuration/Health/application server replies until it is rebooted. No public exploit code was identified at time of analysis, and because AV:A applies the attacker must be within Bluetooth range.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 12, 2026

Zephyr RTOS Bluetooth Mesh nodes built with the default Access-layer delayed-message feature can be persistently muted by a mesh peer that is already provisioned into the same network and within Bluetooth radio range. By flooding the victim with requests that elicit segmented responses while withholding Segment Acknowledgments, the attacker forces bt_mesh_delayable_msg_manage() down an error path that returns a message context to neither the free nor the busy list, permanently shrinking the default four-entry context pool until every reply from Configuration Server, Health Server and application server models fails with -ENOMEM and is silently dropped. The impact is availability-only (CVSS 5.7, CWE-772, authenticated/PR:L and adjacent/AV:A per the assessed vector); the defect is cleared only by a reboot, the upstream fix is a committed source change, and no public exploit code or confirmed active exploitation was identified at time of analysis.

RemediationAI

Apply the upstream fix for CVE-2026-19937 by pulling the change in commit 097001f187ba2764e9ef1cc7113b8da525bf741c (subsys/bluetooth/mesh/delayable_msg.c), which unconditionally returns the context to free_ctx instead of gating the recycle on a busy_ctx lookup; see the vendor advisory https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-5rrx-xww6-5xrh. Patch status should be treated as upstream fix available (commit referenced); a tagged, released patched version is not independently confirmed from the available data, so downstream product vendors must confirm that the commit is present in their shipped Zephyr tree. Where reflashing is not immediately possible, the most direct compensating control is to build with CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG disabled (and CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CTX_ENABLED off), which removes the vulnerable pool entirely at the cost of losing randomized response timing - a privacy/traffic-analysis property, not a functional one - and requires a re-flash plus re-verification of message timing behavior. Because the attack requires a fully provisioned peer holding a valid NetKey plus an AppKey or DevKey bound to a server model, key hygiene is an effective secondary control: audit and revoke AppKeys and DevKeys issued to untrusted or decommissioned nodes, and avoid provisioning devices that are not under organizational control, accepting that this does not help against an already-provisioned rogue node inside radio range. Monitoring mesh traffic for a node that receives and processes traffic but stops answering (the observable symptom once the pool is drained) can trigger operational response, and rebooting an affected device restores service - but only temporarily, since the leak recurs under the same attack and the four contexts are re-lost. Do not rely on enlarging CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_COUNT or the chunk pool as a fix; larger pools only lengthen the time needed to reach exhaustion. Apply the same delayable-message defaults hardening to mesh nodes in pre-fix releases that size chunks from buffer capacity, as those are the easiest to starve.

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

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

Technical ContextAI · show details

The Zephyr Bluetooth Mesh Access layer in subsys/bluetooth/mesh/delayable_msg.c maintains a static pool of CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_COUNT message contexts (default 4) threaded onto either a free_ctx or a busy_ctx singly-linked list (sys_slist). This 'delayable message' machinery exists so that responses carry a randomized transmission delay (ctx->rnd_delay) when CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG and CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CTX_ENABLED are enabled, which they are by default. release_delayable_msg_ctx() only recycled a context when sys_slist_find_and_remove() located it on busy_ctx; the chunk-exhaustion error path in bt_mesh_delayable_msg_manage() releases a context that has already been popped off free_ctx but not yet inserted on busy_ctx, so the node was appended to neither list. The commit diff confirms the root cause and the fix: the return value of sys_slist_find_and_remove() is now ignored and free_ctx is unconditionally appended, so the error path can no longer orphan a context. Root cause class is CWE-772, Missing Release of Resource after Effective Lifetime - a bookkeeping defect, not memory corruption. The error path is triggered when the chunk pool (CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CHUNK_COUNT, default 40 chunks) lacks the chunks a new delayed message needs and the oldest pending message cannot be flushed because bt_mesh_access_send() returns -EBUSY or -ENOBUFS (all segmented-TX contexts busy, or advertising/segment buffers exhausted). The CPE cpe:2.3:a:zephyrproject:zephyr:*:*:*:*:*:*:*:* is version-agnostic, so the affected population is defined by configuration rather than by a version string: any Zephyr build with the mesh Access delayable-message feature enabled at defaults. Pre-fix releases that computed chunk counts from transmit buffer capacity rather than payload length are noted in the source description as making chunk-pool starvation - and therefore the leak - considerably easier to provoke. bt_mesh_delayable_msg_init() runs only once from bt_mesh_init(), and node reset/suspend only drain busy_ctx, which is why the lost contexts survive unprovision, re-provision and suspend/resume.

Know when Bluetooth 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 5.7 MEDIUM
AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 5.7 MEDIUM

AV:A for Bluetooth range, PR:L since the attacker must be a provisioned peer with a bound key, A:H for persistent DoS, and C:N/I:N as only availability is affected.

3.1 AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:A/AC:L/AT:N/PR:L/UI:N/VC:N/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
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

DescriptionCVE.org

The Bluetooth Mesh Access layer delayable-message machinery in subsys/bluetooth/mesh/delayable_msg.c manages a static pool of CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_COUNT message contexts (default 4) threaded onto a free_ctx or busy_ctx list. release_delayable_msg_ctx() returned a context to free_ctx only when sys_slist_find_and_remove() found it on busy_ctx. The chunk-exhaustion error path in bt_mesh_delayable_msg_manage() releases a context that was already popped off free_ctx but not yet inserted on busy_ctx, so the context was appended to neither list and was permanently lost from the pool. Because bt_mesh_delayable_msg_init() runs only once from bt_mesh_init(), and node reset/suspend only drain busy_ctx, the loss survives unprovision, re-provision and suspend/resume - it is cleared only by a reboot.

The error path is reached when the chunk pool (CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CHUNK_COUNT, default 40 chunks) is short of the chunks a new delayed message needs and the oldest pending message cannot be flushed because bt_mesh_access_send() returns -EBUSY or -ENOBUFS (all segmented-TX contexts busy, or advertising/segment buffers exhausted). A peer that is provisioned into the mesh network - holding a valid NetKey plus an AppKey or DevKey bound to a server model - can drive both conditions by flooding the victim with requests that elicit segmented responses while withholding the Segment Acknowledgment, which keeps the transmit contexts occupied while queued responses hold the chunk pool. Each further request that arrives in that window leaks one context.

Once the pool is drained, bt_mesh_delayable_msg_manage() returns -ENOMEM for every subsequent send and bt_mesh_model_send() propagates that error with no fallback to an immediate transmit. Since CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG and CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG_CTX_ENABLED are both enabled by default, ctx->rnd_delay is set for every received access message, so all replies from Configuration Server, Health Server and application server models are silently dropped. The node keeps receiving and processing traffic but never answers, a persistent denial of service until the device is restarted. There is no memory corruption, information disclosure or integrity impact; releases before the fix compute the chunk count from the transmit buffer capacity rather than its payload length, making chunk-pool starvation - and therefore the leak - considerably easier to provoke.

Threat Intelligence Overview

EPSS Score
0.2%
Top 93% exploitable
Prevalence
Medium
popular embedded/IoT RTOS, but Bluetooth Mesh feature is a deployment subset
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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Controlled
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

28
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +28
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.

Affected Products (CPE)CVE.org

cpe:2.3:a:zephyrproject:zephyr:*:*:*:*:*:*:*:*
CVE-2025-65824 HIGH POC
8.8 Dec 10

Unauthenticated Bluetooth Low Energy OTA firmware upgrade in the Meatmeet Pro WiFi & Bluetooth Meat Thermometer firmware

CVE-2025-32879 HIGH POC
8.8 Jun 20

CVE-2025-32879 is a security vulnerability (CVSS 8.8) that allows an attacker. Risk factors: public PoC available.

CVE-2025-10457 HIGH POC
8.1 Sep 19

Zephyr's Bluetooth Low Energy connection-response handler fails to verify that a connection request was actually initiat

CVE-2025-20672 CRITICAL
9.8 Jun 02

Heap OOB write in Android Bluetooth driver via incorrect bounds check.

CVE-2026-55330 CRITICAL
9.8 Oct 06

A use-after-free in the Android Bluetooth stack (bluetooth_ccc.cc, function BluetoothCccHandlerCallbackImpl) lets an att

CVE-2020-10135 MEDIUM POC
5.4 May 19

Legacy pairing and secure-connections pairing authentication in Bluetooth BR/EDR Core Specification v5.2 and earlier may

CVE-2026-19570 HIGH
8.8 Oct 09

Memory corruption in the Zephyr RTOS LE Audio Broadcast Sink (subsys/bluetooth/audio/bap_broadcast_sink.c) lets an attac

CVE-2026-90255 HIGH
8.8 Sep 17

A memory leak combined with a use-after-free in the Linux kernel's Bluetooth HCI connection-setup path can crash the ker

CVE-2026-90256 HIGH
8.8 Sep 17

A race condition in the Linux kernel's Bluetooth L2CAP subsystem allows a use-after-free of the hci_conn::l2cap_data poi

CVE-2026-8374 HIGH
8.5 Oct 09

Bluetooth authentication bypass in SwitchBot Door Lock Series allows an attacker within BLE range to manipulate the lock

CVE-2026-89583 HIGH
8.1 Sep 11

Out-of-bounds read in the Linux kernel Bluetooth subsystem's eir_get_service_data() leaks kernel heap memory into usersp

CVE-2026-90092 HIGH
8.0 Sep 17

Use-after-free in the Linux kernel Bluetooth L2CAP stack lets a Bluetooth-adjacent attacker corrupt kernel memory by rac

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