CVE-2015-3214
NoneCVSS
—
EPSS
1.6%
Published
Aug 31, 2015
CISA due date
—
Cloudanix analysis
An old bug in software that runs virtual machines could let one virtual machine break out and take over the entire computer it is running on.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Full Compromise
- Component
- OS kernel
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The pit_ioport_read function fails to separate read and write length handling and accepts an invalid index into internal state structures, resulting in out-of-bounds memory access that can be leveraged for code execution in the host context.
Why it matters to the business
In virtualized or cloud environments running unpatched kernels or QEMU, a compromised or malicious guest can fully take over the host system, exposing all other guests, data, and infrastructure to attacker control; the flaw has been public for many years with working exploits available, though most modern deployments have already applied fixes.
How an attack unfolds
An attacker with code execution inside a guest OS crafts I/O port accesses to the emulated 8254 PIT timer that supply mismatched read/write lengths and an invalid index; this triggers the flawed path in the host-side emulation code, corrupting memory and allowing the attacker to execute arbitrary code with host privileges.
How to fix it
Upgrade the Linux kernel to version 2.6.33 or later and QEMU to 2.3.1 or later; apply all vendor-supplied backports for the specific distributions listed in the affected products; where upgrades are impossible, isolate untrusted guests on dedicated hosts and disable unnecessary I/O port exposure.
How to confirm the fix worked
Verify that running kernel and QEMU binaries are at or above the fixed versions; confirm the vulnerable i8254.c code path is no longer present by inspecting source or package changelogs; re-test guest-to-host isolation with known proof-of-concept I/O sequences if available in a lab environment.
Typical attack path
- Gain code execution inside a guest virtual machine
- Issue crafted I/O port reads/writes against the PIT device
- Trigger use of an invalid index in pit_ioport_read
- Achieve out-of-bounds read/write in host memory
- Escalate to arbitrary code execution on the host
How to detect it
Review hypervisor and kernel logs for unusual PIT I/O port activity originating from guests; look for process crashes or memory-corruption indicators inside QEMU or KVM worker processes shortly after guest I/O operations; correlate guest-initiated timer-port accesses with subsequent host-side anomalies.
What your security team should do
- Immediately inventory all systems running QEMU or Linux kernels older than the fixed versions
- Prioritize patching of any internet-facing or multi-tenant virtualization hosts
- Remove or tightly restrict guest access to PIT I/O ports where feasible
- Monitor EPSS and exploit-availability feeds for any resurgence in interest
The record
The pit_ioport_read in i8254.c in the Linux kernel before 2.6.33 and QEMU before 2.3.1 does not distinguish between read lengths and write lengths, which might allow guest OS users to execute arbitrary code on the host OS by triggering use of an invalid index.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Debian:11 | qemu | 0 | 1:2.4+dfsg-1a |
| Debian:11 | xen | 0 | 4.4.0-1 |
| Debian:12 | qemu | 0 | 1:2.4+dfsg-1a |
| Debian:12 | xen | 0 | 4.4.0-1 |
| Debian:13 | qemu | 0 | 1:2.4+dfsg-1a |
| Debian:13 | xen | 0 | 4.4.0-1 |
| Debian:8 | qemu | 0 | 1:2.1+dfsg-12+deb8u2 |
| Mageia:4 | qemu | 0 | 1.6.2-1.12.mga4 |
| Mageia:5 | qemu | 0 | 2.1.3-2.3.mga5 |
| Red Hat:enterprise_linux:7::client | libcacard | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::client | libcacard-devel | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::client | libcacard-tools | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::client | qemu-img | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::client | qemu-kvm | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::client | qemu-kvm-common | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::client | qemu-kvm-debuginfo | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::client | qemu-kvm-tools | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::computenode | libcacard | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::computenode | libcacard-devel | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::computenode | libcacard-tools | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::computenode | qemu-img | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::computenode | qemu-kvm | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::computenode | qemu-kvm-common | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::computenode | qemu-kvm-debuginfo | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::computenode | qemu-kvm-tools | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::hypervisor | libcacard-devel-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:enterprise_linux:7::hypervisor | libcacard-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:enterprise_linux:7::hypervisor | libcacard-tools-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:enterprise_linux:7::hypervisor | qemu-img-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:enterprise_linux:7::hypervisor | qemu-kvm-common-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:enterprise_linux:7::hypervisor | qemu-kvm-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:enterprise_linux:7::hypervisor | qemu-kvm-rhev-debuginfo | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:enterprise_linux:7::hypervisor | qemu-kvm-tools-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:enterprise_linux:7::server | libcacard | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::server | libcacard-devel | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::server | libcacard-tools | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::server | qemu-img | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::server | qemu-kvm | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::server | qemu-kvm-common | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::server | qemu-kvm-debuginfo | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::server | qemu-kvm-tools | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::workstation | libcacard | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::workstation | libcacard-devel | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::workstation | libcacard-tools | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::workstation | qemu-img | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::workstation | qemu-kvm | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::workstation | qemu-kvm-common | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::workstation | qemu-kvm-debuginfo | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:enterprise_linux:7::workstation | qemu-kvm-tools | 0 | 10:1.5.3-86.el7_1.5 |
| Red Hat:openstack:5::el7 | libcacard-devel-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:5::el7 | libcacard-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:5::el7 | libcacard-tools-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:5::el7 | qemu-img-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:5::el7 | qemu-kvm-common-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:5::el7 | qemu-kvm-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:5::el7 | qemu-kvm-rhev-debuginfo | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:5::el7 | qemu-kvm-tools-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:6::el7 | libcacard-devel-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:6::el7 | libcacard-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:6::el7 | libcacard-tools-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:6::el7 | qemu-img-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:6::el7 | qemu-kvm-common-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:6::el7 | qemu-kvm-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:6::el7 | qemu-kvm-rhev-debuginfo | 0 | 10:2.1.2-23.el7_1.6 |
| Red Hat:openstack:6::el7 | qemu-kvm-tools-rhev | 0 | 10:2.1.2-23.el7_1.6 |
| SUSE:Linux Enterprise Desktop 12 | qemu | 0 | 2.0.2-48.19.1 |
| SUSE:Linux Enterprise Server 11 SP3-LTSS | kvm | 0 | 1.4.2-46.1 |
| SUSE:Linux Enterprise Server 11 SP3-TERADATA | kvm | 0 | 1.4.2-46.1 |
| SUSE:Linux Enterprise Server 11 SP4 | kvm | 0 | 1.4.2-44.1 |
| SUSE:Linux Enterprise Server 12 | qemu | 0 | 2.0.2-48.19.1 |
| SUSE:Linux Enterprise Server for SAP Applications 11 SP4 | kvm | 0 | 1.4.2-44.1 |
| SUSE:Linux Enterprise Server for SAP Applications 12 | qemu | 0 | 2.0.2-48.19.1 |
| Ubuntu:14.04:LTS | qemu | 0 | 2.0.0+dfsg-2ubuntu1.15 |
Related vulnerabilities
- CVE-2024-7730 A heap buffer overflow was found in the virtio-snd device in QEMU. Also affects qemu
- CVE-2024-3447 A heap-based buffer overflow was found in the SDHCI device emulation of QEMU. Also affects qemu
- CVE-2024-6519 A use-after-free vulnerability was found in the QEMU LSI53C895A SCSI Host Bus Adapter… Also affects qemu
- CVE-2024-8612 A flaw was found in QEMU, in the virtio-scsi, virtio-blk, and virtio-crypto devices. Also affects qemu
- CVE-2024-8354 A flaw was found in QEMU. Also affects qemu
- CVE-2024-7409 A flaw was found in the QEMU NBD Server. Also affects qemu
- CVE-2024-6505 A flaw was found in the virtio-net device in QEMU. Also affects qemu
- CVE-2024-4467 A flaw was found in the QEMU disk image utility (qemu-img) 'info' command. Also affects qemu