Description
The Zephyr virtio driver does not validate the descriptor-chain head id that the virtio device writes into the used ring. In virtio_isr() (drivers/virtio/virtio_common.c), the device-written vq->used->ring[idx].id is used directly as an index into vq->recv_cbs[] and vq->desc[], which are both allocated with exactly vq->num entries. recv_cbs[] holds {cb, opaque} callback entries, and the indexed callback pointer is then invoked as cbe.cb(cbe.opaque, used_len).

Because the id is consumed as a 16-bit value with no bound check, a malicious or compromised virtio backend (an untrusted hypervisor, or an untrusted hardware/peer-processor virtio device on a PCI or MMIO transport) can supply an id far beyond vq->num. This causes an out-of-bounds read of a {function pointer, argument} pair from heap memory beyond recv_cbs[], after which the driver calls that attacker-shaped pointer in the guest's interrupt context. No guest privileges or user interaction are required; the backend triggers it by writing the shared used ring and raising the queue interrupt.

The result is an arbitrary / attacker-influenced function-pointer call in the Zephyr guest, i.e. a control-flow-hijack primitive that can lead to code execution or, at minimum, a reliable crash. The fix rejects any used-ring id >= vq->num before indexing recv_cbs[]/desc[] or invoking the callback. This affects builds using CONFIG_VIRTIO with the PCI or MMIO transport.
Published: 2026-08-24
Score: 8.8 High
EPSS: < 1% Very Low
KEV: No
Impact: Arbitrary Code Execution in Zephyr guest via control‑flow hijack
Action: Immediate Patch
AI Analysis

Impact

The Zephyr virtio driver does not validate the descriptor‑chain head id that the virtio device writes into the used ring. This id is taken as a 16‑bit value with no bounds checking and is used directly as an index into callback and descriptor arrays. An attacker able to write an out‑of‑range id can cause an out‑of‑bounds read of a function‑pointer/argument pair from heap memory; the driver then invokes that attacker‑supplied pointer in the guest interrupt context. This flaw provides a control‑flow‑hijack primitive that can lead to arbitrary code execution or a guaranteed crash, representing a high‑severity function‑pointer misuse vulnerability (CWE‑129).

Affected Systems

The issue affects Zephyr builds that enable CONFIG_VIRTIO and use the PCI or MMIO virtio transports. The vulnerability exists in any version containing the unpatched virtio_common implementation; no specific version range is published, so all builds with this configuration are considered vulnerable until the official patch is applied.

Risk and Exploitability

With a CVSS score of 8.8 the flaw is deemed high severity. The EPSS score is not available, and it is not listed in the CISA KEV catalog. The attack can be carried out by an untrusted hypervisor or a compromised virtio backend on PCI or MMIO transports; no guest‑side privileges or user interaction are required. By writing a crafted used‑ring id and raising the queue interrupt, an attacker can easily trigger the control‑flow hijack, giving execution in the guest with kernel‑like privileges of the virtio driver.

Generated by OpenCVE AI on August 24, 2026 at 19:42 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade to a Zephyr release that includes the virtio_common patch rejecting used‑ring ids >= vq->num.
  • Rebuild your Zephyr system with the latest source containing the fix, ensuring that CONFIG_VIRTIO is enabled for PCI or MMIO transports.
  • Confirm that any hypervisor or virtio backend interacting with your Zephyr build enforces descriptor bounds or is updated to a compatible version to prevent malicious id injection.

Generated by OpenCVE AI on August 24, 2026 at 19:42 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 24 Aug 2026 21:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

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


Mon, 24 Aug 2026 17:45:00 +0000

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

Mon, 24 Aug 2026 16:00:00 +0000

Type Values Removed Values Added
Description The Zephyr virtio driver does not validate the descriptor-chain head id that the virtio device writes into the used ring. In virtio_isr() (drivers/virtio/virtio_common.c), the device-written vq->used->ring[idx].id is used directly as an index into vq->recv_cbs[] and vq->desc[], which are both allocated with exactly vq->num entries. recv_cbs[] holds {cb, opaque} callback entries, and the indexed callback pointer is then invoked as cbe.cb(cbe.opaque, used_len). Because the id is consumed as a 16-bit value with no bound check, a malicious or compromised virtio backend (an untrusted hypervisor, or an untrusted hardware/peer-processor virtio device on a PCI or MMIO transport) can supply an id far beyond vq->num. This causes an out-of-bounds read of a {function pointer, argument} pair from heap memory beyond recv_cbs[], after which the driver calls that attacker-shaped pointer in the guest's interrupt context. No guest privileges or user interaction are required; the backend triggers it by writing the shared used ring and raising the queue interrupt. The result is an arbitrary / attacker-influenced function-pointer call in the Zephyr guest, i.e. a control-flow-hijack primitive that can lead to code execution or, at minimum, a reliable crash. The fix rejects any used-ring id >= vq->num before indexing recv_cbs[]/desc[] or invoking the callback. This affects builds using CONFIG_VIRTIO with the PCI or MMIO transport.
Title Zephyr virtio driver calls an arbitrary function pointer from an out-of-range used-ring descriptor id
Weaknesses CWE-129
References
Metrics cvssV3_1

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


Subscriptions

Zephyrproject Zephyr
cve-icon MITRE

Status: PUBLISHED

Assigner: zephyr

Published:

Updated: 2026-08-24T20:19:35.081Z

Reserved: 2026-06-24T15:29:15.274Z

Link: CVE-2026-13212

cve-icon Vulnrichment

Updated: 2026-08-24T20:19:30.158Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-08-24T16:16:55.393

Modified: 2026-08-26T16:59:23.267

Link: CVE-2026-13212

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-24T19:45:03Z

Weaknesses
  • CWE-129

    Improper Validation of Array Index