Skip to main content

Zephyr MCUmgr CVE-2026-18747

MEDIUM
Out-of-bounds Read (CWE-125)
2026-09-29 vulnerabilities@zephyrproject.org
6.8
CVSS 3.1 · Vendor: zephyrproject
View

Attack ChainAIDerived

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

  1. Access
    Gain write access to MCUmgr console (USB CDC-ACM/UART)
  2. Delivery
    Stage preceding frames to shape pool buffer
  3. Exploit
    Send 7-byte zero-length SMP frame
  4. Execution
    CRC passes, len underflows to ~65KB
  5. Persist
    CBOR/net_buf_pull reads out of bounds
  6. Impact
    Fault MCUmgr thread or leak adjacent memory

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, read limits
MITRE ATT&CK

1 technique across 1 tactic: Collection

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

Exploitation Conditions

Requires a target built with a serial SMP transport that selects MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE - specifically CONFIG_MCUMGR_TRANSPORT_UART (smp_uart.c) or CONFIG_MCUMGR_TRANSPORT_SHELL (smp_shell.c); the test-only CONFIG_MCUMGR_TRANSPORT_DUMMY loopback shares the bug but has no external input path and is not exploitable. The attacker needs write access to that management console, which on many boards is an exposed USB CDC-ACM port rather than a physical UART header - this local-console access requirement (AV:L) is the primary limiting factor. No authentication, prior session state, fragmentation, or credentials are needed (PR:N, UI:N), as the malformed frame is processed before command-level access control. Reliable memory disclosure additionally depends on the default-enabled CONFIG_MCUMGR_GRP_OS_ECHO handler and on staging preceding frames to shape the reused pool buffer.

Impact

This is a real but access-constrained flaw. The CVSS 3.1 vector (AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H, base 6.8) is internally consistent with the description: exploitation requires write access to a local management console (UART or, on many boards, a USB CDC-ACM port), hence AV:L rather than AV:N, and it needs no credentials or session state because the malformed frame is mishandled before any command-level access control (PR:N). The dominant impact is availability (A:H - the OOB read faults the MCUmgr thread / can reset the device), with limited confidentiality (C:L) via the default os echo handler leaking adjacent memory, and no integrity gain beyond what the already-unauthenticated transport permits (I:N). No EPSS score, no CISA KEV listing, and no public POC were provided in the intelligence, so there is no signal of active or automated exploitation - this is a vendor-reported (Zephyr project) advisory with a confirmed source-level fix, not an in-the-wild threat. The AV:L local-console requirement is the single biggest risk limiter and correctly keeps this out of the remotely-wormable class despite PR:N; treat as a real defect to patch on exposed/physically-accessible devices, not an internet-facing emergency. Note the bare 7-byte trigger alone typically only re-parses stale pool bytes into a parse error; reliably reaching the faulting OOB read or memory disclosure requires the attacker to stage preceding frames - feasible precisely because the transport is unauthenticated and the attacker controls all console input.

Exploit ScenarioDerived

An attacker with write access to a device's MCUmgr management console (a bare UART header or, commonly, an exposed USB CDC-ACM port) sends a single unauthenticated 7-byte line - the 0x06 0x09 packet marker, the base64 group AAA=, and a newline - declaring a zero-length packet that passes the CRC check for free and underflows net_buf::len to ~65 KB against a 384-byte buffer. To move from a mere parse error to a faulting out-of-bounds read or memory disclosure, the same unauthenticated attacker first stages preceding frames so that a request parses with nh_len larger than the buffer, driving net_buf_pull() (guarded only by __ASSERT_NO_MSG) out of bounds. No public exploit code was identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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 – Sep 29, 2026

