← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-10897 · CWE-787 · Disclosed 2026-06-04

Inappropriate implementation in GPU in Google Chrome prior to 149

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a lockpick for the browser’s inner door, not a battering ram at the perimeter

CVE-2026-10897 is a GPU-side Chrome flaw that can let hostile web content *potentially* break out of the browser sandbox. Per the supplied record, it affects Google Chrome versions prior to 149.0.7827.53; public release notices around this train show desktop fixes landing as 149.0.7827.53 for Linux and 149.0.7827.53/.54 for Windows and macOS. In plain terms: a user lands on attacker-controlled content, that content exercises a vulnerable GPU code path, and the payoff is a sandbox escape rather than a simple tab crash.

There is no vendor CVSS baseline here, so this is a first-principles assessment. Reality says HIGH, not CRITICAL: Chrome is everywhere and sandbox escapes matter, but this is still a client-side, user-driven browser exploit with no confirmed KEV listing, no public in-the-wild reporting, and no public weaponized PoC located from authoritative sources at the time of review. That combination keeps it urgent for endpoint hygiene, but not an all-hands emergency patch-over-weekend event.

"ASSESSED AT HIGH: serious browser sandbox-escape potential, but no active exploitation, no public PoC, and user-driven reach keep it below critical."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Land the victim on exploit content

The attacker needs a malicious page, ad slot, or redirect chain that a user’s Chrome browser will render. In practice this is a standard drive-by delivery problem using custom JavaScript and web content rather than a directly reachable network service.
Conditions required:
  • Target is using Google Chrome in an affected version range
  • User opens attacker-controlled content or content that embeds attacker-controlled resources
  • GPU-accelerated code path is available
Where this breaks in practice:
  • Requires user interaction in the broad sense: browsing to hostile content
  • Enterprise web filtering, ad blocking, Safe Browsing, isolation browsers, and user behavior reduce reach
  • This is not an unauthenticated exposed daemon you can hit at Internet scale
Detection/coverage: Secure web gateway, DNS filtering, browser telemetry, and clickstream logs can often show the delivery stage; vuln scanners can only tell you version exposure, not exploitation.
STEP 02

Trigger the vulnerable GPU path

The exploit then has to drive Chrome into the specific GPU implementation flaw, likely via crafted HTML/JS plus graphics-related primitives. Because the advisory language is broad and bug details are restricted, defenders should assume a fragile exploit path tied to renderer/GPU behavior rather than a trivial one-shot payload.
Conditions required:
  • Affected Chrome build
  • Correct platform and feature path hit during page rendering
  • Attacker content reaches the relevant GPU logic reliably enough
Where this breaks in practice:
  • Chrome exploit reliability is often sensitive to platform, driver stack, mitigations, and timing
  • Bug details are intentionally restricted, which usually slows commodity exploitation
  • Enterprises that disable risky graphics features on sensitive tiers shrink the reachable path
Detection/coverage: Exploit prevention visibility is usually indirect: browser crash spikes, unusual GPU-process instability, and EDR browser-memory alerts may show artifacts, but signature coverage is typically weak early on.
STEP 03

Cross the sandbox boundary

If successful, the attacker pivots from web-content execution context into a more privileged browser-adjacent context, which is the whole value of a sandbox escape. This is the difference between 'malicious page runs in a constrained cage' and 'malicious page starts interacting with the endpoint outside that cage.'
Conditions required:
  • A working exploit for this exact vulnerable build
  • Chrome sandbox boundary successfully bypassed
Where this breaks in practice:
  • Modern browser sandboxes are deliberately hard targets; many sandbox-escape bugs are real but not broadly reliable
  • The advisory says *potentially* perform a sandbox escape, which is a warning sign for non-deterministic impact
  • Post-exploit privileges still depend on the browser process context, not instant SYSTEM/root
Detection/coverage: EDR is most useful here if the escape causes browser child-process execution, suspicious IPC, token abuse, or filesystem writes outside normal browser patterns.
STEP 04

Convert escape into endpoint impact

Once outside the sandbox, the attacker can try credential theft, persistence staging, local discovery, or a second-stage payload. In a real intrusion this is where the browser bug stops being a browser problem and becomes an endpoint compromise problem.
Conditions required:
  • Successful sandbox escape
  • Follow-on payload or operator tradecraft
Where this breaks in practice:
  • Application control, EDR, privilege management, and egress controls can still break the chain
  • Escaping the sandbox is not the same thing as domain compromise; defenders get another chance here
