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

In setupLayout of PickActivity

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

This is a stolen staff badge inside the building, not a burglar kicking in the front door

CVE-2026-0013 is a *local* Android elevation-of-privilege bug in DocumentsUI's PickActivity. Google says affected AOSP versions are Android 14, 15, and 16, and the fixing change clears a malicious Intent selector before the app reuses the incoming request. In plain English: a rogue app already running on the device can try to trick the system's file-picker app into launching an arbitrary activity *as DocumentsUI* instead of as the untrusted app.

The vendor's HIGH 8.4 score reflects the technical impact once an attacker is already on the handset, but it overstates enterprise urgency. The decisive friction is attacker position: this starts at AV:L, which means the adversary already has code execution on the device through a malicious app, sideload, or prior compromise. That makes this a useful *chain* bug for mobile malware, not a stand-alone fleet fire.

"High on paper, but this is a post-install Android app-to-system pivot, not an internet-scale emergency."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Land code on the device

The attacker first needs a runnable app or equivalent local execution context on the Android device. In practice that means a sideloaded APK, a hostile app that passed marketplace screening, a dev-enabled device using adb, or a prior exploit chain that already achieved app-level code execution.
Conditions required:
  • Target is running Android 14, 15, or 16
  • Attacker can execute code locally as an unprivileged app
  • DocumentsUI component is present and reachable
Where this breaks in practice:
  • This is not remotely reachable from the internet
  • Managed enterprise devices often block unknown app sources
  • Play Protect, MDM allow-lists, and app reputation controls can stop the initial foothold
Detection/coverage: Classic network scanners will miss this entirely. Coverage comes from MDM/EMM app inventory, mobile threat defense, Play Protect telemetry, and logs showing unapproved package installs.
STEP 02

Send a crafted picker request

The malicious app targets PickActivity and supplies an Intent with a hostile selector. The AOSP fix notes that PickActivity reused the incoming intent while showing alternate apps, so the selector could survive into a privileged launch path.
Conditions required:
  • Attacker can call exported or reachable picker flows
  • Crafted Intent selector is accepted into the vulnerable path
Where this breaks in practice:
  • Exploit reliability depends on exact component behavior and OEM build parity
  • Exported-activity and intent-filter differences across devices can reduce portability
Detection/coverage: Detection is thin. Static app analysis or runtime intent tracing on test devices can surface suspicious selector abuse; most enterprise scanners do not model intent abuse well.
STEP 03

Abuse the confused deputy

Instead of preserving the original caller's identity, DocumentsUI effectively becomes the deputy that performs the launch. The patch explicitly clears the selector on the copied intent, confirming the bug was the privilege-bearing app forwarding attacker-controlled launch metadata.
Conditions required:
  • Vulnerable PickActivity.setupLayout code path is hit
  • DocumentsUI has permission or trust the attacker app lacks
Where this breaks in practice:
  • The payoff depends on what target activities can actually be launched meaningfully under DocumentsUI's context
  • SELinux, app sandboxing, and component permission checks still constrain follow-on abuse
Detection/coverage: Good mobile EDR may flag anomalous cross-app launches from a low-prevalence package into system components, but commodity vuln scanners usually cannot validate this step.
STEP 04

Pivot to on-device privilege gain

If the attacker successfully launches the chosen activity as DocumentsUI, they may gain access to data or operations otherwise blocked to the original app. The result is local privilege escalation and potential follow-on abuse against files, enterprise app data flows, or other user-level secrets on that single device.
Conditions required:
  • Chosen activity yields meaningful access when started as DocumentsUI
  • User/device state exposes data worth stealing
Where this breaks in practice:
  • Blast radius is usually one handset at a time
  • This does not directly become tenant-wide or domain-wide compromise
  • Enterprise impact is serious mainly when chained with spyware or high-value mobile access
Detection/coverage: Post-exploit signs are indirect: suspicious package behavior, unusual app launches, sensitive file access, or other mobile threat telemetry. There is no broad internet scanning signature because the bug is local-only.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed exploitation found in the sources reviewed. *Inference:* absence from CISA KEV and no vendor note about active exploitation lowers urgency, but does not prove zero use.
Proof-of-concept availabilityNo public PoC repo or researcher write-up was found in the reviewed sources. The public AOSP fix is enough for a capable Android exploit developer to reconstruct the issue, but there is no obvious mass-commodity exploit signal.
EPSS0.00003 from the supplied intel; percentile not verified from a primary source during this review. Directionally, that is extremely low exploit-likelihood compared with internet-facing bugs.
KEV statusNot listed in CISA KEV as of this assessment. No KEV date applies.
CVSS vectorCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — the key word is AV:L. It is easy to trigger *after* code is already on-device, but it is not an external entry point.
Affected versionsAndroid 14, 15, and 16 per the March 1, 2026 Android bulletin and NVD/OSV records. The vulnerable component is Documents UI, which the bulletin also lists under Google Play system updates.
Fixed stateAddressed in the Android Security Bulletin dated 2026-03-01, with the public AOSP fix 9f2d3f09f8fdc099d5a2d4c8bf3e8ec460bb9233. Because this is a Mainline-associated component, defenders should verify both device patching and Google Play system update posture.
Exposure / scanning dataShodan/Censys/GreyNoise-style exposure is effectively not applicable here because this is not a network service. *Inference from AV:L and the affected component:* exposure population is the set of managed Android endpoints, not internet-exposed hosts.
Disclosure date2026-03-02
Reporting / patch provenancePublic provenance points to Google Android/AOSP. The patch commit message says: *prevent a malicious selector from launching an arbitrary activity* and ties the fix to bug 447135012.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.4/10)

