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

In dumpBitmapsProto of ActivityManagerService

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

This is a side door inside the apartment, not a hole in the building’s front wall

CVE-2026-0047 is a missing permission check in dumpBitmapsProto inside Android's ActivityManagerService. In plain English: a locally running app may be able to ask the framework for bitmap-related data it should not get, leading to access to private information without prompting the user. Public records reviewed tie the affected population to Android 16-qpr2, with NVD enrichment specifically listing qpr2_beta_1 through qpr2_beta_3 CPEs and CVE.org listing the affected version as 16-qpr2.

Google's bulletin labels the issue Critical in the Framework section, and the CVSS vector in NVD/CISA-ADP is 8.4 / High, but both overstate enterprise urgency for most fleets. This is local-only, requires the attacker to already land a malicious app on the handset, appears limited to a narrow Android branch, has no KEV listing, and carries a near-floor EPSS. For a 10,000-device program, that is a containment problem on a subset of endpoints, not a fleet-wide emergency.

"Real bug, but it needs a malicious app on a narrow Android 16-qpr2 slice and stays boxed to one device."
02 · The Attack Path

3 steps from start to impact.

STEP 01

Get code onto the handset

The attacker first needs a malicious Android app package on the target device. In practice that means a trojanized APK, a sideloaded internal app, or abuse of a legitimate distribution path such as a mis-governed private store. *Weaponized tool:* custom APK / dropper delivered through standard Android app install flow.
Conditions required:
  • Target device is actually on an affected Android 16-qpr2 build
  • Attacker can place or convince installation of an app on the device
  • Enterprise policy does not fully block unapproved app installs
Where this breaks in practice:
  • Managed Google Play allowlisting blocks most random third-party installs on well-run fleets
  • Google Play Protect and mobile threat defense can flag commodity droppers
  • Corporate-owned work-profile deployments often prevent user-driven sideloading
Detection/coverage: Good device-management coverage for the prerequisite, poor vuln-specific coverage. EMM/UEM, Play Protect, and MTD see app installation events; traditional network scanners do not.
STEP 02

Call the unguarded framework path

Once running, the malicious app invokes the vulnerable path that reaches dumpBitmapsProto through framework/Binder plumbing. The core defect is the missing permission check, so the app does not need to hold an expected privileged permission before making the request. *Weaponized tool:* app code using Android framework/Binder calls to reach the dump path.
Conditions required:
  • Vulnerable framework code is present
  • The relevant Binder/service path is reachable from an unprivileged app context
  • No OEM backport has already fixed the check
Where this breaks in practice:
  • Public patch details are sparse, which slows reliable weaponization
  • OEM modifications may alter reachability or behavior
  • The bug is version-specific rather than broad across Android generations
Detection/coverage: Low generic scanner visibility. You are mostly dependent on build inventory, patch-level attestation, and app-behavior telemetry rather than signature-based vuln scanning.
STEP 03

Harvest bitmap-derived private data

If the call succeeds, the app may obtain bitmap-related output that should have remained private, enabling local information access and possibly a privilege-boundary bypass in the framework's eyes. The blast radius is the compromised handset and the data visible from this dump path, not remote takeover of your mobile estate. *Weaponized tool:* exfiltration logic embedded in the APK.
Conditions required:
  • Returned data is valuable enough to operationalize
  • App has outbound network access or another exfil path
  • User or policy does not immediately remove the app
Where this breaks in practice:
  • Impact appears centered on privacy exposure rather than a dependable path to durable system compromise
  • Per-device value is uneven across enterprise users
  • Outbound exfil can be constrained by VPN/per-app networking/MTD controls
Detection/coverage: MTD, DNS filtering, and UEM app telemetry may catch exfil behavior; there is little native vuln-scan evidence after the fact.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo public evidence of active exploitation found in sources reviewed, and not present in CISA KEV as checked against the KEV catalog source.
PoC availabilityNo credible public exploit or GitHub PoC surfaced in source review. That does not mean unexploitable; it means weaponization evidence is currently weak.
EPSSUser-supplied EPSS is 0.00003 (~0.003%), which is floor-level threat probability. Third-party views reviewed classify it as very low / <1% band.
KEV statusNo KEV listing found. No CISA due date applies because it is not cataloged as known exploited.
CVSS vector reality checkCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H says local, no-privs, no-user-interaction. The local attacker position is the big real-world brake: an attacker still needs an app running on the phone first.
Affected versionsCVE.org lists the affected version as 16-qpr2. NVD enrichment further narrows this to qpr2_beta_1, qpr2_beta_2, and qpr2_beta_3 CPEs.
Fixed versionsAndroid's March 2026 bulletin states that security patch levels of 2026-03-05 or later address all issues in the bulletin; for Google Pixel devices, the Pixel bulletin says 2026-03-05 or later remediates March 2026 Android bulletin issues.
Exposure modelThis is not internet-addressable. Shodan/Censys/FOFA-style exposure counting is basically irrelevant; exposure is driven by device count, app-install posture, and whether you run the affected Android branch.
Disclosure timelinePublished 2026-03-02 in CVE/NVD records; Android bulletin published 2026-03-02 and later updated 2026-04-17.
Researcher / reportingNo public external researcher credit was visible in the Android bulletin or CVE record reviewed.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (4.6/10)

