Skip to main content

Zephyr UpdateHub CVE-2026-11812

LOW
Race Condition (CWE-362)
2026-08-10 vulnerabilities@zephyrproject.org
2.5
CVSS 3.1 · Vendor: zephyrproject
View

Attack ChainAIDerived

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

  1. Access
    Local process invokes updatehub syscall
  2. Delivery
    Background autohandler enters prepare_fds() concurrently
  3. Exploit
    Race condition causes double-entry with nfds==1
  4. Execution
    Out-of-bounds write corrupts ctx.sock or ctx.nfds
  5. Persist
    Update subsystem enters inconsistent state
  6. Impact
    OTA firmware update path denied

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Concurrency control, locking
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires a local actor - either an authenticated shell user able to run the 'updatehub run' command, a process invoking the updatehub API directly, or (with CONFIG_USERSPACE enabled) an unprivileged userspace thread with access to the updatehub syscalls. The attacker must also win a timing race against the background autohandler running on the system workqueue, which is a high-complexity precondition (AC:H) and cannot be controlled or influenced by a remote peer. Remote network attackers have no mechanism to trigger or time the race. The vulnerability is further constrained to Zephyr builds with CONFIG_UPDATEHUB=y; it is a compile-time dead code path in all other Zephyr configurations. No special network conditions or inbound connections are required - the race is entirely local to the embedded device's scheduling.

Impact

The CVSS 3.1 vector AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L and base score of 2.5 are well-calibrated for this issue: local access is mandatory, attack complexity is high because exploitation requires winning a timing race between two concurrent kernel-level flows, and the blast radius is confined to availability of the OTA update subsystem with no confidentiality or integrity impact. The vulnerability tags supplied with this advisory - 'RCE' and 'Buffer Overflow' - materially overstate the risk and conflict directly with the CVE description, which states explicitly that 'there is no demonstrated path to memory outside [the ctx structure] or to code execution'; those tags should be disregarded for prioritization purposes. No CISA KEV listing exists, no public exploit code has been identified, and the OOB write is structurally bounded within ctx, making reliable control-flow hijack implausible without additional memory-layout primitives that do not appear to be available here. The realistic operational risk is disruption of OTA firmware update capability on individual Zephyr-based devices - relevant for fleets relying on remote management but not a network-reachable threat. Patching is appropriate as part of normal maintenance cadence; no emergency response is warranted.

Exploit ScenarioDerived

A local unprivileged process on a CONFIG_USERSPACE-enabled Zephyr device repeatedly invokes the updatehub_probe syscall in a tight loop while the background z_impl_updatehub_autohandler is concurrently executing on the system workqueue, racing both threads into prepare_fds() simultaneously. When both flows observe ctx.nfds == 1 before either increments it, one write lands at ctx.fds[1] - one past the array boundary - corrupting the adjacent ctx.sock or ctx.nfds field, after which the update subsystem enters an inconsistent state, double-closes a socket, or stalls, denying all subsequent OTA update operations until the device is rebooted.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
No patch listed yet 0.1% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Aug 10, 2026

Concurrent access to an unprotected singleton context structure in Zephyr RTOS's UpdateHub OTA subsystem enables two independent callers - the background autohandler and user-triggered update operations - to race through prepare_fds(), producing an out-of-bounds write that corrupts adjacent struct members and disables the firmware-update path. Affected are embedded systems running Zephyr with the UpdateHub subsystem enabled, particularly those built with CONFIG_USERSPACE where unprivileged userspace threads can invoke update syscalls and actively compete with the workqueue handler. No public exploit has been identified at time of analysis, the CVSS base score is 2.5, and the vendor commit confirms no demonstrated path to code execution - impact is limited to availability of the OTA update mechanism.

RemediationAI

The primary fix is to update to a Zephyr tree version that includes commit 551d3f92b36e9604f039101c4e4f623682d02159; the upstream fix is available at https://github.com/zephyrproject-rtos/zephyr/commit/551d3f92b36e9604f039101c4e4f623682d02159, though a formal tagged release version incorporating this commit has not been independently confirmed from available data. Integrators who cannot immediately update should disable the UpdateHub subsystem (CONFIG_UPDATEHUB=n) as a compensating control, which eliminates the vulnerable code path entirely at the cost of OTA update functionality - acceptable for devices managed via out-of-band flashing. If disabling UpdateHub is not feasible, restricting CONFIG_USERSPACE or tightening syscall filtering to prevent unprivileged threads from invoking updatehub syscalls reduces the concurrency surface to the system workqueue alone, making the race far harder to trigger. The GitHub Security Advisory at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-vprh-rff6-46xp should be consulted for any additional vendor guidance.

