Skip to main content

Zephyr MCTP CVE-2026-85032

| EUVDEUVD-2026-115820 MEDIUM
Use After Free (CWE-416)
2026-11-03 zephyr
4.8
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Access
    Attach malicious USB host to device
  2. Delivery
    Stream partial MCTP frames on bulk OUT endpoint
  3. Exploit
    Force SET_CONFIGURATION or bus reset
  4. Execution
    Trigger disable while RX worker runs
  5. Persist
    Worker writes bytes into freed MCTP heap
  6. Impact
    Heap corruption or NULL-deref device fault

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory lifecycle management
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Privilege Escalation

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

Exploitation Conditions

Requires a device built with the experimental CONFIG_MCTP_USB class (MCTP subsystem is marked EXPERIMENTAL and compiled only with this option), and the attacker must be the USB host physically attached to the bulk OUT endpoint (AV:P). Exploitation is a race: the host drives both entry points into mctp_usb_class_disable() (SET_CONFIGURATION and USB bus reset via usbd_config_reset()) to time teardown against the RX worker. The instruction-level use-after-free WRITE window additionally requires genuine parallelism - CONFIG_SMP or a preemptible CONFIG_SYSTEM_WORKQUEUE_PRIORITY - whereas the kernel default is cooperative (priority -1). Under that default cooperative workqueue only the NULL-dereference crash variant is reachable (the worker must yield inside mctp_bus_rx() via an application callback or a control-message reply blocking in mctp_usb_tx()), and that fault only manifests on targets with null-pointer detection. No credentials or user interaction are needed. Affected versions are >=4.4.0, <4.5.0; the only complete fix per the vendor is updating to 4.5.0 or taking the backport.

Impact

This is a genuine but low-urgency issue, correctly rated moderate (CVSS 4.8) rather than critical. The strongest limiting signal is the CVSS attack vector AV:P (physical): the attacker must be the USB host physically attached to the Zephyr device, which rules out remote/network exploitation entirely. AC:H reflects that this is a use-after-free race (CWE-416) requiring the attacker to win a timing window between the RX worker and the host-triggered disable handler. Impact is bounded - C:N (no confidentiality impact established), I:L, A:H - consistent with the reporter's own conclusion that the PoC demonstrates memory corruption and denial-of-service but does NOT establish RCE or arbitrary read/write. No CISA KEV listing and no EPSS score are provided, so there is no evidence of active or widespread exploitation; the vuln.today Decision label is 'this_month', not act_now/emergency. A public PoC exists but was dynamically confirmed only on the native_sim virtual-USB path (Zephyr v4.4.2); the reporter explicitly notes real-hardware reproduction is unverified and a 1,000-iteration virtual SET_CONFIGURATION stress test did not crash. Conflict to note: the 'Information Disclosure' tag is not supported by the evidence - the CVSS vector and the reporter both indicate C:N with no arbitrary read demonstrated. Net: a real bug worth patching within the vendor's monthly cadence, but its physical attack vector plus experimental, opt-in subsystem status make it far lower real-world priority than its CWE class alone would suggest.

Exploit ScenarioDerived

An attacker who can attach a malicious USB host to a Zephyr device built with the experimental CONFIG_MCTP_USB class streams partial MCTP frames on the bulk OUT endpoint while repeatedly issuing SET_CONFIGURATION requests or forcing USB bus resets, so the host controls both the data being parsed and the moment the teardown runs and can retry the race indefinitely. If the free in mctp_usb_reset_rx_state() lands while the RX worker still holds usb->rx_pkt, the worker writes host-supplied bytes into freed MCTP-heap memory (corrupting recycled buffers or sys_heap metadata); with the default cooperative workqueue the worker instead resumes after a yield and dereferences the NULLed pointer, faulting the device. A public PoC exists demonstrating the race on the native_sim virtual-USB path, but real-hardware exploitation is not verified.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

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

Alert me

AnalysisAIv1 – Nov 03, 2026

A use-after-free in Zephyr's MCTP over USB device class lets a physically attached USB host race class teardown against the RX parsing worker, freeing the packet buffer at usb->rx_pkt while the worker still writes host-supplied bytes through it. Only builds of Zephyr 4.4.0 through 4.4.x (fixed in 4.5.0) that enable the experimental CONFIG_MCTP_USB binding are affected; the host needs no credentials or user interaction but must control the bulk OUT endpoint and the SET_CONFIGURATION/bus-reset timing. A public PoC reference exists and was reproduced on native_sim, but it is not verified as working exploit code on real USB hardware, natural-hardware trigger probability remains unverified, and no active exploitation is confirmed.

RemediationAI