An out-of-bounds read in Zephyr's MCUmgr SMP-over-console transport (subsys/mgmt/mcumgr/transport/src/serial_util.c) lets a single 7-byte, unauthenticated console line underflow a net_buf length field and hand the SMP layer a bogus ~65 KB payload window over a buffer whose data area defaults to 384 bytes. The flaw affects builds that enable CONFIG_MCUMGR_TRANSPORT_UART (smp_uart.c) or CONFIG_MCUMGR_TRANSPORT_SHELL (smp_shell.c), both of which select MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE; the test-only CONFIG_MCUMGR_TRANSPORT_DUMMY loopback carries the same pattern but has no external input path and is not exploitable. Because exploitation needs only write access to the management console - on many boards an exposed USB CDC-ACM port rather than a bare UART header - the practical impact is a faulted MCUmgr thread (denial of service) plus possible limited memory disclosure via the default-enabled os echo handler; no public exploit identified at time of analysis and no confirmed active exploitation (CISA KEV).

RemediationAI

Upstream fix available (commit f7fc3e779a59c68c96eaf63a6b03ac7489f5e4a5); a released patched version is not independently confirmed from the available data, so integrators should cherry-pick the commit or track the upstream advisory at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-g6cx-xj75-hvfw. The patch adds a guard in mcumgr_serial_extract_len() rejecting any declared packet length of two bytes or fewer (rx_ctxt->pkt_len <= sizeof(uint16_t) returns -EINVAL), which prevents the CRC-strip subtraction from underflowing; note the identical pattern remains in the test-only smp_dummy.c loopback transport, harmless because it has no external input path. Where patching is not immediately possible, disable the affected console transports by not enabling CONFIG_MCUMGR_TRANSPORT_UART and CONFIG_MCUMGR_TRANSPORT_SHELL on externally reachable consoles - the trade-off is loss of UART/shell-based device management, so retain an alternate management path (BLE or UDP/CoAP SMP transport) if field management is required. Additionally disable CONFIG_MCUMGR_GRP_OS_ECHO to remove the default-enabled disclosure primitive, at the cost of losing the os echo command used for diagnostics, and restrict physical or USB access to the management console (disable or gate the USB CDC-ACM management endpoint, and require authenticated physical access), since the primitive needs only unauthenticated write access to that console and this local-console exposure is the primary limiting factor.

Affected ProductsAI

Zephyr RTOS builds that enable the MCUmgr serial/consoletransport helper MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE are affected, specifically configurations with CONFIG_MCUMGR_TRANSPORT_UART (subsys/mgmt/mcumgr/transport/src/smp_uart.c) or CONFIG_MCUMGR_TRANSPORT_SHELL (subsys/mgmt/mcumgr/transport/src/smp_shell.c); the vulnerable buffer size is governed by CONFIG_MCUMGR_TRANSPORT_NETBUF_SIZE, default 384 bytes. Exposure is highest where the management console is routed to an externally reachable interface such as a USB CDC-ACM port rather than an internal UART header, and disclosure potential is greater with the default-enabled CONFIG_MCUMGR_GRP_OS_ECHO handler. The test-only loopback transport subsys/mgmt/mcumgr/transport/src/smp_dummy.c (CONFIG_MCUMGR_TRANSPORT_DUMMY) shares the identical underflow pattern but has no external input path and is not practically exposed. Vendor advisory and fix details are at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-g6cx-xj75-hvfw and https://github.com/zephyrproject-rtos/zephyr/commit/f7fc3e779a59c68c96eaf63a6b03ac7489f5e4a5.

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

MCUmgr's SMP-over-console transport frames management packets as base64 payloads preceded by a 0x06 0x09 marker on a newline-terminated line. mcumgr_serial_process_frag() decodes the base64 group, reads a 16-bit declared packet length via mcumgr_serial_extract_len(), verifies a CRC16, then unconditionally strips the two CRC bytes with rx_ctxt->nb->len -= 2U. The length check accepted 0 and 1, and a declared length of 0 passes the checksum for free because crc16_itu_t() over zero bytes returns the zero seed; since net_buf::len is a uint16_t, subtracting 2 underflows to ~65535 while the actual data area is only CONFIG_MCUMGR_TRANSPORT_NETBUF_SIZE bytes (default 384). Downstream, smp_process_request_packet() in subsys/mgmt/mcumgr/smp/src/smp.c loses its bound: cbor_nb_reader_init() exposes a ~65 KB CBOR window over the small buffer, and each request header's nh_len is validated only against the inflated length. Because net_buf_pull() is guarded only by __ASSERT_NO_MSG, an attacker who stages prior frames on the unauthenticated transport can shape the reused pool buffer so a request succeeds with an nh_len larger than the buffer, driving the parse cursor out of bounds and reading adjacent memory - CWE-125 (out-of-bounds read). The trigger is the 7-byte line 0x06 0x09 followed by base64 'AAA=' and a newline, requiring no session state, fragmentation, or credentials, and mishandled before any command handler or command-level access control executes.

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

