This is the attacker checking couch cushions after they already got inside the house
The supplied record describes an *uninitialized use* bug in Chrome's Skia graphics component affecting builds prior to 149.0.7827.53 and says the attacker must have already compromised the renderer process to pull sensitive data from process memory. That matters more than the CWE label: this is not the bug that gets them in; it is the bug they use *after* gaining execution inside a sandboxed renderer. Public June 2026 Chrome CNA data also shows a very similar Skia bug in the same release train, but the public text there maps to cross-origin data leakage rather than renderer-compromise-required memory disclosure, so the record you provided appears to have an ID/description mismatch.
Google's MEDIUM 6.5 baseline is fine *if* you read it as a browser-side confidentiality issue in isolation, but it is too generous for enterprise patch triage when the renderer-compromise prerequisite is real. Requiring prior renderer code execution is heavy friction: it implies the attacker already landed a separate browser bug or chained exploit, and Chrome's sandbox and site isolation are specifically meant to contain that stage. That pushes this down into cleanup-priority territory rather than break-glass patching.
4 steps from start to impact.
Land code execution in the renderer first
- Victim must browse attacker-controlled content or otherwise process malicious web content
- A separate renderer compromise primitive must already exist and succeed
- Chrome renderer sandbox must not have stopped the precondition exploit
- This prerequisite is the whole game: it assumes a prior successful browser exploit
- Modern Chrome isolates renderer processes and heavily constrains them
- Without a working first-stage exploit, this CVE is inert
Reach the vulnerable Skia code path
- Attacker-controlled page content can invoke the affected Skia routines
- The target build is older than
149.0.7827.53 - The vulnerable path is reachable on the victim platform and configuration
- Reaching the bug may depend on graphics state, allocator behavior, and page timing
- Browser exploit reliability drops across hardware, OS, and Chrome minor-version variance
- Some enterprise GPU/graphics hardening settings can make rendering exploit paths less predictable
Read residual memory
- Sensitive data must actually be present in the affected renderer memory space
- The leak must be stable enough to recover usable bytes
- Site/process isolation must not have segmented the interesting target data away from the compromised renderer
- Leak quality is often noisy and partial
- Chrome site isolation limits what one compromised renderer can naturally see
- Many enterprise users will not have high-value cross-origin targets co-resident in the same reachable process context
Turn leaked bytes into something useful
- Leaked data must include credentials, secrets, or exploit-relevant pointers
- The attacker must be able to exfiltrate or reuse the data before sessions expire
- Downstream controls like MFA and conditional access must not neutralize token reuse
- Confidentiality-only outcome limits direct business impact
- Short-lived sessions and token binding reduce reuse value
- Most enterprises care more about the first-stage exploit or sandbox escape than this leak itself
The supporting signals.
| Record integrity | There is a likely CVE/description mismatch. The exact public Chrome CNA text for *"Uninitialized Use in Skia ... leak cross-origin data via a crafted HTML page"* appears under CVE-2026-11159, published 2026-06-04. Your supplied title fragment instead says *"who had compromised the renderer process"*, which materially changes severity. |
|---|---|
| In-the-wild status | No public sign of active exploitation in the sources reviewed. CISA KEV does not list this case, and Google did not flag it as exploited in the release materials we found. |
| PoC availability | No public working PoC found. The Chromium reference issue 501861921 is referenced by the CNA mirror, but public exploit details were not available at review time. |
| EPSS | Using your supplied intel: 0.00035. That is extremely low and consistent with a bug that is either hard to weaponize, low-priority to attackers, or dependent on another exploit stage. EPSS methodology reference: FIRST EPSS. |
| KEV status | Using your supplied intel: Not KEV-listed. No known KEV date applies. |
| CVSS interpretation | Vendor baseline: 6.5 / CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N. Read literally, that means user interaction is required and impact is confidentiality-only. If the renderer-compromise prerequisite in your text is accurate, then the real-world reachability is worse for the attacker than that vector suggests. |
| Affected versions | Chrome desktop builds before 149.0.7827.53 are affected. Google and the Canadian Cyber Centre both place the fix in the 149.0.7827.53/.54 June 2026 release train for desktop Chrome. |
| Fixed versions | Patch floor is 149.0.7827.53 for Linux and 149.0.7827.53/.54 for Windows/macOS per Chrome Releases and Cyber Centre AV26-544. |
| Exposure and scanning reality | This is a client-side browser issue, so internet scan engines like Shodan/Censys/FOFA are mostly irrelevant. Exposure is operationally huge in install base but not remotely enumerable; exploitation requires victim browsing behavior and, if your supplied text is correct, a prior renderer compromise. |
| Architecture friction | Chromium's own design docs say renderer processes are sandboxed and that site isolation treats compromised renderers as part of the threat model. That is the key downward pressure here: a renderer-only memory leak has to fight sandboxing and site isolation to become an enterprise incident. |
noisgate verdict.
The decisive factor is the attacker position requirement: if exploitation requires an already-compromised renderer, this bug is post-initial-access inside Chrome's containment model, not a primary intrusion vector. That sharply limits who can use it, how often it matters, and how much standalone risk it adds compared with the bug that got the attacker into the renderer in the first place.
Why this verdict
- Requires prior compromise: the supplied description says the attacker must have already compromised the renderer process, which means this is not an initial-access bug.
- Post-sandbox context: Chrome's renderer sandbox and site isolation are designed to constrain exactly this sort of post-renderer activity, reducing blast radius versus a direct browser-process or OS compromise.
- Confidentiality-only outcome: the stated impact is information disclosure, not direct code execution, persistence, or privilege escalation.
- No exploitation evidence: no KEV listing, no public exploitation statement, and no public PoC lowers urgency for a 10,000-endpoint fleet.
- Scanner blind spot cuts both ways: yes, this is hard to detect directly, but it is also hard to operationalize without a separate exploit chain.
Why not higher?
Because the hardest step is outside this CVE: the attacker must first win renderer execution with some other bug or chain. Once a finding is that dependent on prior compromise, it stops being a first-order patch emergency and becomes a chain-hardening issue. Also, the described impact is bounded to confidentiality loss rather than arbitrary code execution or system takeover.
Why not lower?
It still lives in one of the most exposed applications in the enterprise: the web browser. If the prerequisite is satisfied, memory disclosure inside a compromised renderer can still help steal tokens, recover sensitive fragments, or improve reliability for a follow-on sandbox escape. So this is not ignorable; it is just not front-of-the-line emergency work.
What to do — in priority order.
- Force-enable Chrome auto-update — Make sure fleet policy is not delaying desktop Chrome security rollouts unnecessarily. For a LOW noisgate verdict there is no mitigation SLA, so this is hygiene rather than emergency containment; use it to keep endpoints drifting to
149.0.7827.53/54inside the normal backlog window. - Reduce exposure to malicious browsing — Keep web filtering, remote browser isolation where already deployed, safe browsing, and ad/script reputation controls enabled. These do not fix the bug, but they lower the chance of users reaching the kind of exploit staging content needed to satisfy the renderer-compromise prerequisite; implement and validate during normal operations, not as an emergency.
- Harden identity reuse paths — Enforce MFA, short session lifetimes, and conditional access for sensitive SaaS. If a browser leak ever exposes tokens or session material, these controls limit downstream abuse; for a LOW verdict, tune and validate within routine security engineering cycles.
- Monitor browser child-process anomalies — Use EDR and browser telemetry to alert on unusual
chrome.exechild behavior, exploit-like crashes, or suspicious network egress after browser instability. This is one of the few practical ways to catch real abuse because direct vulnerability scanning cannot see runtime exploit chains.
- A perimeter scan will not help; this is a client-side browser flaw and there is no meaningful external service to probe.
- Treating the CVSS number alone as patch priority misses the key friction: *already compromised renderer* means the vendor score overstates practical reachability for enterprise triage.
- Relying on signature-based IDS for a clean exploit pattern is weak here; crafted HTML/graphics payloads and post-compromise memory leakage rarely produce stable network signatures.
Crowdsourced verification payload.
Run this on the target endpoint or via your software-distribution/remote-exec tooling. Invoke with python3 check_chrome_149.py on macOS/Linux or py check_chrome_149.py on Windows; no admin rights are required unless your environment restricts access to application metadata, and the script checks common Chrome install paths plus the Windows registry.
#!/usr/bin/env python3
# check_chrome_149.py
# Exit codes:
# 0 = PATCHED
# 1 = VULNERABLE
# 2 = UNKNOWN
import os
import platform
import re
import subprocess
import sys
TARGET = (149, 0, 7827, 53)
def parse_version(s):
m = re.search(r'(\d+)\.(\d+)\.(\d+)\.(\d+)', s or '')
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 run_cmd(cmd):
try:
p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=10)
if p.returncode == 0:
return p.stdout.strip() or p.stderr.strip()
except Exception:
pass
return ''
def check_windows():
# Registry first
reg_paths = [
r'HKLM\SOFTWARE\Google\Chrome\BLBeacon',
r'HKLM\SOFTWARE\WOW6432Node\Google\Chrome\BLBeacon',
r'HKCU\SOFTWARE\Google\Chrome\BLBeacon',
]
for rp in reg_paths:
out = run_cmd(['reg', 'query', rp, '/v', 'version'])
v = parse_version(out)
if v:
return v, f'registry:{rp}'
# Common executable paths
candidates = [
os.path.expandvars(r'%ProgramFiles%\Google\Chrome\Application\chrome.exe'),
os.path.expandvars(r'%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe'),
os.path.expandvars(r'%LocalAppData%\Google\Chrome\Application\chrome.exe'),
]
for path in candidates:
if path and os.path.exists(path):
out = run_cmd([path, '--version'])
v = parse_version(out)
if v:
return v, path
return None, ''
def check_macos():
candidates = [
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
os.path.expanduser('~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),
]
for path in candidates:
if os.path.exists(path):
out = run_cmd([path, '--version'])
v = parse_version(out)
if v:
return v, path
return None, ''
def check_linux():
cmds = [
['google-chrome', '--version'],
['google-chrome-stable', '--version'],
['chromium-browser', '--version'],
['chromium', '--version'],
]
for cmd in cmds:
out = run_cmd(cmd)
v = parse_version(out)
if v:
return v, ' '.join(cmd)
paths = [
'/opt/google/chrome/google-chrome',
'/usr/bin/google-chrome',
'/usr/bin/google-chrome-stable',
'/usr/bin/chromium-browser',
'/usr/bin/chromium',
]
for path in paths:
if os.path.exists(path):
out = run_cmd([path, '--version'])
v = parse_version(out)
if v:
return v, path
return None, ''
def main():
system = platform.system().lower()
if 'windows' in system:
version, source = check_windows()
elif 'darwin' in system:
version, source = check_macos()
else:
version, source = check_linux()
if not version:
print('UNKNOWN: Google Chrome version not found')
sys.exit(2)
# For this assessment, anything below 149.0.7827.53 is vulnerable.
# Windows/macOS may show .54 in fixed builds; that still compares as patched.
if cmp_ver(version, TARGET) < 0:
print(f'VULNERABLE: detected Chrome {".".join(map(str, version))} from {source}; expected >= {".".join(map(str, TARGET))}')
sys.exit(1)
else:
print(f'PATCHED: detected Chrome {".".join(map(str, version))} from {source}; expected >= {".".join(map(str, TARGET))}')
sys.exit(0)
if __name__ == '__main__':
main()
If you remember one thing.
149.0.7827.53/54 in the next normal browser wave and document the renderer-compromise prerequisite as the reason it did not get escalated. If you later validate active exploitation or a reliable chain, re-rank immediately and compress the timeline.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.