Update to Zephyr 4.5.0, which contains the complete fix: commit 277424084e740da5d61a17f40bea3457fa593acc on main (PR #117659) replaces k_work_cancel() with k_work_cancel_sync() plus a new struct k_work_sync out_work_sync, so disable waits for the RX worker to finish before draining the FIFO and freeing the packet buffer. Users staying on the 4.4 line must take the merged v4.4-branch backport (PR #118949, https://github.com/zephyrproject-rtos/zephyr/pull/118949); updating or backporting is the only complete fix per the vendor advisory (https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-pp5m-jr2h-qp3f). Where updating is not immediately possible, removing the attack surface by building without CONFIG_MCTP_USB eliminates the affected binding entirely, at the cost of losing MCTP-over-USB functionality; no other workaround is described in the available sources, and this issue is rated for handling in the current monthly patch cycle rather than as an emergency.

Affected VersionsENISA

Zephyr 4.4.0 <4.5.0

Affected Packages

euvd zephyr fix: 4.5.0

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

The flaw is a classic CWE-416 use-after-free caused by missing synchronization between a free path and a still-running work handler, not by any parsing bug in the MCTP protocol itself. In subsys/pmci/mctp/mctp_usb.c the RX path runs in two threads: mctp_usb_class_out_work() executes on the system workqueue and parses host OUT bytes one at a time into usb->rx_pkt->data[usb->rx_data_idx++], while mctp_usb_class_disable() runs on the USB device stack thread (usbd thread at K_PRIO_COOP(8)) and previously used only the non-blocking k_work_cancel(), which dequeues pending work but does not wait for a handler already executing. The disable path then calls mctp_usb_reset_rx_state(), which invokes mctp_pktbuf_free() and NULLs the shared pointer. Because freed buffers return to a small dedicated sys_heap (CONFIG_MCTP_HEAP_SIZE, default 2048 in subsys/pmci/mctp/mctp_memory.c) that recycles chunks and stores free-list metadata in-band, a stale write corrupts recycled objects or heap metadata; the instruction-level write window requires genuine parallelism (CONFIG_SMP or a preemptible CONFIG_SYSTEM_WORKQUEUE_PRIORITY, whose kernel default is the cooperative -1). With the default cooperative workqueue only the crash variant is reachable: the worker yields inside mctp_bus_rx() (application callback, or a control-message reply blocking in mctp_usb_tx()), resumes, and calls mctp_pktbuf_free(usb->rx_pkt) on a pointer the teardown NULLed, and libmctp's mctp_pktbuf_free() dereferences pkt->alloc without a NULL check, so this faults only on targets with null-pointer detection. The USB device stack (device_next) drives both disable entry points from the host: SET_CONFIGURATION in usbd_ch9.c and bus reset in usbd_core.c both funnel through usbd_config_set()/usbd_config_reset(), giving the attacker control of both the parsed data and the teardown instant.

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

AV:P because the attacker must be the attached USB host; AC:H as exploitation is a host-timed race needing SMP/preemption or a worker yield; PR:N/UI:N per the host-driven path; C:N since no read is established, I:L/A:H for heap corruption and crash.

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

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

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

DescriptionCVE.org

The MCTP over USB device class in subsys/pmci/mctp/mctp_usb.c splits RX handling across two threads: the system workqueue runs mctp_usb_class_out_work(), which parses host OUT data byte by byte and fills a packet buffer at usb->rx_pkt, while the USB device stack thread runs mctp_usb_class_disable(). The disable handler used k_work_cancel(), which removes a queued work item but returns immediately without waiting for a handler that is already running, and then called mctp_usb_reset_rx_state() to mctp_pktbuf_free() the packet buffer the worker may still be using.

Both entry points into mctp_usb_class_disable() are driven by the attached USB host: a SET_CONFIGURATION request and a USB bus reset both reach it via usbd_config_reset() in subsys/usb/device_next/usbd_config.c. A host that streams partial MCTP frames on the bulk OUT endpoint and repeatedly forces a configuration change or bus reset therefore controls both the data being parsed and the moment the teardown runs, and can retry the race indefinitely without credentials or user interaction.

If the free lands while the worker holds the pointer, the worker writes host-supplied bytes into freed memory of the dedicated MCTP heap (CONFIG_MCTP_HEAP_SIZE in subsys/pmci/mctp/mctp_memory.c), corrupting recycled buffers or sys_heap free-block metadata; this window requires genuine parallelism, i.e. CONFIG_SMP or a preemptible CONFIG_SYSTEM_WORKQUEUE_PRIORITY. With the default cooperative workqueue the worker can still yield inside mctp_bus_rx() (application callback or a control-message reply blocking in mctp_usb_tx()), after which it resumes and calls mctp_pktbuf_free(usb->rx_pkt) on a pointer the teardown has NULLed, dereferencing NULL and faulting on targets with null-pointer detection.

The fix replaces the cancel with k_work_cancel_sync() plus a new struct k_work_sync out_work_sync, so disable waits for the RX worker to finish before draining the FIFO and freeing the packet buffer. The affected code is the MCTP subsystem, which is marked experimental, built only with CONFIG_MCTP_USB.

Threat Intelligence Overview

Prevalence
Rare
experimental opt-in MCTP-over-USB subsystem, niche platform-management configuration
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org Vulnrichment GitHub

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 N/A
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
Defer
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Use-after-free vulnerabilities occur when a program continues to access memory through a pointer after that memory has been deallocated.

Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.

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

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