Zephyr UpdateHub CVE-2026-11812
LOWAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLocal process invokes updatehub syscall
-
DeliveryBackground autohandler enters prepare_fds() concurrently
-
ExploitRace condition causes double-entry with nfds==1
-
ExecutionOut-of-bounds write corrupts ctx.sock or ctx.nfds
-
PersistUpdate subsystem enters inconsistent state
-
ImpactOTA 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:L
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.
Primary rating from Vendor (zephyrproject).
CVSS VectorVendor: zephyrproject
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
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.
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB