This is less a front-door break-in than a trick that only works if the user opens the right side window and taps in just the right pattern
CVE-2026-11226 is an *insufficient policy enforcement* bug in PreviewTab on Google Chrome for Android. Per NVD, it affects Chrome on Android prior to 149.0.7827.53 and lets a remote attacker use a crafted HTML page to bypass the browser's same-origin policy if the victim also performs specific UI gestures inside the affected preview flow. That makes this a client-side browser logic flaw with a narrow trigger path, not a general Chrome-on-Android RCE or a server-reachable exposure.
The vendor baseline of MEDIUM 6.5 already overstates how much of an enterprise fleet is realistically reachable. The decisive friction is not just generic UI:R; it is specific UI gestures inside a specific Android-only PreviewTab path, which sharply constrains weaponization, scale, and reliability. Chromium's own record labels the issue's internal security severity as Low, and that matches real-world patch priority better than the CVSS headline.
4 steps from start to impact.
Deliver a lure page
- Victim uses Chrome on Android
- Victim is on a vulnerable version earlier than 149.0.7827.53
- Victim opens attacker-controlled content
- Android-only scope excludes desktop Chrome and non-Chrome mobile browsers
- Most enterprises already have mobile app auto-update via Google Play or MDM
- Email gateways, safe-link rewriting, and user training reduce successful lure opens
Steer the user into PreviewTab
- PreviewTab workflow must be reachable from the victim's browsing context
- Victim must interact with that workflow rather than a normal tab open
- This is a niche feature path, not every page load
- Many campaigns fail because users do not enter the required preview state
- Exploit reliability drops across OEM Android builds and UX variations
Collect the required UI gestures
- Victim must perform the necessary gestures
- The gestures must occur in the vulnerable preview state
- Extra interaction beyond simply opening a link
- Modern phishing resistance breaks down the funnel before this step
- Small UI or timing changes can kill exploit reliability
Abuse policy failure to break origin boundaries
C:N/I:H/A:N. References: NVD and Chrome's Site Isolation overview.- Victim must still be in the vulnerable PreviewTab state
- The crafted page must successfully drive the origin confusion
- Impact appears limited to a browser security-boundary bypass, not device compromise
- Site Isolation and other browser hardening reduce blast radius even when SOP logic fails
- No public PoC or in-the-wild exploitation evidence currently lowers attacker confidence
The supporting signals.
| In-the-wild status | No public evidence of active exploitation located in vendor or CISA sources at time of review. |
|---|---|
| KEV status | Not listed in CISA's Known Exploited Vulnerabilities catalog. |
| Proof-of-concept | No public PoC found in the reviewed sources; Chromium bug details are access-restricted. |
| EPSS | 0.0001 from the supplied intel, which is effectively floor-level exploitation probability. |
| Vendor / platform severity | CISA-ADP shows 6.5 MEDIUM in NVD, but the CVE description also states Chromium security severity: Low. |
| CVSS vector meaning | AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N means remote and unauthenticated, but user interaction is required and the published impact is integrity-only, with no confidentiality or availability impact claimed. |
| Affected versions | Google Chrome on Android prior to 149.0.7827.53. |
| Fixed versions | Treat 149.0.7827.53 or later as patched for this CVE; Android release trains may ship a later patched build number while still containing the fix. |
| Scanning / exposure data | Internet-wide exposure scanning is largely irrelevant here. This is a client-side mobile browser UX bug, so Shodan/Censys-style exposure counting does not meaningfully measure reachable population. |
| Disclosure | Publicly disclosed 2026-06-04; reporter identity is not public in the reviewed sources. |
noisgate verdict.
The single biggest downward driver is the exploit chain's specific-gesture requirement inside an Android-only PreviewTab path. That makes this a narrow, unreliable client-side attack that does not scale cleanly across a 10,000-device fleet, even though the abstract security boundary involved is real.
Why this verdict
- Downgrade for attacker position: this is remote but only through a victim-driven mobile browsing session, not a service an attacker can hit directly at internet scale.
- Downgrade for prerequisite stacking: the chain requires Chrome on Android + vulnerable build + PreviewTab path + specific UI gestures. Each prerequisite cuts the reachable population and reliability.
- Downgrade for control coverage: modern email security, safe browsing, mobile threat defense, and app auto-update all act before or during the only realistic exploit path.
- Downgrade for blast radius: published impact is a browser origin-policy bypass, not OS-level code execution, privilege escalation, or durable device takeover.
- Downgrade for threat intel: no KEV listing, no public exploitation, no public PoC, and near-zero EPSS argue against emergency prioritization.
Why not higher?
This does not deserve MEDIUM-or-higher operational handling because it is not broadly reachable or reliably weaponizable. A same-origin policy bypass sounds serious in the abstract, but the Android-only scope and the required PreviewTab gesture choreography are exactly the kind of compounding frictions that should push a patch team downward, not upward.
Why not lower?
This is still a real browser security-boundary failure, not a cosmetic bug. If the attacker lands the right user journey on a vulnerable Android device, origin confusion can still enable meaningful web-session abuse, so it should not be ignored outright.
What to do — in priority order.
- Enforce Chrome auto-update on managed Android — Use Google Play managed app policy or your MDM to require current Chrome builds so vulnerable versions age out naturally. For a LOW verdict there is no mitigation SLA under noisgate, so treat this as backlog hygiene and keep the fleet on patched app baselines before the 365-day remediation window closes.
- Prefer managed browser channels — Keep enterprise Android devices on approved browser packages with update visibility in MDM. This reduces the long tail of stranded versions and is the most practical defense for a client-side browser bug when direct network shielding is weak.
- Block obvious lure domains fast — Use email/web filtering and Safe Browsing-integrated controls to kill malicious landing pages before users ever reach the required PreviewTab flow. Even without a formal mitigation SLA for LOW, this is worth doing opportunistically when threat intel identifies active lure infrastructure.
- Inventory vulnerable package versions — Query
com.android.chromeversion data from MDM oradbso you can identify Android devices below 149.0.7827.53. For this severity, do the inventory work as part of normal monthly mobile-app hygiene rather than as an interruption-driven campaign.
- A perimeter vulnerability scanner will not help much; this is not a remotely enumerable service flaw.
- Desktop Chrome patch status is not a reliable proxy; the CVE is Android-specific and lives in a mobile UI path.
- WAF rules do not solve the core problem because exploitation happens inside the victim browser's preview workflow after the page is loaded.
Crowdsourced verification payload.
Run this on an auditor workstation with adb installed and USB/network debugging access to the Android device. Invoke it as python3 check_cve_2026_11226.py or python3 check_cve_2026_11226.py SERIAL123; it needs permission to talk to adb, but not root on the phone.
#!/usr/bin/env python3
# check_cve_2026_11226.py
# Verify whether Google Chrome on Android is vulnerable to CVE-2026-11226.
# Exit codes:
# 0 = PATCHED
# 1 = VULNERABLE
# 2 = UNKNOWN / error
import re
import subprocess
import sys
PACKAGE = 'com.android.chrome'
FIXED = '149.0.7827.53'
def run(cmd):
p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
return p.returncode, p.stdout.strip(), p.stderr.strip()
def parse_version(v):
m = re.match(r'^(\d+)\.(\d+)\.(\d+)\.(\d+)$', v.strip())
if not m:
return None
return tuple(int(x) for x in m.groups())
def cmp_ver(a, b):
return (a > b) - (a < b)
def adb_base(serial=None):
base = ['adb']
if serial:
base += ['-s', serial]
return base
def main():
serial = sys.argv[1] if len(sys.argv) > 1 else None
base = adb_base(serial)
rc, out, err = run(base + ['get-state'])
if rc != 0 or 'device' not in out:
print('UNKNOWN: adb cannot reach a device')
if err:
print(err)
sys.exit(2)
rc, out, err = run(base + ['shell', 'dumpsys', 'package', PACKAGE])
if rc != 0 or not out:
print(f'UNKNOWN: unable to query package {PACKAGE}')
if err:
print(err)
sys.exit(2)
m = re.search(r'versionName=([^\s]+)', out)
if not m:
print('UNKNOWN: versionName not found for com.android.chrome')
sys.exit(2)
installed = m.group(1).strip()
inst_v = parse_version(installed)
fixed_v = parse_version(FIXED)
if inst_v is None or fixed_v is None:
print(f'UNKNOWN: could not parse version: installed={installed}')
sys.exit(2)
print(f'Installed Chrome version: {installed}')
print(f'Fixed version threshold: {FIXED}')
if cmp_ver(inst_v, fixed_v) < 0:
print('VULNERABLE')
sys.exit(1)
else:
print('PATCHED')
sys.exit(0)
if __name__ == '__main__':
main()
If you remember one thing.
com.android.chrome below 149.0.7827.53, confirm auto-update is working, and let normal mobile app maintenance close the gap. Because this is a LOW reassessment, there is no noisgate mitigation SLA and noisgate remediation SLA is backlog hygiene, so document the rationale now and complete patching in routine app-update cadence rather than launching an urgent enterprise-wide response.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.