Description
The MCTP-over-I2C+GPIO target binding in subsys/pmci/mctp/mctp_i2c_gpio_target.c emulates a small pseudo-register file, where the bus controller first writes a register number and then writes or reads payload bytes. The selected register (b->reg_addr) and the data-phase flag (b->rxtx) were never cleared when the controller issued an I2C STOP, so after a completed transfer the target still had a data register selected while the packet buffer that register refers to had already been consumed and set to NULL by mctp_i2c_gpio_target_stop().

A controller on the bus can re-enter the same branch of mctp_i2c_gpio_target_stop() with a NULL buffer using two ordinary transactions and no authentication: first a normal packet write to MCTP_I2C_GPIO_RX_MSG_ADDR followed by STOP (which delivers and frees b->rx_pkt), then a bare read transaction followed by STOP. The failing read_requested() call leaves the stale state untouched and the I2C driver still delivers the STOP callback, which then calls mctp_bus_rx() with a NULL packet. The symmetric case exists on the transmit side, where the stale MCTP_I2C_GPIO_TX_MSG_ADDR selection dereferences b->tx_pkt->end after b->tx_pkt has been cleared and additionally signals b->tx_complete a second time, causing the next outbound packet to be dropped.

The dereference happens in the I2C target interrupt handler, so on any target that traps accesses to address 0 the result is a fatal exception and a device reset or halt — a denial of service inflicted by any device able to act as controller on the shared management bus (for example compromised firmware on a peer MCTP endpoint or on the BMC). On parts where address 0 is readable, the impact degrades to a malformed packet buffer being handed to the MCTP stack and lost transmit packets. No attacker-controlled value is written and no confidentiality or integrity boundary is crossed.

The fix resets b->reg_addr to MCTP_I2C_GPIO_INVALID_ADDR and clears b->rxtx at every STOP, so a new register must be selected before any data phase can run again. Only builds that opt into the experimental CONFIG_MCTP subsystem with CONFIG_MCTP_I2C_GPIO_TARGET=y are affected.
Published: 2026-10-21
Score: 7.1 High
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service
Action: Patch Now
AI Analysis

Impact

The vulnerability is a NULL pointer dereference within the MCTP-over‑I2C+GPIO target binding logic of Zephyr’s MCTP subsystem. Because the internal register state is not reset after an I²C STOP, an attacker that can send packets on the shared management bus can cause the target to invoke the MCTP driver with a NULL packet. The benign read or write sequence leaves a stale register selected, leading to a fatal exception in the interrupt handler. The resulting device reset or halt merely denies service; no information is leaked or data is corrupted. The threat is limited to a local denial of service. This inference is based on the lack of any confidentiality or integrity impact described. The attacker must control a peer device on the same I²C bus; this is inferred from the statement that any device able to act as controller can trigger the flaw.

Affected Systems

This flaw affects Zephyr RTOS builds that enable the experimental MCTP I2C+GPIO target (CONFIG_MCTP subsystem with CONFIG_MCTP_I2C_GPIO_TARGET=y). All devices carrying that configuration are vulnerable, regardless of the Zephyr version, until the fix that clears the register on every stop is applied. Systems that have disabled the experimental MCTP target or are not compiling the target code are not impacted. This is inferred from the note that only builds with that config are affected.

Risk and Exploitability

The CVSS base score of 7.1 reflects medium to high severity, and the EPSS score is not available, implying the probability of exploitation may be low but not negligible. The vulnerability is not listed in CISA’s KEV catalog. Exploitation requires only two ordinary I2C transactions, no firmware or privileged access beyond control of a peer endpoint on the same I²C bus. The attacker could be a compromised firmware on a peer MCTP endpoint or a malicious BMC; this is inferred from the description that any device able to act as controller can trigger the flaw. The impact is limited to a local denial of service without leaking sensitive data.

Generated by OpenCVE AI on October 22, 2026 at 04:50 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Update Zephyr RTOS to a release containing the patch that resets the register and clears the data‑phase flag on every I²C stop condition.
  • Rebuild the target with CONFIG_MCTP_I2C_GPIO_TARGET disabled if MCTP over I²C+GPIO is not required; this removes the vulnerable code path entirely.
  • Ensure that any peer devices on the I²C bus run authenticated firmware or are isolated from the management bus; apply secure firmware updates and consider physical or logical segmentation of the bus.

Generated by OpenCVE AI on October 22, 2026 at 04:50 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 04 Nov 2026 05:15:00 +0000


Fri, 23 Oct 2026 22:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Thu, 22 Oct 2026 10:45:00 +0000

Type Values Removed Values Added
First Time appeared Zephyrproject
Zephyrproject zephyr
Vendors & Products Zephyrproject
Zephyrproject zephyr

Wed, 21 Oct 2026 18:30:00 +0000

Type Values Removed Values Added
Description The MCTP-over-I2C+GPIO target binding in subsys/pmci/mctp/mctp_i2c_gpio_target.c emulates a small pseudo-register file, where the bus controller first writes a register number and then writes or reads payload bytes. The selected register (b->reg_addr) and the data-phase flag (b->rxtx) were never cleared when the controller issued an I2C STOP, so after a completed transfer the target still had a data register selected while the packet buffer that register refers to had already been consumed and set to NULL by mctp_i2c_gpio_target_stop(). A controller on the bus can re-enter the same branch of mctp_i2c_gpio_target_stop() with a NULL buffer using two ordinary transactions and no authentication: first a normal packet write to MCTP_I2C_GPIO_RX_MSG_ADDR followed by STOP (which delivers and frees b->rx_pkt), then a bare read transaction followed by STOP. The failing read_requested() call leaves the stale state untouched and the I2C driver still delivers the STOP callback, which then calls mctp_bus_rx() with a NULL packet. The symmetric case exists on the transmit side, where the stale MCTP_I2C_GPIO_TX_MSG_ADDR selection dereferences b->tx_pkt->end after b->tx_pkt has been cleared and additionally signals b->tx_complete a second time, causing the next outbound packet to be dropped. The dereference happens in the I2C target interrupt handler, so on any target that traps accesses to address 0 the result is a fatal exception and a device reset or halt — a denial of service inflicted by any device able to act as controller on the shared management bus (for example compromised firmware on a peer MCTP endpoint or on the BMC). On parts where address 0 is readable, the impact degrades to a malformed packet buffer being handed to the MCTP stack and lost transmit packets. No attacker-controlled value is written and no confidentiality or integrity boundary is crossed. The fix resets b->reg_addr to MCTP_I2C_GPIO_INVALID_ADDR and clears b->rxtx at every STOP, so a new register must be selected before any data phase can run again. Only builds that opt into the experimental CONFIG_MCTP subsystem with CONFIG_MCTP_I2C_GPIO_TARGET=y are affected.
Title NULL pointer dereference in the MCTP I2C+GPIO target binding triggerable by a peer I2C controller
Weaknesses CWE-476
References
Metrics cvssV3_1

{'score': 7.1, 'vector': 'CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H'}


Subscriptions

Zephyrproject Zephyr
cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-11-04T05:01:22.440Z

Reserved: 2026-08-25T16:06:27.086Z

Link: CVE-2026-79976

cve-icon Vulnrichment

Updated: 2026-10-23T20:43:15.618Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-21T19:17:04.060

Modified: 2026-11-04T05:19:02.493

Link: CVE-2026-79976

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-22T10:30:04Z

Weaknesses