Detection/coverage: Look for browser ancestry spawning interpreters or LOLBins, suspicious temp-file writes, token theft behavior, and outbound connections shortly after browser rendering events.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed active exploitation found in authoritative sources reviewed; not listed in CISA KEV at time of assessment.
Proof-of-concept availabilityNo public PoC located from authoritative or widely used exploit sources during review. Restricted bug handling on Chrome releases is typical and slows copycat weaponization.
EPSS0.00035 (~0.035%), which is very low and argues against imminent commodity exploitation pressure.
KEV statusNot KEV-listed as checked against the CISA catalog on 2026-06-05.
Affected versionsPer supplied intel and public advisories: Google Chrome prior to 149.0.7827.53; public desktop release notes around this fix line show 149.0.7827.53 for Linux and 149.0.7827.53/.54 for Windows/macOS.
Fixed versionsTreat 149.0.7827.53+ as the minimum safe floor, with Windows/macOS commonly reporting 149.0.7827.54 on this release train.
Exposure modelClient-side browser exposure, not Internet perimeter exposure. Shodan/Censys-style port scans are largely irrelevant; the risk maps to your installed Chrome fleet and user browsing behavior.
Disclosure date2026-06-04 from the supplied CVE intel; public downstream advisories appeared on 2026-06-03/2026-06-04 around the release train.
Researcher / reporterNot publicly attributed in the reviewed release snapshots. Chrome often withholds bug detail and credit until update adoption improves.
CVSS contextNo authoritative vendor CVSS published. By analogy to prior Chrome sandbox-escape records, the impact shape looks *high-severity*, but this assessment does not treat any inferred vector as official.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (8.2/10)

The decisive factor is that this is a remote, web-delivered sandbox-escape path in a massively deployed client. It stays out of CRITICAL because reach still depends on user browsing, exploit reliability against a modern browser sandbox is non-trivial, and there is currently no exploitation evidence or KEV pressure amplifying urgency.

MEDIUM Severity bucket selection
HIGH Affected version floor and fixed build family
MEDIUM Assessment that exploitation friction is materially higher than a perimeter RCE

Why this verdict

  • No vendor baseline exists so this is assessed from scratch using attacker path and fleet reality rather than inherited CVSS.
  • Wide exposure but not wide reachability: Chrome is everywhere, yet the bug is delivered through hostile content and user browsing, not a directly exposed enterprise service.
  • Sandbox escape is a real impact amplifier: if the bug works, it crosses the browser’s core isolation boundary and can hand the attacker endpoint-level leverage beyond a single tab.
  • Multiple friction points push down from CRITICAL: user interaction, GPU-path specificity, exploit reliability against modern sandboxing, and likely platform/driver sensitivity all narrow real-world success.
  • No live-fire indicators today: no KEV listing, no authoritative exploitation reporting, and no public PoC found during review.

Why not higher?

This is not a wormable server-side flaw and not a known-zero-day under active attack. The chain still depends on victim browsing, a functioning exploit for a restricted-detail GPU bug, and successful bypass of a hardened browser sandbox, all of which materially reduce real-world exploit throughput.

Why not lower?

A browser sandbox escape in Chrome is never routine backlog noise because the installed base is enormous and the boundary being crossed is security-critical. Even without active exploitation, this bug sits on a path attackers actively value for drive-by compromise and post-phishing follow-on access.

05 · Compensating Control

What to do — in priority order.

  1. Force browser auto-update and relaunch compliance — Make Chrome update enforcement measurable across the fleet and force relaunch completion so patched binaries actually load. For a HIGH verdict, deploy this compensating control within 30 days if you cannot prove prompt patch uptake through your browser management plane.
  2. Disable hardware acceleration on high-risk tiers — Temporarily turn off Chrome hardware acceleration for privileged admin workstations, jump hosts, SOC endpoints, and kiosk pools where browser compatibility allows it. This does not eliminate all graphics risk, but it reduces exposure to GPU-driven exploit paths; for a HIGH verdict, apply within 30 days to the small subset you cannot patch quickly.
  3. Restrict unmanaged browsing paths — Push risky user populations through enterprise browser management, remote browser isolation, or stricter web filtering for ad-heavy and newly registered domains. This lowers exploit delivery opportunities while the patch rolls out; for a HIGH verdict, put this in place within 30 days where existing controls are weak.
  4. Hunt for browser-to-child-process anomalies — Tune EDR detections for chrome spawning interpreters, LOLBins, or unexpected helper processes, plus suspicious writes from browser ancestry. This will not prevent the bug, but it raises the chance of catching successful post-escape activity; enable or tune within 30 days.
