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

Insufficient validation of untrusted input in GPU in Google Chrome prior to 149

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

This is a weak seam behind Chrome’s airlock, not a front-door smash

CVE-2026-11098 is an improper input validation flaw in Chrome's GPU path affecting versions before 149.0.7827.53 on Linux and before the 149.0.7827.53/54 desktop rollout on Windows/macOS. Google labels it *Medium* and the public Chrome release post only names the bug class and component, but the supplied CVSS vector (AV:N/AC:L/PR:N/UI:R/C:H/I:N/A:N) strongly suggests an information-disclosure style outcome rather than direct code execution. Based on Chrome's normal phrasing for similar 2026 bugs, the most likely interpretation is: an attacker first gets code or logic execution inside the renderer, then abuses GPU-side validation gaps to cross a protection boundary and expose data that renderer code should not read.

The vendor's 6.5/MEDIUM is defensible in a browser-lab vacuum, but it overstates the Monday-morning urgency for enterprise patch triage because the decisive prerequisite is already having a compromised renderer process. That means this CVE is not your initial access problem; it is a *second-stage chain helper* inside an already-successful browser exploit. Chrome is everywhere, so the population is broad, but the reachable population for this specific bug is much narrower because a separate renderer bug, exploit primitive, or equivalent compromise has to land first.

"This is a chainable post-renderer bug, not a clean one-click enterprise fire drill"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Land code or control in the renderer

The attacker needs a separate browser bug, a logic flaw, or some other path that gives meaningful control inside Chrome's renderer process. Chromium explicitly models 'compromised renderers' as a threat case, which is a tell that this CVE belongs to the post-compromise hardening boundary rather than the initial compromise layer.
Conditions required:
  • User visits attacker-controlled content or otherwise triggers a separate browser weakness
  • Attacker gains execution or equivalent strong control in the renderer process
Where this breaks in practice:
  • This CVE is not the entry bug; a different bug has to fire first
  • Modern browser exploit chains usually burn a scarce renderer primitive before this CVE even matters
  • EDR won't stop renderer memory corruption reliably, but Safe Browsing, site isolation, and exploit mitigations reduce chain reliability
Detection/coverage: No scanner identifies this step remotely. You detect it indirectly through browser crash telemetry, exploit protection alerts, or post-exploitation browser forensics.
STEP 02

Send malformed GPU-facing input from the compromised renderer

Once in the renderer, the attacker can drive GPU-related APIs and IPC pathways using crafted page content and serialized commands. Chromium's GPU architecture intentionally separates renderer and GPU work; the renderer serializes commands into shared memory and the GPU process parses them.
Conditions required:
  • Renderer can reach GPU/WebGL/compositing code paths on the target platform
  • The target Chrome build is older than the June 2, 2026 stable fix
Where this breaks in practice:
  • Platform and driver differences often make GPU bug reliability ugly
  • Some enterprise fleets disable or constrain graphics features in VDI, hardened kiosks, or server-hosted browsing
  • Chrome's GPU sandbox and IPC validation are specifically there to make this class of step harder
Detection/coverage: Version-based scanner coverage is good on managed endpoints; exploit-attempt coverage is poor. Expect inventory tools to tell you *who is exposed*, not *who was attacked*.
STEP 03

Exploit the validation gap at the renderer-to-GPU trust boundary

The bug class is insufficient validation of untrusted input in GPU, meaning attacker-controlled renderer-originated data is not validated correctly before higher-privilege GPU-side handling. Given the supplied CVSS (C:H/I:N/A:N), the most plausible outcome is unauthorized data exposure across an isolation boundary rather than stable code execution. That makes this a confidentiality amplifier in an exploit chain, not a standalone workstation takedown.
Conditions required:
  • The malformed command/data sequence matches the vulnerable path
  • The affected GPU code path is actually reachable on the host
Where this breaks in practice:
  • No public PoC located in reviewed sources
  • No public in-the-wild evidence located in reviewed sources
  • Reliability likely varies by OS, graphics stack, and hardware acceleration behavior
Detection/coverage: There is little direct telemetry beyond crashes or anomalous browser/GPU process behavior. Browser sandbox escapes and boundary leaks are usually confirmed by patch level plus incident context, not signature hits.
STEP 04

Use the leak to advance the chain

If exploitation succeeds, the attacker can likely read data the compromised renderer should not have been able to access, such as cross-origin content or similarly protected browser-resident material. That matters in targeted chains, but it does not automatically translate to host takeover, domain compromise, or mass wormability.
Conditions required:
  • Valuable browser-resident secrets or cross-origin data exist in scope
  • Attacker can operationalize the disclosed data into follow-on actions