The decisive factor is attacker position: this bug is only useful after an attacker gets an app onto the device, which makes it a post-delivery endpoint issue rather than an initial-access fleet emergency. The second major brake is population size—the affected scope points to Android 16-qpr2, not the full Android estate.

HIGH Affected version range is narrow (`16-qpr2` / NVD beta CPEs)
MEDIUM Exact downstream impact of the exposed bitmap data without full public patch diff
HIGH No public active-exploitation signal in reviewed sources

Why this verdict

  • Down from vendor baseline: local-only means post-delivery. AV:L with PR:N still requires attacker code running on the handset, which in enterprise reality means you already lost app-control on that endpoint.
  • Down again: affected population looks narrow. CVE.org says 16-qpr2, and NVD enrichment points specifically to qpr2_beta_1/2/3, which is a much smaller slice than 'Android' writ large.
  • Down again: blast radius is one device at a time. There is no network reachability, no wormability, and no obvious tenant- or fleet-wide pivot from the flaw alone.
  • Down again: threat telemetry is cold. No KEV, no public exploitation evidence, and an EPSS near zero all argue against emergency handling.
  • Still not LOW: the bypass is real and permissionless once the app is present. An unprivileged app should not be able to reach private framework dump output, and no user click is needed after installation.

Why not higher?

This does not give unauthenticated remote access, and it does not help an attacker get onto the phone in the first place. The need for a malicious app plus the likely narrow 16-qpr2 exposure slice compounds the friction enough that an enterprise should not treat this like a critical patch-now event.

Why not lower?

I am not putting this in LOW because the vulnerable boundary is a framework permission check, and exploitation from an installed app appears to require no extra privileges and no user interaction. If you do have affected devices and looser app-governance, the bug can still expose sensitive on-device data in a way defenders should not ignore.

05 · Compensating Control

What to do — in priority order.

  1. Enforce app allowlisting — Require managed Google Play or equivalent allowlisting so unknown APKs cannot land on affected devices. This directly cuts off the exploit's biggest prerequisite; for a MEDIUM verdict there is no noisgate mitigation SLA, so use this as an operational hardening step while you work the normal remediation window.
  2. Block sideloading on managed devices — Disable or tightly restrict user sideloading, ADB installs, and externally hosted private APK distribution where business-possible. That shrinks the realistic exploit population because the bug is only reachable after app placement; again, no noisgate mitigation SLA applies for MEDIUM.
  3. Hunt for Android 16-qpr2 devices — Query UEM/MDM inventory for build fingerprints, OS release, and security patch level to identify whether you even own the affected branch. This is the fastest way to turn a noisy Android CVE into a scoped device list instead of a fleet-wide scramble.
  4. Turn on mobile threat telemetry — Use Play Protect, MTD, and UEM app-install telemetry to flag unapproved apps and suspicious outbound behavior from newly installed packages. These controls do not fix the bug, but they materially raise friction for the malicious-app prerequisite during the 365-day remediation window.
What doesn't work
  • Perimeter network scanning does nothing here; the flaw is on-device and not internet-exposed.
  • Traditional server-side WAF/IPS controls are irrelevant because there is no inbound network exploit path to block.
  • Relying on permission prompts is not sufficient; the core issue is a missing permission check in framework code.
06 · Verification

Crowdsourced verification payload.

Run this on an auditor workstation with adb installed and USB/network debugging access to the target Android device. Invoke it as ./check-cve-2026-0047.sh <device-serial> or without an argument if only one device is attached; it needs no root, only normal adb shell getprop access.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-0047.sh
# Purpose: Heuristically assess exposure to CVE-2026-0047 on an Android device via adb.
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN, 3=USAGE/ADB ERROR

set -euo pipefail

