This is a pickpocket inside the elevator, not a burglar at the front gate
CVE-2026-0025 is an Android Framework information-disclosure bug in Notification.java's hasImage() handling, disclosed on 2026-03-02. Google lists affected AOSP versions as Android 14, 15, 16, and 16-qpr2 in the 2026-03-01 patch level. From the AOSP fix, the issue appears tied to overly permissive parsing of EXTRA_MESSAGES / messaging-style notification content, where unexpected parcelable content could cross permission boundaries during notification processing and expose data across Android users or profiles.
Google's HIGH 8.4 score is technically defensible in a lab because the bug can yield high-impact local compromise on a device with no user interaction once malicious code is running. In enterprise reality, though, the decisive friction is attacker position: this starts with local code execution on the handset, which usually means a malicious app is already installed or an adversary already has code running on-device. That makes it a post-initial-access mobile containment failure, not an internet-scale patch emergency.
4 steps from start to impact.
Land code on the device with a malicious app
- Target runs Android 14, 15, 16, or 16-qpr2 and is below the 2026-03-01 security patch level
- Attacker can get an app installed and executed on the device
- Managed enterprise Android fleets commonly block sideloading and enforce managed Play distribution
- Google Play Protect and MDM app allow-listing should stop a large share of commodity delivery attempts
- This prerequisite already implies a prior control failure or user compromise
Craft hostile notification messaging extras
EXTRA_MESSAGES or related fields, based on the AOSP patch replacing broad Parcelable handling with stricter Bundle parsing. The included test case shows attention to content-URI handling and avoidance of unintended URI permission behavior while parsing notification message arrays.- Attacker app can post or build notifications using framework APIs
- Target framework still accepts the vulnerable content shape
- The exploit path is narrow and tied to a specific framework parsing path, not a generic arbitrary-code primitive
- Reverse-engineering the exact reliable payload still takes Android internals work
Bypass profile or cross-user boundaries
hasImage() / messaging path may traverse data it should not and disclose information across Android users or profiles. In enterprise terms, the interesting risk is leakage between personal and work contexts on the same handset rather than broad fleet-wide compromise.- Relevant cross-user, work-profile, or multi-user data exists on the device
- The vulnerable parsing path reaches protected notification-related content
- Many enterprise deployments have limited true multi-user usage on phones
- Blast radius is generally a single device and its local profiles, not lateral movement across the estate
Exfiltrate locally exposed data
- Attacker app can read the exposed data
- App has outbound network access or another exfiltration channel
- Outbound filtering, VPN-based mobile inspection, or MTD can still flag suspicious exfiltration
- Stolen data volume is limited by what the vulnerable path actually exposes
The supporting signals.
| In-the-wild status | No evidence found that CVE-2026-0025 is being actively exploited. Google's March 2026 bulletin calls out limited targeted exploitation for CVE-2026-21385, not this CVE. |
|---|---|
| KEV status | Not listed in CISA's Known Exploited Vulnerabilities catalog as checked against the catalog and CVE-specific search results. |
| EPSS | 0.00004 from the supplied intel, which is effectively floor-level probability and consistent with a niche local Android exploit path. |
| Proof-of-concept availability | No public weaponized PoC was identified in reviewed primary sources. The public AOSP patch and test case do reduce reverse-engineering cost for capable Android researchers. |
| CVSS and what it really means | CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H scores high because once code is local, the path is easy and impactful. The key downgrade factor is AV:L on a mobile endpoint: the attacker must already be on the phone. |
| Affected versions | Google's CVE record and March 2026 Android bulletin mark Android 14, 15, 16, and 16-qpr2 as affected. |
| Fixed versions / patch levels | Addressed in the Android Security Bulletin 2026-03-01 patch level. Devices at security patch level 2026-03-01 or later include this fix; 2026-03-05 also includes it because that level supersedes earlier March fixes. |
| Scanning / exposure data | Shodan/Censys/GreyNoise-style exposure metrics are not meaningful here. This is a local OS framework bug, not a remotely reachable network service. |
| Disclosure date | 2026-03-02 via Google's Android Security Bulletin and Android CNA publication. |
| Patch provenance | AOSP fix is public in commit 014dea279c49..., which tightens notification message parsing from broad Parcelable arrays to stricter Bundle handling. |
noisgate verdict.
The single biggest reality check is that exploitation requires local code already running on the Android device. That makes this a post-install, single-endpoint containment issue with narrow blast radius, not a perimeter-grade emergency despite the vendor's lab-style impact score.
Why this verdict
- Downgrade for attacker position:
AV:Lon Android means the adversary needs code execution on the handset first, usually via a malicious app or another prior compromise. - Downgrade for exposure population: this is not internet-reachable and not meaningfully scannable; only devices already carrying attacker code are in play.
- Downgrade for blast radius: even successful exploitation is generally bounded to one device and its local users/profiles rather than enabling estate-wide lateral movement.
- Downgrade for threat intel: no KEV listing, no public exploitation evidence, and the supplied EPSS of
0.00004all point away from urgent mass exploitation risk. - Keep at MEDIUM, not LOW: enterprise Android work-profile and cross-user boundaries matter; if your mobile controls fail, this can still expose sensitive corporate data on affected devices.
Why not higher?
There is no remote entry point here. The chain starts after an attacker already has code running locally, which is a major compounding friction and a strong signal that the vendor CVSS overstates operational urgency for most enterprise fleets. The lack of KEV status, lack of active exploitation evidence, and non-scannable nature all push it down.
Why not lower?
This is still a real platform security boundary failure inside Android Framework, not a cosmetic bug. On BYOD, COPE, or work-profile-heavy fleets, cross-user or cross-profile disclosure can directly impact enterprise data if a malicious app slips onto the device.
What to do — in priority order.
- Block sideloading — Enforce managed app installation only through Android Enterprise / Play EMM APIs, and disable unknown sources wherever the device policy model allows it. For a MEDIUM verdict there is no mitigation SLA; if this is not already standard policy, fold it into the next mobile policy cycle while you patch within the 365-day remediation window.
- Require Play Protect and MTD — Keep Google Play Protect enabled and pair it with Mobile Threat Defense or EDR-on-mobile where available so malicious-app delivery gets caught before this CVE matters. There is no mitigation SLA for MEDIUM, but this is the most practical risk reducer because it attacks the prerequisite rather than the bug.
- Restrict profile notification exposure — Use MDM policies to minimize lock-screen and cross-profile notification content where business-tolerable, especially on BYOD and COPE devices carrying sensitive work data. There is no mitigation SLA for MEDIUM; implement during normal policy tuning if your mobile fleet uses work profiles heavily.
- Inventory vulnerable patch levels — Use MDM or
adb-based checks to identify devices on Android 14/15/16/16-qpr2 with a security patch level earlier than 2026-03-01. This is the operational control that turns the bulletin into an actionable target list ahead of normal remediation.
- Perimeter IPS/WAF controls do not help because this is not a network-reachable vulnerability.
- External attack-surface management tools will not surface meaningful exposure because the vulnerable component lives inside the local Android framework.
- Password resets or MFA changes do not remediate the underlying on-device permission-bypass path.
Crowdsourced verification payload.
Run this on an auditor workstation with adb installed, not on the phone itself. Invoke it as ./check-cve-2026-0025.sh SERIAL or ./check-cve-2026-0025.sh for the single attached device; it needs no root, only adb access to read system properties.
#!/usr/bin/env bash
# check-cve-2026-0025.sh
# Determine likely exposure to CVE-2026-0025 on an Android device via adb.
# Outputs one of: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
SERIAL="${1:-}"
ADB_BIN="${ADB_BIN:-adb}"
REQUIRED_PATCH="2026-03-01"
adb_cmd() {
if [ -n "$SERIAL" ]; then
"$ADB_BIN" -s "$SERIAL" "$@"
else
"$ADB_BIN" "$@"
fi
}
fail_unknown() {
echo "UNKNOWN"
exit 2
}
# Ensure adb is present
command -v "$ADB_BIN" >/dev/null 2>&1 || fail_unknown
# Ensure device connectivity
STATE="$(adb_cmd get-state 2>/dev/null || true)"
[ "$STATE" = "device" ] || fail_unknown
# Read Android release and security patch level
RELEASE="$(adb_cmd shell getprop ro.build.version.release 2>/dev/null | tr -d '\r')"
PATCH="$(adb_cmd shell getprop ro.build.version.security_patch 2>/dev/null | tr -d '\r')"
CODENAME="$(adb_cmd shell getprop ro.build.version.release_or_codename 2>/dev/null | tr -d '\r')"
[ -n "$PATCH" ] || fail_unknown
# Extract numeric major version from release/codename
MAJOR="$(printf '%s\n%s\n' "$RELEASE" "$CODENAME" | grep -Eo '^[0-9]+' | head -n1 || true)"
[ -n "$MAJOR" ] || fail_unknown
# Affected Android versions per advisory: 14, 15, 16, 16-qpr2
case "$MAJOR" in
14|15|16)
;;
*)
echo "PATCHED"
exit 0
;;
esac
# Patch level is ISO-like YYYY-MM-DD, so lexical compare is valid.
if [[ "$PATCH" < "$REQUIRED_PATCH" ]]; then
echo "VULNERABLE"
exit 1
else
echo "PATCHED"
exit 0
fi
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.