The single biggest downward driver is attacker position: exploitation requires *local app execution on the handset first*. That makes CVE-2026-0013 a valuable *post-compromise privilege-escalation primitive* for mobile malware, but not the kind of bug that creates internet-scale exposure by itself.

HIGH This is not remotely reachable and requires prior local code execution
MEDIUM Patch validation precision is limited because Google does not publish a neat package-version mapping for every OEM/Mainline delivery path

Why this verdict

  • Downgrade for attacker position: vendor CVSS starts high because the impact is full local EoP, but AV:L means the attacker is already on the device. That is immediate downward pressure for enterprise prioritization.
  • Downgrade for exposure population: this is reachable only on Android endpoints running affected DocumentsUI code, not on public-facing infrastructure. Real exposed population is far narrower than a browser, VPN, or mail gateway bug.
  • Downgrade for controls that should break step 1: mobile app allow-listing, Play Protect, managed Play, MTD, and sideload restrictions can stop the prerequisite malicious app before this CVE matters.
  • Hold at MEDIUM, not LOW: once a malicious app lands, exploitation appears low-complexity and needs no extra privileges or user interaction. That makes it a credible second-stage privilege escalator in mobile intrusion chains.
  • Hold at MEDIUM because of enterprise data value: on high-value devices with SSO tokens, corporate mail, chat, and MDM enrollment, a local EoP can materially improve attacker access even if the blast radius is one device at a time.

Why not higher?

There is no internet-reachable entry point, no KEV listing, no confirmed active exploitation in the sources reviewed, and no public mass-weaponized PoC signal. Most importantly, AV:L implies the attacker has already crossed the hardest boundary by executing code on the endpoint.

Why not lower?

This is still a real privilege-boundary failure in a system component, not a cosmetic bug or lab-only edge case. If a hostile app is present, the exploit chain removes meaningful sandbox friction and can materially strengthen mobile malware operations against corporate data on the device.

05 · Compensating Control

What to do — in priority order.

  1. Block untrusted app installs — Enforce managed Play allow-lists, disable unknown sources, and restrict developer-mode pathways because the prerequisite for this CVE is attacker-controlled code on the device. For a MEDIUM verdict there is no mitigation SLA — go straight to the 365-day remediation window, but this control should already be baseline for Android fleet hygiene.
  2. Harden mobile threat telemetry — Tune MTD/EDR/EMM to alert on sideloaded apps, low-prevalence packages, unexpected adb use, and suspicious launches into system components such as DocumentsUI. This does not patch the bug, but it raises the odds of catching the only realistic precondition before attackers can use the deputy flaw.
  3. Segment high-risk Android cohorts — Prioritize executives, admins, developers, and users with broad SaaS/mobile access for update verification because the exploit is per-device and value-driven. On those cohorts, confirm both Android patch state and Google Play system update state rather than trusting one date string alone.
  4. Reduce local code-exec paths — Turn off unnecessary adb in production, restrict test-signing exceptions, and review MDM policies that permit unmanaged app installs. This directly attacks the exploit chain's first step, which matters more than overreacting to the CVSS label.
What doesn't work
  • A perimeter IDS/IPS will not help much because this is not a network-reachable service vulnerability.
  • A WAF is irrelevant; there is no HTTP request path to protect.
  • MFA does not stop the exploit itself because the issue is an on-device privilege pivot inside Android, not an authentication workflow weakness.
  • Relying only on the Android security patch date can miss Mainline-delivered component state; this component is called out under Google Play system updates.
06 · Verification

Crowdsourced verification payload.

Run this from an auditor workstation that has adb installed and USB debugging authorized on the target Android device. Invoke it as bash check-cve-2026-0013.sh SERIAL or omit the serial for a single attached device; no root is required, but adb shell access is required.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-0013.sh
# Best-effort verifier for CVE-2026-0013 on Android devices via adb.
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN, 3=usage/adb error

set -u

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

run_adb() {
  "${ADB_BASE[@]}" "$@"
}