Affected ProductsAI

The vulnerability affects the Zephyr RTOS UpdateHub management subsystem (subsys/mgmt/updatehub/updatehub.c) in versions prior to the commit 551d3f92b36e9604f039101c4e4f623682d02159 merged into the main Zephyr tree. Exact affected version ranges are not independently confirmed from available data beyond the NVD CPE entry cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:*. The issue is present only in builds with the UpdateHub subsystem enabled (CONFIG_UPDATEHUB=y) and is most readily triggered in builds with CONFIG_USERSPACE enabled, which exposes update operations as syscalls callable by unprivileged userspace threads. The GitHub Security Advisory is available at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-vprh-rff6-46xp.

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 vulnerability resides in subsys/mgmt/updatehub/updatehub.c within the Zephyr RTOS, an open-source embedded operating system targeting IoT and microcontroller-class devices (CPE: cpe:2.3:o:zephyrproject:zephyr:*:*:*:*:*:*:*:*). The UpdateHub client implements CoAP-over-UDP firmware update negotiation and maintains all its state in a single file-scope struct updatehub_context named ctx, containing a CoAP block context, payload buffer, status code, a socket descriptor, and a one-element poll-fd array fds[1]. The root cause is CWE-362 (Concurrent Execution Using Shared Resource with Improper Synchronization): ctx carried no lock. The precise OOB write occurs in prepare_fds(), which unconditionally wrote ctx.fds[ctx.nfds] and incremented ctx.nfds; when a second concurrent caller enters the function while ctx.nfds is already 1, the write lands one element past fds[1], overlapping the ctx.sock and ctx.nfds members by struct layout. The upstream fix (commit 551d3f92) introduces K_MUTEX_DEFINE(ctx_lock) and wraps all three public entry points - z_impl_updatehub_probe, z_impl_updatehub_update, and z_impl_updatehub_autohandler - with k_mutex_lock/unlock, while prepare_fds() now returns -ENOMEM when nfds >= ARRAY_SIZE(ctx.fds), aborting the connection setup path rather than writing out of bounds.

Know when the next one hits your stack

  • 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 (zephyrproject) PRIMARY 2.5 LOW
AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L
vuln.today AI 2.5 LOW

Local-only attack vector, high complexity due to mandatory timing race, low privilege required for syscall access, availability-only impact confined to the OTA update subsystem.

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

Primary rating from Vendor (zephyrproject).

CVSS VectorVendor: zephyrproject

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

DescriptionCVE.org

The UpdateHub management subsystem (subsys/mgmt/updatehub/updatehub.c) drives every update operation through a single file-scope ctx structure that holds the CoAP block context, payload buffer, status code, socket, and a one-element poll-fd array fds[1]. Access to ctx was not serialized, and prepare_fds() wrote ctx.fds[ctx.nfds] and incremented ctx.nfds with no bounds check.

Two independent paths mutate ctx concurrently: the background autohandler running on the system workqueue, and user-triggered operations reached through the updatehub run shell command, direct API calls, or - since the operations are exposed as syscalls - userspace threads. When a second flow enters prepare_fds() while ctx.nfds is already 1, the write lands one element past the array; by struct layout it overlaps the adjacent ctx.sock/ctx.nfds members. More broadly, the unsynchronized sharing lets two flows interleave connection setup and teardown, double-closing a socket descriptor or scribbling the shared buffers.

The result is corruption of the update subsystem's internal state and denial of service of the firmware-update path; the out-of-bounds write is contained within the ctx structure and there is no demonstrated path to memory outside it or to code execution. Triggering requires a local actor able to invoke update operations (or, with CONFIG_USERSPACE, an unprivileged userspace thread) and to win a timing race against the background handler; remote peers cannot control the race timing. The fix serializes the entry points with a mutex and adds a bounds check to prepare_fds().

Threat Intelligence Overview

EPSS Score
0.1%
Top 100% exploitable
Prevalence
Low
niche embedded RTOS for IoT microcontrollers, limited enterprise footprint
Data Quality
5 sources
Confidence: Medium
NVD CVE.org EPSS Vulnrichment GitHub VulDB

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 LOW
CISA KEV No
Public POC No
EPSS 0.1%
Patch available No
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Defer
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

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

Attack Technique

A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.

Race conditions occur when multiple concurrent requests exploit the brief time gap between checking a condition and acting upon it (TOCTOU - Time of Check, Time of Use).

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

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

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