What doesn't work
  • Perimeter vulnerability scanning won't save you here; this is a client-side browser bug, not an exposed listening service.
  • A WAF is largely irrelevant because the exploit is rendered in the browser after content delivery, often through benign-looking web traffic.
  • Relying on crash monitoring alone is weak; successful exploitation may not crash, and silent failure modes are common in modern browser chains.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint or through your software inventory/remote execution platform with standard user rights; admin is not required. Invoke with python3 check_chrome_149_gpu_cve.py on macOS/Linux or py check_chrome_149_gpu_cve.py on Windows. It locates Chrome, reads the installed version, and prints VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
# check_chrome_149_gpu_cve.py
# Detects whether local Google Chrome is below 149.0.7827.53.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

import os
import platform
import re
import shutil
import subprocess
import sys

FIXED_VERSION = (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 cmp_version(a, b):
    return (a > b) - (a < b)


def run_version(cmd):
    try:
        p = subprocess.run(cmd, capture_output=True, text=True, timeout=10)
        out = (p.stdout or '') + ' ' + (p.stderr or '')
        ver = parse_version(out)
        if ver:
            return ver, ' '.join(cmd)
    except Exception:
        pass
    return None, None


def windows_candidates():
    paths = []
    for base in [os.environ.get('ProgramFiles'), os.environ.get('ProgramFiles(x86)'), os.environ.get('LocalAppData')]:
        if base:
            paths.append(os.path.join(base, 'Google', 'Chrome', 'Application', 'chrome.exe'))
    return [p for p in paths if p and os.path.exists(p)]


def mac_candidates():
    return ['/Applications/Google Chrome.app/Contents/MacOS/Google Chrome']


def linux_candidates():
    cmds = []
    for name in ['google-chrome', 'google-chrome-stable', 'chrome', 'chromium', 'chromium-browser']:
        path = shutil.which(name)
        if path:
            cmds.append(path)
    return cmds


def detect_version():
    system = platform.system().lower()

    if 'windows' in system:
        for exe in windows_candidates():
            ver, src = run_version([exe, '--version'])
            if ver:
                return ver, src
        try:
            import winreg  # noqa: F401
            reg_paths = [
                r'SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe',
                r'SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe',
            ]
            for hive in []:
                pass
        except Exception:
            pass
        return None, None

    if 'darwin' in system:
        for exe in mac_candidates():
            if os.path.exists(exe):
                ver, src = run_version([exe, '--version'])
                if ver:
                    return ver, src
        return None, None

    # Linux / other Unix-like
    for exe in linux_candidates():
        ver, src = run_version([exe, '--version'])
        if ver:
            return ver, src
    return None, None


def main():
    ver, src = detect_version()
    if not ver:
        print('UNKNOWN - Google Chrome version not detected on this host')
        sys.exit(2)

    ver_str = '.'.join(str(x) for x in ver)
    fixed_str = '.'.join(str(x) for x in FIXED_VERSION)

    # Windows/macOS may report 149.0.7827.54 on the same fixed release train;
    # any version >= 149.0.7827.53 is treated as patched.
    if cmp_version(ver, FIXED_VERSION) >= 0:
        print(f'PATCHED - detected version {ver_str} via {src}; fixed threshold is {fixed_str}+')
        sys.exit(0)
    else:
        print(f'VULNERABLE - detected version {ver_str} via {src}; below fixed threshold {fixed_str}')
        sys.exit(1)


if __name__ == '__main__':
    main()
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, treat this as a fleet-wide browser hygiene push, not an incident-response fire drill: identify all Chrome installs below 149.0.7827.53, force update-and-relaunch compliance through your browser management stack, and apply interim controls like hardware-acceleration disablement on privileged or high-risk workstations if patch uptake lags. For a HIGH verdict, the noisgate mitigation SLA is within 30 days for those compensating controls, and the noisgate remediation SLA is within 180 days for the vendor patch—though for a browser, most enterprises should complete the real patch rollout far sooner than that SLA ceiling.

Sources

  1. Chrome Releases - Early Stable Update for Desktop (149.0.7827.53/.54)
  2. Chrome Releases archive for 2026
  3. Canadian Centre for Cyber Security advisory AV26-544
  4. CISA Known Exploited Vulnerabilities Catalog
  5. FIRST EPSS
  6. Chrome Releases - Stable Channel Update for Desktop (Chrome 148 precedent and restricted bug handling language)
  7. Chrome Releases - Stable Channel Update for Desktop (Chrome 147 precedent)
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.