Where this breaks in practice:
  • Blast radius is usually the browsing session or user context, not the whole endpoint fleet
  • Site Isolation and other browser defenses limit what a compromised renderer can read by default
  • This step has no internet-exposed service surface; every victim still needs client-side interaction
Detection/coverage: DLP, CASB, and identity telemetry may catch abuse of stolen session data later, but they do not reliably detect the browser-side leak itself.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo public exploitation evidence found in reviewed sources. This is an inference from the absence of vendor zero-day language, no KEV entry, and no credible public reporting tying this CVE to active campaigns.
KEV statusNot listed in CISA KEV as reviewed via the KEV catalog.
PoC availabilityNo reputable public PoC or exploit repo surfaced in reviewed sources. Chromium issue details remain restricted, which is normal for fresh browser bugs.
EPSSProvided intel shows 0.00047 (0.047%) — extremely low near-term exploitation probability. FIRST's EPSS API supports per-CVE score and percentile lookups, but the percentile for this CVE was not independently retrieved here.
Vendor severity / scoreMEDIUM / 6.5 with vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N.
Vector interpretationUI:R means the user still has to hit attacker content, and C:H/I:N/A:N says data exposure without integrity or availability impact. That is materially less urgent than Chrome RCEs or sandbox escapes with I:H/A:H.
Affected versionsChrome before 149.0.7827.53 on Linux; desktop stable rollout fixed builds are 149.0.7827.53/54 for Windows/macOS per Google's release post and the Canadian Cyber Centre advisory.
Fixed versionsUpdate to Chrome 149.0.7827.53 or later on Linux, and to the June 2, 2026 desktop stable fixed build (149.0.7827.53/54) on Windows/macOS. There are no meaningful distro-style backport nuances here; treat this as a browser-version problem.
Exposure / scanning realityInternet-wide scanners like Shodan/Censys/FOFA are basically irrelevant for this one because Chrome desktop is not an externally exposed server product. Exposure comes from managed endpoint inventory and browser version telemetry, not perimeter scans.
Disclosure / reportingGoogle published the stable fix on 2026-06-02 and the CVE was published 2026-06-04. The Chrome release notes say the bug was reported by Google on 2026-04-07 under issue 500315455.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (4.1/10)

The single most important severity reducer is that this CVE appears to require a compromised renderer first, which makes it a post-initial-access chain component rather than a standalone entry bug. With no KEV listing, no public PoC, and a confidentiality-only impact vector, this is not the kind of browser CVE that should jump the queue ahead of remotely reachable server flaws or one-click Chrome RCEs.

HIGH Affected/fixed version and vendor metadata
MEDIUM Practical exploitability reassessment
MEDIUM Inference that the likely outcome is post-renderer data exposure rather than direct host compromise

Why this verdict

  • Requires prior compromise: the attack path starts from a renderer that is already compromised or equivalently attacker-controlled, which is compounding downward pressure on severity.
  • Client-side only: attacker reachability is bounded by user interaction and browser session context, not by a globally exposed network service.
  • Confidentiality-only vector: the supplied CVSS has C:H/I:N/A:N, which is materially weaker than browser bugs that grant code execution or sandbox escape with integrity and availability impact.
  • No live-fire evidence: no KEV, no public campaign reporting, and no public PoC found in reviewed sources.
  • Wide install base is the only real amplifier: Chrome is everywhere, so you still patch it, but ubiquity alone does not erase the prior-compromise requirement.

Why not higher?

It is not higher because this is not an unauthenticated remote service bug and not a clean click-once workstation compromise by itself. The prerequisite of a compromised renderer means the attacker is already halfway through a browser exploit chain before CVE-2026-11098 becomes useful, which sharply narrows real-world reachable exposure.

Why not lower?

It is not lower because the browser sandbox boundary matters, and post-renderer bugs are exactly the kind of primitives sophisticated exploit chains want. Chrome's enterprise footprint is enormous, so even a low-probability chain helper deserves routine patching and fleet verification.

05 · Compensating Control

