This is a trapdoor inside a locked machine room, not a broken front door
CVE-2026-0029 is a memory-corruption bug in Android's protected KVM hypervisor path, specifically __pkvm_init_vm in pkvm.c, caused by a logic error around pVM creation. Google fixed it in the March 2, 2026 Android Security Bulletin, and devices at security patch level 2026-03-05 or later are addressed. In practice, the affected population is narrower than "all Android" because the vulnerable path depends on AVF/pKVM support, protected-VM creation, and relevant common-kernel branches where Google landed the fix commits.
Google's HIGH 8.4 score is technically defensible in a lab because hypervisor memory corruption can be devastating on a single device. In enterprise reality, that label overshoots: the bug is local-only, sits behind Android's virtualization stack, and the VM APIs are restricted rather than broadly exposed to arbitrary third-party apps. That makes this a post-compromise, feature-gated EoP, not a fleet-wide emergency.
4 steps from start to impact.
Get code running on the device
- Local code execution on the Android device
- A target device that is not already at security patch level
2026-03-05or later
- Requires a prior compromise stage or physical/developer access
- Managed enterprise Android fleets often block sideloading, keep Developer Options off, and monitor adb use
Reach the AVF/pKVM VM-creation path
__pkvm_init_vm, the attacker has to drive Android's virtualization stack using the AVF interfaces, such as VirtualMachineManager / android.system.virtualmachine APIs or equivalent tooling around VM creation. Google's own AVF documentation states these APIs are @SystemApi and require the restricted android.permission.MANAGE_VIRTUAL_MACHINE permission, which is not available to ordinary third-party apps.- Device supports Android Virtualization Framework
- Access to
MANAGE_VIRTUAL_MACHINEor equivalent privileged/preinstalled app context
- Third-party apps do not get these APIs by default
- On Android 14 this permission was limited to privileged apps; on Android 15 it is available to preinstalled apps, not arbitrary downloaded apps
android.permission.MANAGE_VIRTUAL_MACHINE, especially OEM, enterprise, and preloaded software. Standard vuln scanners usually only report patch level here.Trigger malformed protected-VM initialization
- ARM64 device with protected VMs supported
- pKVM enabled and protected-VM creation actually reachable
- AVF is limited to ARM64 for protected VMs; Google's docs note x86_64 support is non-protected only
- Some supported devices or builds ship AVF/pKVM disabled or not enabled by default
logcat, dmesg, and bugreports. There is no reliable remote scanner signature.Convert corruption into local EoP
- A reliable exploitation primitive from the memory corruption
- Bypasses for normal Android hardening and device-specific variability
- No public exploit, Metasploit module, or mainstream GitHub PoC found
- Blast radius is one device at a time, not a remotely reachable fleet service
The supporting signals.
| In-the-wild status | No public evidence of active exploitation found for CVE-2026-0029. Google's March 2026 bulletin called out CVE-2026-21385 for limited targeted exploitation, not this CVE. |
|---|---|
| Public PoC availability | No public GitHub, Exploit-DB, or Metasploit PoC located in authoritative search results. That materially lowers near-term operational risk. |
| EPSS | 0.00007 from the user-supplied intel block — effectively negligible predicted exploitation probability. |
| KEV status | Not listed in CISA's Known Exploited Vulnerabilities Catalog. |
| CVSS vector reality check | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H correctly reflects local attack vector, but it still assumes the vulnerable path is broadly reachable once local code exists. In reality, AVF/pKVM and restricted VM permissions sharply narrow reachability. |
| Affected scope | Android devices before security patch level 2026-03-05 where the pKVM/AVF protected-VM path is present and usable. This is not a generic internet-facing Android flaw. |
| Fixed versions / backports | Google states security patch levels 2026-03-05 or later address all issues in the March 2026 bulletin. NVD references patch commits in Android common-kernel branches: ae242b2637, 42eff3b2fd, and 749cf1743e. |
| Exposure / scanning data | Shodan/Censys/FOFA-style exposure counting is largely not applicable because this is a local hypervisor path, not a remotely fingerprintable service. The practical inventory question is which managed devices support AVF/pKVM and expose VM creation to trusted apps. |
| Feature gate | Google's AVF docs say the virtualization APIs are @SystemApi and require restricted android.permission.MANAGE_VIRTUAL_MACHINE; protected VMs are an ARM64 capability, while x86_64 support is non-protected only. |
| Disclosure / reporter | Disclosed 2026-03-02. The fix commit attributes the bug report to Martijn Bogaard (Google). |
noisgate verdict.
The decisive factor is reachability friction: this is a local-only bug that also depends on AVF/pKVM support and access to restricted VM-creation APIs. That makes it a serious single-device post-compromise escalation path, but not the kind of broad fleet emergency implied by a generic HIGH kernel-memory-corruption label.
Why this verdict
- Start at vendor 8.4: hypervisor-adjacent memory corruption can absolutely be catastrophic on one device if exploited cleanly.
- Down for attacker position: the bug requires local code execution, which means it is not an initial-access problem and already assumes a prior compromise stage.
- Down for exposure population: only devices with AVF/pKVM protected-VM support can reach this path; this is a subset of Android, not the full handset estate.
- Down for permission gating: Google's AVF APIs require restricted
MANAGE_VIRTUAL_MACHINE; ordinary third-party apps do not get that by default. - Keep it above LOW: if the prerequisites line up, the impact is still kernel/hypervisor-level privilege escalation on a managed endpoint.
Why not higher?
It is not higher because every prerequisite compounds downward pressure: local code execution, AVF support, protected-VM support, and restricted VM permissions. That stack of assumptions means most real devices and most malicious apps will never reach the vulnerable function, even before you ask whether the memory corruption is reliably weaponizable.
Why not lower?
It is not lower because the underlying defect sits in a highly privileged kernel/hypervisor path and can plausibly become full device compromise where reachable. Enterprises that deploy preinstalled virtualization-aware apps, custom AVF workloads, or developer-enabled Android fleets still have a meaningful risk concentration.
What to do — in priority order.
- Audit VM-creation permission holders — Enumerate apps holding
android.permission.MANAGE_VIRTUAL_MACHINEand remove or constrain any that are not explicitly required. For a MEDIUM verdict there is no noisgate mitigation SLA, but do this during normal hardening work so you reduce the reachable population before patch completion. - Prioritize AVF-capable cohorts — Segment managed Android devices by AVF/pKVM capability and Android security patch level, then focus remediation on ARM64 devices with virtualization support and preinstalled enterprise/OEM apps that can create VMs. This narrows the actual vulnerable population instead of treating the whole mobile fleet as equally exposed.
- Keep Developer Options and adb tightly controlled — Because AVF permissions can be granted for development workflows, lock down adb authorization, USB debugging, and lab-only build practices on production devices. For MEDIUM, there is no mitigation SLA — go straight to the patching program while keeping developer pathways out of production.
- Block unapproved sideloading — This CVE still needs local code on the device first, so app allowlisting, enterprise app stores, Play Protect, and sideload restrictions remain valuable upstream controls. They do not fix the bug, but they reduce the chance an attacker ever reaches the pKVM path.
- A WAF, IPS, or email gateway does not help; this is not a remotely exposed web or protocol flaw.
- Pure network segmentation does not solve a local Android kernel/hypervisor bug once code is already on-device.
- Relying on Play Protect alone is not enough if your own preinstalled or privileged app can legitimately create VMs; the permission model is the real reachability gate.
Crowdsourced verification payload.
Run this on the target Android device via adb shell, or push it to /data/local/tmp and invoke it as adb shell sh /data/local/tmp/check-cve-2026-0029.sh. It needs only normal shell access; no root is required. Example: adb shell sh /data/local/tmp/check-cve-2026-0029.sh.
#!/system/bin/sh
# check-cve-2026-0029.sh
# Determine likely exposure to CVE-2026-0029 on an Android device.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
TARGET_SPL="2026-03-05"
get_spl() {
getprop ro.build.version.security_patch 2>/dev/null
}
get_arch64() {
getprop ro.product.cpu.abilist64 2>/dev/null
}
has_avf_feature() {
cmd package list features 2>/dev/null | grep -q 'android.software.virtualization_framework'
}
has_virt_apex() {
pm path com.android.virt >/dev/null 2>&1
}
version_ge() {
# Compares YYYY-MM-DD strings lexicographically.
# Returns 0 if $1 >= $2
[ "$1" = "$2" ] && return 0
[ "$1" \> "$2" ] && return 0
return 1
}
SPL="$(get_spl)"
ARCH64="$(get_arch64)"
AVF=0
VIRT_APEX=0
if has_avf_feature; then
AVF=1
fi
if has_virt_apex; then
VIRT_APEX=1
fi
if [ -z "$SPL" ]; then
echo "UNKNOWN: unable to read Android security patch level"
exit 2
fi
# Patched by Android SPL regardless of applicability.
if version_ge "$SPL" "$TARGET_SPL"; then
echo "PATCHED: security patch level $SPL >= $TARGET_SPL"
exit 0
fi
# Below patch level: now check whether the vulnerable path is plausibly reachable.
case "$ARCH64" in
*arm64*) ARM64=1 ;;
*) ARM64=0 ;;
esac
if [ "$ARM64" -eq 0 ]; then
echo "PATCHED: device is not ARM64-capable for protected VM path (SPL $SPL is old, but pKVM protected-VM exposure is unlikely)"
exit 0
fi
if [ "$AVF" -eq 1 ] || [ "$VIRT_APEX" -eq 1 ]; then
echo "VULNERABLE: SPL $SPL < $TARGET_SPL and device appears to support Android virtualization"
exit 1
fi
echo "UNKNOWN: SPL $SPL is older than $TARGET_SPL, but AVF/pKVM support could not be confirmed from shell"
exit 2
If you remember one thing.
MANAGE_VIRTUAL_MACHINE; then patch those devices to Android security patch level 2026-03-05 or later inside the noisgate remediation SLA for MEDIUM issues, which is ≤ 365 days. There is no noisgate mitigation SLA — go straight to the 365-day remediation window, but you should still use normal hardening this week to reduce reachability by stripping unnecessary VM permissions, keeping adb/developer workflows out of production, and prioritizing the smaller virtualization-capable cohort instead of the full fleet.Sources
- Android Security Bulletin—March 2026
- NVD entry for CVE-2026-0029
- Android common-kernel patch commit ae242b26371808a221578b89c937568781719d2c
- Android common-kernel patch commit 42eff3b2fd3a906ac8cdb6284d3265bc0856b56b
- Android common-kernel patch commit 749cf1743eb22eff1851c68a533147e1af97a9bf
- Android Virtualization Framework API README
- AVF architecture documentation
- CISA Known Exploited Vulnerabilities Catalog
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.