This is a lockpick hidden behind another locked door
CVE-2026-10953 is a use-after-free in Chrome Core affecting Google Chrome on Android before 149.0.7827.53. In practical terms, the bug matters only after an attacker has already compromised the renderer process, then uses a crafted HTML page to try to break out of Chrome's sandbox. Google’s Android stable rollout on June 2, 2026 shipped Chrome 149.0.7827.59 and explicitly states Android carries the same security fixes as desktop 149.0.7827.53/54.
Google's HIGH 8.3 label is fair in a lab chain, but too hot for enterprise patch triage by itself. The decisive friction is the prerequisite: the attacker must already own the renderer, which makes this a post-initial-execution sandbox escape, not an internet-reachable first-hop compromise; add low EPSS, no KEV entry, no public exploitation evidence, and no public PoC, and this lands lower in a real 10,000-device queue.
4 steps from start to impact.
Land code execution in the renderer first
- Victim uses vulnerable Chrome on Android
- Victim visits attacker-controlled content
- Attacker has a separate renderer-compromise bug or chain
- This is a second-stage requirement, not initial access
- Modern Safe Browsing, site isolation, and exploit mitigations increase failure rate of the first-stage chain
- Attackers must carry at least two working bugs, not one
Trigger the Core use-after-free from the compromised renderer
- Renderer compromise already achieved
- Target is running an affected Chrome build
- Attacker can reach the vulnerable Core path with controlled page content
- Use-after-free exploitation is notoriously reliability-sensitive on mobile
- Chrome and Android hardening reduce stability of generic weaponization
- Issue details are still restricted, so copycat weaponization is not trivial
Attempt the sandbox escape
- A working exploit primitive from the use-after-free
- Ability to bypass Chrome process isolation and sandbox protections
- Target-specific exploit reliability on Android
- Sandbox escapes are harder than same-process renderer RCE
- Android-specific process and SELinux boundaries further constrain post-escape options
- Mobile EDR and OS crash reporting may expose unstable attempts
Turn browser escape into useful impact
- Successful sandbox escape
- Meaningful post-escape objective such as data theft or chaining into another local boundary
- Victim workflow exposes valuable browser-resident data or tokens
- Android app sandboxing still limits blast radius compared with desktop kernel-level compromise
- Many enterprises have limited sensitive data resident in mobile Chrome
- High-value follow-on impact often needs yet another local or OS-level weakness
com.android.chrome versions and flag devices below the fixed threshold for follow-up or conditional access pressure. This is the only scalable way to manage exposure for a client-side mobile browser issue; no mitigation SLA applies, but remediation should still close within 365 days.- A WAF does not help; this is a client-side browser flaw, not a web app vulnerability on your servers.
- Perimeter scanning does not help; there is no internet-facing service banner to find, so Shodan-style workflows miss the problem entirely.
- MFA does not stop exploitation of the browser memory bug itself; it only limits some downstream account abuse after compromise.
The supporting signals.
| In-the-wild status | No public evidence of active exploitation located as of 2026-06-05; the CVE is not KEV-listed. |
|---|---|
| PoC availability | No public PoC found in the official references or GHSA entry; Chromium issue details remain restricted. |
| EPSS | 0.068% (21st percentile) per the GHSA/FIRST data point — low predictive pressure compared with routinely weaponized browser bugs. |
| KEV status | Not listed in CISA KEV; no date added because there is no catalog entry for this CVE. |
| CVSS and meaning | CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H = remote delivery is possible, but exploitation is high complexity, needs user interaction, and in reality also depends on a prior renderer compromise. |
| Affected versions | Chrome on Android <149.0.7827.53 per the CVE text. |
| Fixed versions | Security fix threshold is 149.0.7827.53 in the CVE record; Google’s Android stable rollout on 2026-06-02 shipped 149.0.7827.59 carrying the same security fixes as desktop 149.0.7827.53/54. |
| Exposure reality | This is a client-side browser flaw, not an externally exposed server service. Shodan/Censys/FOFA exposure is effectively not applicable; exposure must be measured through MDM/EPM inventory, not internet scanning. |
| Disclosure timeline | NVD shows the CVE record published on 2026-06-04; GHSA published on 2026-06-05; Chrome stable Android fix shipped on 2026-06-02. |
| Reporter | Reported by Google to Chromium on 2026-04-24; no external researcher credit is listed in the release notes. |
Sources.
- GitHub Advisory Database - GHSA-v54j-r4vm-9pcv
- NVD - CVE-2026-10953
- Chrome Releases - Stable Channel Update for Desktop (June 2, 2026)
- Chrome Releases - Chrome for Android Update (June 2, 2026)
- Chromium issue tracker - issue 506147564
- Chromium security severity guidelines
- CISA Known Exploited Vulnerabilities Catalog
- Chromium memory safety overview
Why this verdict
- Renderer compromise required: -1.7 This is not initial access. Requiring a compromised renderer implies the attacker has already landed a separate browser exploit stage, which is compounding friction in real operations.
- Client-side mobile population only: -0.3 The affected population is broad in theory, but only among Android Chrome clients; there is no server-side blast radius and no externally reachable enterprise service to mass-scan or mass-exploit.
- No current exploitation pressure: -0.1 No KEV listing, low EPSS, restricted bug details, and no public PoC reduce immediate weaponization likelihood compared with browser zero-days that are already burning.
Why not higher?
If this were a stand-alone renderer RCE or had confirmed in-the-wild exploitation, it would stay in HIGH without much debate. But a sandbox escape that explicitly requires prior renderer compromise is a chain component, and enterprise prioritization should score chain friction, not just theoretical end-state impact.
Why not lower?
This is still a sandbox escape in Chrome, and that boundary matters. In the hands of a capable actor with a paired renderer bug, the impact can be serious for targeted users, so writing it off as backlog-only hygiene would understate the risk.
Crowdsourced verification payload.
Run this on an auditor workstation with adb installed against a connected Android device, or through a remote shell workflow that exposes package metadata. Invoke it as ./check_cve_2026_10953.sh SERIAL or ./check_cve_2026_10953.sh for the only attached device; no root is required, but you do need USB debugging or an enterprise-approved shell channel.
#!/usr/bin/env bash
# check_cve_2026_10953.sh
# Verify whether Google Chrome on Android is below the fix level for CVE-2026-10953.
# Outputs one of: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
TARGET_SERIAL="${1:-}"
PACKAGE="com.android.chrome"
MIN_SAFE="149.0.7827.53"
adb_cmd=(adb)
if [[ -n "$TARGET_SERIAL" ]]; then
adb_cmd+=( -s "$TARGET_SERIAL" )
fi
version_ge() {
# returns 0 if $1 >= $2
local IFS=.
local i
local -a a=($1) b=($2)
local len=${#a[@]}
if (( ${#b[@]} > len )); then
len=${#b[@]}
fi
for ((i=0; i<len; i++)); do
local ai=${a[i]:-0}
local bi=${b[i]:-0}
if ((10#$ai > 10#$bi)); then
return 0
elif ((10#$ai < 10#$bi)); then
return 1
fi
done
return 0
}
if ! command -v adb >/dev/null 2>&1; then
echo "UNKNOWN: adb not found in PATH"
exit 2
fi
if ! "${adb_cmd[@]}" get-state >/dev/null 2>&1; then
echo "UNKNOWN: no reachable Android device/emulator via adb"
exit 2
fi
pkg_out=$("${adb_cmd[@]}" shell dumpsys package "$PACKAGE" 2>/dev/null)
if [[ -z "$pkg_out" ]]; then
echo "UNKNOWN: package $PACKAGE not found or dumpsys unavailable"
exit 2
fi
version=$(printf '%s
' "$pkg_out" | sed -n 's/.*versionName=\([^[:space:]]*\).*/\1/p' | head -n1 | tr -d '\r')
if [[ -z "$version" ]]; then
version=$("${adb_cmd[@]}" shell cmd package list packages -f "$PACKAGE" 2>/dev/null | tr -d '\r' | sed -n 's/.*versionName=\([^[:space:]]*\).*/\1/p' | head -n1)
fi
if [[ -z "$version" ]]; then
echo "UNKNOWN: could not determine Chrome version"
exit 2
fi
if version_ge "$version" "$MIN_SAFE"; then
echo "PATCHED: $PACKAGE version $version >= $MIN_SAFE"
exit 0
else
echo "VULNERABLE: $PACKAGE version $version < $MIN_SAFE"
exit 1
fi