What to do — in priority order.

  1. Enforce Chrome auto-update — Make sure enterprise policy is not pinning users below the fixed 149.0.7827.53/54 builds. For a LOW verdict there is no mitigation SLA; treat this as backlog hygiene and let the update land in the next routine browser maintenance wave.
  2. Hunt for version laggards — Use endpoint inventory, EDR software catalogs, or Chrome enterprise telemetry to find endpoints still below the fixed build. Again, there is no mitigation SLA for LOW; the value here is closing silent auto-update failures before they accumulate.
  3. Reduce risky browser features where already standard — If your baseline already limits unneeded WebGL/WebGPU or hardware-acceleration-heavy workflows on hardened admin workstations, keep that policy in place. Do not build an emergency exception process for this CVE; for LOW, keep changes inside normal configuration management.
  4. Monitor browser crash spikes — A sudden cluster of chrome.exe / GPU-process crashes on unpatched builds can indicate exploit experimentation or just bad driver interactions; either way, it identifies outliers worth fast validation. For this severity, monitoring is a hygiene measure, not an emergency mitigation program.
What doesn't work
  • A perimeter firewall does not help because this is browser client attack surface, not a listening network service.
  • MFA does not mitigate the browser-side bug itself; it may reduce downstream session abuse, but it does not stop exploitation of the GPU validation flaw.
  • Network vulnerability scanning will not tell you much here; this is primarily a local version inventory problem.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint or through your software inventory agent. Invoke it as python3 check_chrome_cve_2026_11098.py with standard user rights; it only reads local executable version info and prints VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
# check_chrome_cve_2026_11098.py
# 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(v):
    m = re.search(r'(\d+)\.(\d+)\.(\d+)\.(\d+)', v or '')
    if not m:
        return None
    return tuple(int(x) for x in m.groups())

def version_ge(a, b):
    return a >= b

def run(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 windows_candidates():
    bases = [
        os.environ.get('ProgramFiles'),
        os.environ.get('ProgramFiles(x86)'),
        os.environ.get('LocalAppData'),
    ]
    rels = [
        r'Google\Chrome\Application\chrome.exe',
        r'Chromium\Application\chrome.exe',
    ]
    out = []
    for b in bases:
        if not b:
            continue
        for r in rels:
            p = Path(b) / Path(r)
            if p.exists():
                out.append(str(p))
    return out

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

def linux_candidates():
    return [
        'google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser'
    ]

def get_version_windows(path):
    ps = [
        'powershell', '-NoProfile', '-Command',
        f"(Get-Item '{path}').VersionInfo.ProductVersion"
    ]
    return run(ps)

def get_version_macos(path):
    return run([path, '--version'])

def get_version_linux(cmd):
    return run([cmd, '--version'])

def main():
    system = platform.system().lower()
    found = []

    if 'windows' in system:
        for p in windows_candidates():
            raw = get_version_windows(p)
            ver = parse_version(raw)
            if ver:
                found.append((p, ver, raw))
    elif 'darwin' in system:
        for p in mac_candidates():
            if Path(p).exists():
                raw = get_version_macos(p)
                ver = parse_version(raw)
                if ver:
                    found.append((p, ver, raw))
    else:
        for c in linux_candidates():
            raw = get_version_linux(c)
            ver = parse_version(raw)
            if ver:
                found.append((c, ver, raw))

    if not found:
        print('UNKNOWN - Chrome/Chromium not found or version unreadable')
        sys.exit(2)

    # Choose the highest discovered version if multiple are installed.
    found.sort(key=lambda x: x[1], reverse=True)
    path, ver, raw = found[0]

    if version_ge(ver, FIXED):
        print(f'PATCHED - {path} reports version {raw}')
        sys.exit(0)
    else:
        print(f'VULNERABLE - {path} reports version {raw}; fixed is >= 149.0.7827.53')
        sys.exit(1)

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

If you remember one thing.

TL;DR
Monday morning, do not treat CVE-2026-11098 like a browser zero-day emergency. Validate that Chrome auto-update is healthy, identify endpoints still below 149.0.7827.53/54, and fold them into your normal browser maintenance wave; for a LOW verdict there is no noisgate mitigation SLA and no noisgate remediation SLA — treat this as backlog hygiene. In practical terms: verify inventory now, fix broken updaters this week, and let standard browser patching close the gap in your next routine change window rather than preempting higher-value server or actively exploited items.

Sources

  1. Google Chrome Releases - Stable Channel Update for Desktop (June 2, 2026)
  2. Chromium issue 500315455
  3. Canadian Centre for Cyber Security advisory AV26-544
  4. Chromium Docs - Threat Model And Defenses Against Compromised Renderers
  5. Chromium design doc - GPU Accelerated Compositing in Chrome
  6. FIRST EPSS API documentation
  7. CISA Known Exploited Vulnerabilities Catalog
  8. SecurityWeek - Chrome 149 Patches 429 Vulnerabilities
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.