← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-0025 · CWE-200 · Disclosed 2026-03-02

In hasImage of Notification

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

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.

"High on paper, medium in the fleet: this is a post-install local Android app bug, not a perimeter event."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Land code on the device with a malicious app

The attacker first needs a runnable Android app on the target phone or tablet. In practice that means sideloading, a hostile third-party app store, abuse of developer enrollment, or compromise of an already-approved app distribution path. The CVE itself does not provide initial access; it only becomes useful after code is already executing locally.
Conditions required:
  • 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
Where this breaks in practice:
  • 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
Detection/coverage: Mobile Threat Defense, Play Protect telemetry, and EMM/MDM app inventory are better detectors than network scanners. Traditional vuln scanners usually will not validate exploitability here.
STEP 02

Craft hostile notification messaging extras

The exploit path likely uses the notification API surface to submit malformed or type-confused messaging payloads in 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.
Conditions required:
  • Attacker app can post or build notifications using framework APIs
  • Target framework still accepts the vulnerable content shape
Where this breaks in practice:
  • 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
Detection/coverage: No mainstream network scanner coverage. Detection is mostly behavioral: unusual notification-posting patterns, abnormal app use of content URIs, or MTD telemetry if available.
STEP 03

Bypass profile or cross-user boundaries

When the framework processes the malicious notification, the vulnerable 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.
Conditions required:
  • Relevant cross-user, work-profile, or multi-user data exists on the device
  • The vulnerable parsing path reaches protected notification-related content
Where this breaks in practice:
  • 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
Detection/coverage: Difficult to prove with standard logs. Forensics would rely on app activity, notification traces, and content-provider access patterns if the OEM exposes them.
STEP 04

Exfiltrate locally exposed data

Any recovered data still has to be packaged and sent out by the malicious app. That step is ordinary app-level exfiltration, which means defenders still have chances to catch it through managed egress controls, mobile DLP, or app reputation tooling even after the vulnerability is hit.
Conditions required:
  • Attacker app can read the exposed data
  • App has outbound network access or another exfiltration channel
Where this breaks in practice:
  • 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
Detection/coverage: Possible via mobile network telemetry, DNS filtering, CASB/mobile proxy controls, or EDR/MTD on Android Enterprise devices.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo 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 statusNot listed in CISA's Known Exploited Vulnerabilities catalog as checked against the catalog and CVE-specific search results.
EPSS0.00004 from the supplied intel, which is effectively floor-level probability and consistent with a niche local Android exploit path.
Proof-of-concept availabilityNo 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 meansCVSS: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 versionsGoogle's CVE record and March 2026 Android bulletin mark Android 14, 15, 16, and 16-qpr2 as affected.
Fixed versions / patch levelsAddressed 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 dataShodan/Censys/GreyNoise-style exposure metrics are not meaningful here. This is a local OS framework bug, not a remotely reachable network service.
Disclosure date2026-03-02 via Google's Android Security Bulletin and Android CNA publication.
Patch provenanceAOSP fix is public in commit 014dea279c49..., which tightens notification message parsing from broad Parcelable arrays to stricter Bundle handling.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (4.9/10)

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.

HIGH Affected version range and fixed patch level
MEDIUM Exploit-chain interpretation from AOSP patch and test case
HIGH Severity downgrade driven by attacker-position friction

Why this verdict

  • Downgrade for attacker position: AV:L on 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.00004 all 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.

05 · Compensating Control

What to do — in priority order.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
What doesn't work
  • 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.
06 · Verification

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.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/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
07 · Bottom Line

If you remember one thing.

TL;DR
By Monday morning, pull a mobile inventory for Android 14/15/16/16-qpr2 devices with a security patch level earlier than 2026-03-01, and confirm whether those devices can install unmanaged apps or carry sensitive work-profile data. This is a MEDIUM issue, so there is no noisgate mitigation SLA — go straight to the 365-day remediation window; use your next normal Android update cycle to move devices to 2026-03-01 or later, and complete vendor patch rollout within the noisgate remediation SLA of ≤365 days.

Sources

  1. Android Security Bulletin—March 2026
  2. NVD entry for CVE-2026-0025
  3. OpenCVE mirror of CVE CNA record
  4. AOSP fix commit 014dea279c49d532bc4fbbdebbc024133967b6a8
  5. AOSP diff for the fix
  6. CISA Known Exploited Vulnerabilities Catalog
  7. Android Help: Check & update your Android version
  8. FIRST EPSS overview
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.