SERIAL="${1:-}"
ADB=(adb)
if [[ -n "$SERIAL" ]]; then
  ADB+=( -s "$SERIAL" )
fi

need_cmd() {
  command -v "$1" >/dev/null 2>&1 || {
    echo "UNKNOWN - required command '$1' not found"
    exit 3
  }
}

getprop_safe() {
  local key="$1"
  "${ADB[@]}" shell getprop "$key" 2>/dev/null | tr -d '\r'
}

need_cmd adb

if ! "${ADB[@]}" get-state >/dev/null 2>&1; then
  echo "UNKNOWN - adb device not reachable"
  exit 3
fi

release="$(getprop_safe ro.build.version.release)"
security_patch="$(getprop_safe ro.build.version.security_patch)"
fingerprint="$(getprop_safe ro.build.fingerprint)"
incremental="$(getprop_safe ro.build.version.incremental)"
product="$(getprop_safe ro.product.device)"
model="$(getprop_safe ro.product.model)"

# Normalize a little
release_lc="$(printf '%s' "$release" | tr '[:upper:]' '[:lower:]')"
fingerprint_lc="$(printf '%s' "$fingerprint" | tr '[:upper:]' '[:lower:]')"
incremental_lc="$(printf '%s' "$incremental" | tr '[:upper:]' '[:lower:]')"

# Helper: compare ISO dates lexicographically (works for YYYY-MM-DD)
is_ge_date() {
  local a="$1"
  local b="$2"
  [[ "$a" > "$b" || "$a" == "$b" ]]
}

# Determine whether device appears to be on the affected Android 16-qpr2 branch.
is_android16=0
if [[ "$release_lc" == "16" || "$release_lc" == "android 16" ]]; then
  is_android16=1
fi

is_qpr2_hint=0
if [[ "$fingerprint_lc" == *"qpr2"* || "$incremental_lc" == *"qpr2"* || "$fingerprint_lc" == *"beta"* ]]; then
  is_qpr2_hint=1
fi

# Decision logic:
# - If SPL is 2026-03-01 or later, Android bulletin says framework issues are addressed.
# - Pixel bulletin says 2026-03-05 or later covers all March 2026 Android bulletin issues on Google devices.
# - Because public metadata narrows exposure to Android 16-qpr2, anything outside that branch is UNKNOWN/PATCHED depending on confidence.

if [[ -z "$security_patch" ]]; then
  echo "UNKNOWN - could not read security patch level (device: $model / $product)"
  exit 2
fi

if is_ge_date "$security_patch" "2026-03-05"; then
  echo "PATCHED - security patch level $security_patch is at or above 2026-03-05 (device: $model / $product)"
  exit 0
fi

if [[ $is_android16 -eq 1 && $is_qpr2_hint -eq 1 ]]; then
  if is_ge_date "$security_patch" "2026-03-01"; then
    echo "PATCHED - Android 16 qpr2-like build with security patch $security_patch, which is at or above 2026-03-01"
    exit 0
  else
    echo "VULNERABLE - Android 16 qpr2-like build with security patch $security_patch below 2026-03-01"
    exit 1
  fi
fi

if [[ $is_android16 -eq 1 && $is_qpr2_hint -eq 0 ]]; then
  echo "UNKNOWN - Android 16 detected but qpr2 branch not confirmed; fingerprint='$fingerprint' patch='$security_patch'"
  exit 2
fi

echo "UNKNOWN - device does not clearly match public affected-version data (release='$release', patch='$security_patch', fingerprint='$fingerprint')"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, do not treat this as an all-hands Android fire drill. First, use UEM/MDM to identify whether you actually have any devices on Android 16-qpr2 or March 2026-unpatched Pixels; if not, document and move on. If you do, tighten app-install governance immediately on that subset and validate Play Protect/MTD visibility, but because this is a MEDIUM reassessment there is no noisgate mitigation SLA — go straight to the 365-day remediation window. Under the noisgate remediation SLA, get affected devices onto a March 2026-fixed build within 365 days; if your environment permits sideloading or you have high-risk user groups, front-load those devices first even though there is no formal mitigation SLA.

Sources

  1. Android Security Bulletin — March 2026
  2. NVD CVE-2026-0047
  3. CVE.org record for CVE-2026-0047
  4. Pixel Update Bulletin — March 2026
  5. CISA Known Exploited Vulnerabilities Catalog
  6. FIRST EPSS Data and Statistics
  7. Android Application Sandbox
  8. Access to Managed Google Play
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.