# Basic connectivity check
if ! run_adb get-state >/dev/null 2>&1; then
  echo "UNKNOWN: adb device not reachable"
  exit 3
fi

# Helper to trim CRs often returned by adb shell
trim() {
  tr -d '\r'
}

ANDROID_VERSION=$(run_adb shell getprop ro.build.version.release 2>/dev/null | trim)
SDK_INT=$(run_adb shell getprop ro.build.version.sdk 2>/dev/null | trim)
SEC_PATCH=$(run_adb shell getprop ro.build.version.security_patch 2>/dev/null | trim)
DOC_PKG=""

# Find likely DocumentsUI package name
for pkg in com.android.documentsui com.google.android.documentsui; do
  if run_adb shell pm path "$pkg" >/dev/null 2>&1; then
    DOC_PKG="$pkg"
    break
  fi
done

DOC_VER=""
if [[ -n "$DOC_PKG" ]]; then
  DOC_VER=$(run_adb shell dumpsys package "$DOC_PKG" 2>/dev/null | trim | awk -F= '/versionName=/{print $2; exit}')
fi

# Try to read a visible Google Play system update date from secure settings if present.
# This is not guaranteed across OEMs, so absence is normal.
GPSU_DATE=$(run_adb shell settings get secure "android_version_mainline" 2>/dev/null | trim)
if [[ "$GPSU_DATE" == "null" ]]; then
  GPSU_DATE=""
fi

# Normalize version gating from vendor advisory/NVD: Android 14, 15, 16 affected.
AFFECTED_OS=0
case "$ANDROID_VERSION" in
  14*|15*|16*) AFFECTED_OS=1 ;;
  *) AFFECTED_OS=0 ;;
esac

if [[ $AFFECTED_OS -eq 0 ]]; then
  echo "PATCHED: Android version '$ANDROID_VERSION' is outside the documented affected range (14/15/16)"
  exit 0
fi

# Best-effort patch decision:
# - If security patch level is >= 2026-03-01, treat as PATCHED.
# - Else if we cannot establish component patching, return UNKNOWN.
# - Else if affected OS and clearly pre-bulletin, return VULNERABLE.
# Note: This CVE sits in a Mainline-associated component, so security patch date alone is imperfect.

compare_dates() {
  # lexical compare works on YYYY-MM-DD
  local left="$1"
  local right="$2"
  [[ "$left" > "$right" || "$left" == "$right" ]]
}

TARGET_DATE="2026-03-01"

if [[ -n "$SEC_PATCH" ]]; then
  if compare_dates "$SEC_PATCH" "$TARGET_DATE"; then
    echo "PATCHED: security patch level '$SEC_PATCH' is at or after $TARGET_DATE; package='$DOC_PKG' version='${DOC_VER:-unknown}'"
    exit 0
  fi
fi

# If the device is in the affected OS family and clearly behind the bulletin date,
# call it vulnerable unless there is evidence of newer component delivery.
if [[ -n "$SEC_PATCH" && "$SEC_PATCH" < "$TARGET_DATE" ]]; then
  if [[ -n "$GPSU_DATE" ]]; then
    echo "UNKNOWN: security patch '$SEC_PATCH' is before $TARGET_DATE, but Google Play system update state '$GPSU_DATE' needs manual validation for Mainline-delivered DocumentsUI; package='$DOC_PKG' version='${DOC_VER:-unknown}'"
    exit 2
  else
    echo "VULNERABLE: affected Android version '$ANDROID_VERSION' with security patch '$SEC_PATCH' before $TARGET_DATE; package='$DOC_PKG' version='${DOC_VER:-unknown}'"
    exit 1
  fi
fi

# No usable patch signal beyond OS range.
echo "UNKNOWN: affected Android version '$ANDROID_VERSION'; unable to prove Mainline/DocumentsUI fix state. security_patch='${SEC_PATCH:-unknown}' package='$DOC_PKG' version='${DOC_VER:-unknown}' play_system='${GPSU_DATE:-unknown}'"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, treat this as a mobile post-compromise hardening item, not a fleet-wide fire drill. There is no noisgate mitigation SLA — go straight to the 365-day remediation window for this MEDIUM verdict, but use that window intelligently: first validate which managed Android 14/15/16 cohorts are still behind the March 1, 2026 bulletin or equivalent Play system update, then patch those devices inside the noisgate remediation SLA of 365 days. If you discover credible exploitation in your environment or a malicious-app campaign targeting your mobile fleet, override that calm posture and move the affected device groups to immediate containment and accelerated patching within hours.

Sources

  1. Android Security Bulletin—March 2026
  2. AOSP fix commit for DocumentsUI
  3. NVD entry for CVE-2026-0013
  4. OSV record for CVE-2026-0013
  5. CWE-441 definition
  6. CISA Known Exploited Vulnerabilities Catalog
  7. FIRST EPSS API documentation
  8. Android Enterprise system updates guidance
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.