A nosy roommate reading your address book through the crack under the door
CVE-2026-0075 is a flaw in Android's ContactsProvider2.java component across Android 14, 15, 16, and 16-qpr2. A local application without the READ_CONTACTS permission can craft malformed SQL queries against the ContactsProvider content provider. When these queries trigger SQLite exceptions, the error messages leak database structure and content — a classic error-based SQL injection side channel. The AOSP patch (commit bb9f36b3) sanitizes these error strings for callers lacking READ_CONTACTS, eliminating the information disclosure vector.
Google's Android Security Bulletin rates this High (and some NVD sources cite CVSS 7.8), while the provided CVSS vector scores only 5.9. Both overstate the real-world risk for enterprise fleet managers. The attack is local only — a malicious app must already be installed on the target device. The blast radius is a single device's contact database, not credentials, tokens, or enterprise secrets. In a managed-device fleet with MDM app-allow-listing, the prerequisite of getting a rogue app onto the device is the hardest part of the chain, and the payoff is minimal compared to what social-engineering a READ_CONTACTS permission grant would yield.
3 steps from start to impact.
Malicious app installed on target device
- Attacker has a local application running on the target Android device
- Enterprise MDM with app-allow-listing blocks unapproved apps
- Google Play Protect scans for known malicious patterns
- Sideloading is disabled by default on managed devices
Craft malformed SQL queries to ContactsProvider
content://com.android.contacts provider with deliberately malformed SQL fragments in selection arguments or sort-order parameters. These are designed to trigger SQLite parsing errors that leak data in exception messages.- App can query the ContactsProvider content provider (default for all apps)
- Modern Android SELinux policies may limit ContentProvider access in some OEM builds
- The technique yields data slowly — one error message at a time
Parse SQLite error messages to extract contact data
- ContactsProvider returns unsanitized SQLite error messages (pre-patch behavior)
- Extraction is partial and noisy — not a clean database dump
- Data obtained is limited to contacts, not auth tokens or enterprise credentials
- On devices with few contacts, the payoff is trivial
The supporting signals.
| In-the-Wild Exploitation | No known in-the-wild exploitation. Not listed on CISA KEV. |
|---|---|
| Proof of Concept | Yes — PoC referenced on KSEC Community Forum exploit feed; details behind forum access wall. |
| EPSS Score | 0.00094 — bottom tier, well below the 1% threshold indicating negligible predicted exploitation probability. |
| KEV Status | Not listed as of 2026-08-20. |
| CVSS Vector | User-provided: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L (5.9). Google bulletin rates High; some NVD sources cite 7.8. Local vector, low CIA impact across the board. |
| Affected Versions | Android 14, 15, 16, 16-qpr2 — the ContactsProvider2.java component in AOSP packages/providers/ContactsProvider. |
| Fixed Version | Security patch level 2026-06-01 or later. AOSP commit bb9f36b3ff6d42136afb61d527e1e8f67242fe32. |
| Scanning / Exposure | Not applicable for network scanning — this is a local Android component. Exposure is every unpatched Android 14-16 device in the fleet. Use MDM patch-level reporting to enumerate. |
| Disclosure Date | 2026-06-01 (Android Security Bulletin, June 2026). Reserved 2025-10-15. |
| Reporter | Not publicly credited in the bulletin. |
noisgate verdict.
The single most decisive factor is that exploitation requires a malicious app already running locally on the Android device, and the blast radius is limited to one device's contact database — no credential theft, no lateral movement, no fleet-scale impact. This is an information-disclosure side channel with trivially low enterprise value compared to the prerequisite effort.
Why this verdict
- Local-only attack vector with app-install prerequisite: The attacker must first get a malicious app onto a managed device — the hardest step in the chain for enterprise-managed Android fleets with MDM app-allow-listing and Play Protect enabled. This alone compresses the reachable population to near-zero in well-managed environments.
- Minimal data payoff: The side channel yields fragments of the contacts database. In enterprise context, contacts are low-sensitivity data compared to auth tokens, managed app data, or MDM configuration. The risk-to-effort ratio is extremely poor for an attacker.
- No privilege escalation beyond data leak: Despite Google labeling this EoP, the actual impact is information disclosure of contacts. There is no path to SYSTEM, no kernel compromise, no lateral movement to other devices or enterprise infrastructure.
- Role multiplier: Android devices occupy only endpoint roles (workstations equivalent). There is no high-value-role scenario (no DC, no hypervisor, no CI/CD, no PKI) where this vulnerability's blast radius could scale. The floor does not apply — contacts on a phone do not enable domain takeover, fleet compromise, or supply-chain pivot.
- Bottom-tier EPSS (0.00094): Statistical exploitation probability is negligible, consistent with the friction analysis.
Why not higher?
Upgrading to MEDIUM or above would require either a realistic path to fleet-scale compromise, exposure of high-value data (credentials, tokens), or evidence of active exploitation. None of these conditions exist. The local prerequisite with MDM friction and the contacts-only payoff make even MEDIUM an overstatement for enterprise environments.
Why not lower?
Dropping to IGNORE would be inappropriate because a working PoC does exist, the vulnerability affects a broad Android version range (14-16), and organizations with BYOD policies or weak MDM enforcement could see contact data leakage at scale across unmanaged personal devices. The flaw is real and exploitable — it is just low-impact.
What to do — in priority order.
- Enforce MDM app-allow-listing on all managed Android devices — Block sideloading and restrict app installation to approved sources. This eliminates the prerequisite of getting a malicious app onto the device. No specific mitigation SLA applies at LOW severity — treat as backlog hygiene.
- Verify Google Play Protect is enabled fleet-wide via MDM policy — Play Protect provides runtime scanning that can detect malicious apps attempting known exploitation patterns. Confirm enrollment via MDM compliance reporting.
- Roll out June 2026 security patch level via MDM OTA policy — The definitive fix is security patch level 2026-06-01 or later. At LOW severity, this falls into backlog hygiene with no hard SLA deadline, but it should ship with your next routine Android patch cycle.
- Audit BYOD contact-sharing policies — If your org syncs corporate directory contacts to personal devices, evaluate whether this side channel could leak the corporate directory on unmanaged BYOD devices. Consider restricting contact sync to managed devices only.
- Network-level controls (WAF, NGFW, IDS) — This is a local on-device attack via Android content providers. No network traffic is involved in the exploitation itself; network controls are irrelevant.
- Android permissions management — The entire point of this vulnerability is that it bypasses the READ_CONTACTS permission check. Revoking contact permissions from apps does not mitigate this flaw.
- VPN or zero-trust network access — The attack occurs entirely within the device's local process space and does not traverse any network boundary.
Crowdsourced verification payload.
Run this on a workstation with adb connected to the target Android device. Requires USB debugging enabled or ADB over network. Usage: bash check_cve_2026_0075.sh — no root required on the device.
#!/usr/bin/env bash
# check_cve_2026_0075.sh
# Checks if an ADB-connected Android device is patched for CVE-2026-0075
# Requires: adb in PATH, device connected and authorized
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
PATCH_DATE="2026-06-01"
if ! command -v adb &>/dev/null; then
echo "UNKNOWN — adb not found in PATH"
exit 2
fi
DEVICE_COUNT=$(adb devices | grep -c 'device$' || true)
if [ "$DEVICE_COUNT" -eq 0 ]; then
echo "UNKNOWN — no ADB device connected"
exit 2
fi
SPL=$(adb shell getprop ro.build.version.security_patch 2>/dev/null | tr -d '\r')
if [ -z "$SPL" ]; then
echo "UNKNOWN — could not read security patch level"
exit 2
fi
echo "Device security patch level: $SPL"
echo "Required patch level: $PATCH_DATE"
if [[ "$SPL" > "$PATCH_DATE" ]] || [[ "$SPL" == "$PATCH_DATE" ]]; then
echo "PATCHED — device is at or above $PATCH_DATE"
exit 0
else
echo "VULNERABLE — device patch level $SPL is below $PATCH_DATE"
exit 1
fiIf you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.