Local management console write access gives AV:L; no auth or interaction before the flaw (PR:N/UI:N); trivial length underflow (AC:L); crash-driven A:H with limited memory leak (C:L) and no integrity gain (I:N).

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

Primary rating from Vendor (zephyrproject).

CVSS VectorVendor: zephyrproject

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

DescriptionCVE.org

The MCUmgr SMP-over-console transport decodes a base64 frame, reads a 16-bit packet length from it, verifies a CRC and then unconditionally strips the trailing CRC with rx_ctxt->nb->len -= 2U; in mcumgr_serial_process_frag() (subsys/mgmt/mcumgr/transport/src/serial_util.c). mcumgr_serial_extract_len() accepted any declared length, including 0 and 1, and a packet declaring length 0 passes the checksum test for free because crc16_itu_t() over zero bytes returns the zero seed. Since net_buf::len is a uint16_t, the subtraction underflows and the buffer is handed to SMP claiming roughly 65 KB of payload while its data area is only CONFIG_MCUMGR_TRANSPORT_NETBUF_SIZE bytes (default 384).

The trigger is a single unauthenticated 7-byte line on the management console - the 0x06 0x09 packet marker followed by the base64 group AAA= and a newline - delivered to any transport built on this helper: CONFIG_MCUMGR_TRANSPORT_UART (smp_uart.c) or CONFIG_MCUMGR_TRANSPORT_SHELL (smp_shell.c), both of which select MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE. No prior session state, fragmentation or credentials are required to trigger the underflow, and the malformed frame is mishandled before any command handler or command-level access control runs. The attacker only needs write access to that console, which on many boards is a USB CDC-ACM port rather than a bare UART header.

With the inflated length, smp_process_request_packet() in subsys/mgmt/mcumgr/smp/src/smp.c loses its bound: cbor_nb_reader_init() gives the CBOR decoder a ~65 KB window into a 384-byte buffer, and each request header's nh_len is checked only against the inflated length. On its own the 7-byte frame re-parses whatever stale bytes the reused pool buffer still holds, typically a replay of the previously received request followed by a parse error, without leaving the buffer. Because the transport is unauthenticated, though, the attacker also controls the frames sent before the trigger, and can stage buffer contents so that a request succeeds with an nh_len larger than the buffer; net_buf_pull(), guarded only by __ASSERT_NO_MSG, then moves the parse cursor out of bounds and the loop reads further headers and CBOR from adjacent memory. The consequence is an out-of-bounds read that can fault the MCUmgr thread (denial of service); memory disclosure is also possible, since the default-enabled os echo handler (CONFIG_MCUMGR_GRP_OS_ECHO) decodes its string inside that window and copies it into its response. There is no integrity gain beyond what the unauthenticated transport already permits.

The fix rejects any declared packet length of two bytes or fewer in mcumgr_serial_extract_len(), so the CRC-strip subtraction can no longer underflow. The identical pattern remains in the test-only loopback transport subsys/mgmt/mcumgr/transport/src/smp_dummy.c (CONFIG_MCUMGR_TRANSPORT_DUMMY), which has no external input path and therefore carries no practical exposure.

Threat Intelligence Overview

EPSS Score
0.1%
Top 99% exploitable
Prevalence
High
Zephyr is a widely-deployed open-source embedded RTOS across IoT/edge devices
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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available No
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
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

Priority Score

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

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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

Related Vulnerabilities in Zephyr RTOS Memory Safety and DoS Vulnerabilities

View all 3

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