This is a side door inside the browser, not a front gate hanging open on the internet
CVE-2026-11259 is an improper input validation flaw in Chrome's Cast component that can let a remote attacker bypass same-origin policy by getting a user onto a crafted HTML page. Based on Google's advisory and NVD, affected builds are Google Chrome prior to 149.0.7827.53; Google shipped fixes in 149.0.7827.53 for Linux and 149.0.7827.53/54 for Windows and macOS.
The vendor's MEDIUM 4.3 is already conservative, and in real enterprise conditions I'd actually push it down to LOW. The decisive friction is that this is still a client-side, user-driven browser bug in a specific feature area, with no code execution, no privilege gain, no published in-the-wild exploitation, and no meaningful internet-exposed service surface to mass-scan or automate against.
3 steps from start to impact.
Land the user on attacker HTML
- Target is running Chrome earlier than 149.0.7827.53
- User visits attacker-controlled or attacker-influenced web content
- Enterprise controls do not block the destination or content path
- This is UI:R; no click, no render, no exploit path
- Email security, web filtering, safe browsing, and user training remove a lot of commodity delivery volume
- Browsers auto-update aggressively in many managed fleets, shrinking the exposed window
Reach the Cast code path
- Vulnerable Cast functionality is present and reachable in the target build
- The malicious page can exercise the affected Cast behavior from the browsing context
- Feature-specific reachability narrows the real population versus 'all Chrome users'
- Some enterprises suppress or simply do not use Cast-related workflows on managed desktops
- Google keeps bug details restricted until broad patch adoption, which also slows copycat weaponization
Abuse SOP bypass for browser-context impact
- Victim is authenticated to a relevant web application or browsing sensitive content
- The bypass meaningfully intersects with a valuable target workflow
- Impact stays inside the browser trust boundary; this is not instant host takeover
- Session scope, site design, anti-CSRF defenses, and modern browser isolation features can reduce practical payoff
- Blast radius is usually one user session at a time
The supporting signals.
| In-the-wild status | No public evidence of active exploitation found in Google's release notes, NVD enrichment, or CISA KEV as of 2026-06-06. |
|---|---|
| KEV status | Not listed in CISA's Known Exploited Vulnerabilities Catalog. |
| PoC availability | No credible public PoC surfaced in quick-source review; Chromium bug details remain restricted at issue 499215943, which raises attacker friction. |
| EPSS | User-supplied EPSS is 0.0002, which is effectively background noise and consistent with a low-priority client-side bug absent exploitation evidence. EPSS methodology and feed are published by FIRST and its API/docs. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N = remote delivery, no auth, but user interaction required and only low integrity impact in the published model. |
| Affected versions | Google/NVD say Chrome prior to 149.0.7827.53 is affected. The desktop release train references 149.0.7827.53 (Linux) and 149.0.7827.53/54 (Windows/Mac) as fixed builds. |
| Fixed versions | Patch floor: Linux 149.0.7827.53; Windows/macOS 149.0.7827.53 or 149.0.7827.54, per Google's stable update and early stable note. |
| Disclosure and reporter | Published in NVD on 2026-06-04, modified 2026-06-05; Google says it was reported by Google on 2026-04-03. |
| Exposure / scanning reality | Shodan/Censys/FOFA-style exposure data is not decision-useful here because this is a desktop browser client vulnerability, not an internet-facing daemon you can census from the edge. Your real exposure metric is fleet version inventory, not external ASM. |
| Vendor-vs-reality | Google labels the Chromium severity Low in the release notes, while the supplied vendor/CISA-ADP CVSS is 4.3 MEDIUM in NVD. For enterprise patch triage, the real-world friction aligns closer to LOW. |
noisgate verdict.
The single biggest downward driver is that exploitation still starts with user-driven browsing to attacker content and appears tied to a specific Cast feature path, not a broadly weaponizable internet-facing service or an RCE primitive. With no KEV listing, no public exploitation evidence, and browser-context-limited impact, this is patchable hygiene rather than an emergency patching event.
Why this verdict
- User interaction required: this is
UI:R, so there is no wormable or unauthenticated drive-by service surface to hammer at scale without first winning user navigation. - Feature-path friction: the bug sits in Cast, which narrows reachable population versus a core renderer, network stack, or PDF parser flaw that every page can hit more predictably.
- Impact is bounded: published scoring indicates same-origin policy bypass / low integrity impact, not sandbox escape, host compromise, or broad data theft.
- No active exploitation signal: not in KEV, no public Google warning about in-the-wild abuse, and user-supplied EPSS 0.0002 is exceptionally low.
- No edge exposure: this is a client browser bug, so the usual internet census amplifiers — Shodan mass visibility, exposed admin ports, unauthenticated perimeter reachability — do not apply.
Why not higher?
A higher severity would need a stronger amplifier: active exploitation, a public exploit chain, broad feature reachability, or materially worse impact such as code execution or sandbox escape. We have none of those. The path is real, but it is still a user-mediated browser exploit with constrained blast radius and no evidence of operationalized abuse.
Why not lower?
I would not drop this to IGNORE because it is still remote content-triggerable and same-origin bypasses can matter when users are authenticated to internal or SaaS apps. On a 10,000-host fleet, even low-probability browser bugs deserve version hygiene because browsers are high-frequency attack surfaces.
What to do — in priority order.
- Verify Chrome auto-update health — Make sure managed endpoints are actually taking Chrome updates and not stalled on dead rings or disabled Google Update services. For a LOW verdict there is no mitigation SLA; use normal fleet hygiene and confirm version drift is collapsing during your routine browser maintenance cycle.
- Prefer stable browser rings for high-risk users — Executives, admins, finance, and developer endpoints are more likely to be targeted with malicious links and docs, so keep them on the fastest-supported stable update cadence. Even without a dated LOW-finding SLA, this reduces exposure to the entire class of browser-content attacks, not just this CVE.
- Keep SWG and Safe Browsing controls enforced — This vulnerability still needs a hostile page delivery path, so URL filtering, DNS filtering, category blocking, and browser reputation services remain worthwhile choke points. Maintain them as standing controls; they reduce commodity exploit reach while patching catches up through normal operations.
- Monitor version inventory, not perimeter scans — Because this is a client-side browser flaw, your success metric is endpoint version coverage from EDR, MDM, SCCM/Intune, Jamf, or package inventory. For a LOW verdict, track stragglers and remediate them in standard desktop backlog rather than creating a special emergency campaign.
- Perimeter vulnerability scanning doesn't help much here because there is no meaningful internet-facing service signature for a desktop browser SOP bug.
- Network segmentation is not a primary control; the exploit starts from user-rendered web content, not lateral movement between internal subnets.
- MFA does not stop the vulnerability itself. It may reduce downstream account abuse in some workflows, but it does not prevent a browser-side same-origin bypass from triggering.
Crowdsourced verification payload.
Run this on the target endpoint or through your software management agent. Invoke it with python3 chrome_cve_2026_11259_check.py on macOS/Linux or py chrome_cve_2026_11259_check.py on Windows; no admin privileges are required as long as the current user can execute Chrome's binary or read its app metadata.
#!/usr/bin/env python3
# Check Google Chrome version against CVE-2026-11259 fixed floor.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
import os
import platform
import re
import subprocess
import sys
from pathlib import Path
FIXED = (149, 0, 7827, 53)
def parse_version(text):
m = re.search(r'(\d+)\.(\d+)\.(\d+)\.(\d+)', text)
if not m:
return None
return tuple(int(x) for x in m.groups())
def run_version(cmd):
try:
p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, timeout=5)
return p.stdout.strip()
except Exception:
return None
def get_windows_version():
candidates = [
Path(os.environ.get('ProgramFiles', 'C:\\Program Files')) / 'Google/Chrome/Application/chrome.exe',
Path(os.environ.get('ProgramFiles(x86)', 'C:\\Program Files (x86)')) / 'Google/Chrome/Application/chrome.exe',
Path(os.environ.get('LocalAppData', '')) / 'Google/Chrome/Application/chrome.exe',
]
for path in candidates:
if path and path.exists():
out = run_version([str(path), '--version'])
if out:
return out, str(path)
return None, None
def get_macos_version():
candidates = [
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
str(Path.home() / 'Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),
]
for path in candidates:
if os.path.exists(path):
out = run_version([path, '--version'])
if out:
return out, path
return None, None
def get_linux_version():
candidates = [
['google-chrome', '--version'],
['google-chrome-stable', '--version'],
['/usr/bin/google-chrome', '--version'],
['/usr/bin/google-chrome-stable', '--version'],
]
for cmd in candidates:
out = run_version(cmd)
if out:
return out, cmd[0]
return None, None
def compare_versions(found, fixed):
if found < fixed:
return 'VULNERABLE'
return 'PATCHED'
def main():
system = platform.system().lower()
if 'windows' in system:
out, loc = get_windows_version()
elif 'darwin' in system:
out, loc = get_macos_version()
elif 'linux' in system:
out, loc = get_linux_version()
else:
print('UNKNOWN - unsupported operating system')
sys.exit(2)
if not out:
print('UNKNOWN - Google Chrome not found')
sys.exit(2)
ver = parse_version(out)
if not ver:
print(f'UNKNOWN - unable to parse version from: {out}')
sys.exit(2)
status = compare_versions(ver, FIXED)
version_str = '.'.join(str(x) for x in ver)
fixed_str = '.'.join(str(x) for x in FIXED)
print(f'{status} - installed={version_str} fixed_floor={fixed_str} path={loc}')
if status == 'PATCHED':
sys.exit(0)
elif status == 'VULNERABLE':
sys.exit(1)
else:
sys.exit(2)
if __name__ == '__main__':
main()
If you remember one thing.
Sources
- NVD CVE-2026-11259
- Google Chrome Releases - Stable Channel Update for Desktop (June 2, 2026)
- Google Chrome Releases - Early Stable Update for Desktop (May 29, 2026)
- Chromium issue 499215943
- CISA Known Exploited Vulnerabilities Catalog
- FIRST EPSS API documentation
- Canadian Centre for Cyber Security advisory AV26-544
- SecurityWeek - Chrome 149 Patches 429 Vulnerabilities
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.