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

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

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

This is a side door behind another locked door

CVE-2026-11105 is an *improper input validation* flaw in Chrome WebUI that can leak cross-origin data, but only after the attacker has already compromised the renderer process. Based on Google's release notes and CVE metadata, the affected population is desktop Chrome on Windows, macOS, and Linux before the fixed 149.0.7827.53 line (Windows/macOS shipping as 149.0.7827.53/54, Linux as 149.0.7827.53). This is not a clean unauthenticated remote browser pop by itself; it is a post-compromise boundary bypass inside the browser architecture.

Google's MEDIUM label is fair in lab conditions, but for enterprise patch triage the real-world urgency is lower. The decisive friction is the prerequisite: *the attacker must already own the renderer process*. That means this bug is mostly valuable as the second stage of a broader exploit chain, not as an initial foothold, and there is no KEV listing, no public exploitation signal, and no public weaponized PoC to justify pulling focus from remotely reachable first-hop bugs.

"This is a chain-only Chrome bug: useful after renderer compromise, not a Monday-morning fleet fire drill"
02 · The Attack Path

3 steps from start to impact.

STEP 01

Land code or logic inside the renderer

The attacker first needs execution or equivalent control inside Chrome's renderer process, typically via a separate memory-corruption bug, logic bug, or a malicious extension context. CVE-2026-11105 does not provide that initial compromise; it assumes it already happened. In practical exploit chains, this is the expensive step that determines whether the chain is even viable.
Conditions required:
  • Victim visits attacker-controlled content or installs a malicious extension
  • A separate renderer-compromise primitive exists and works on the victim build
  • The target is running an affected Chrome desktop build
Where this breaks in practice:
  • Requires a second vulnerability or malicious extension path before this CVE matters
  • Modern Chrome hardening, sandboxing, and renderer isolation raise the cost of stage one
  • Enterprise controls like extension allowlisting and EDR often break the chain before WebUI is touched
Detection/coverage: No scanner detects 'renderer compromise' directly here; this prerequisite is usually inferred from broader browser exploit telemetry, crash artifacts, extension abuse, or EDR child-process anomalies.
STEP 02

Abuse WebUI trust boundaries

With renderer control, the attacker can feed crafted input into WebUI paths that should have enforced stricter trust or origin validation. The bug class suggests a boundary mistake in how untrusted renderer-originated data is handled by privileged browser UI components. Google's restricted bug entry 500505339 and the CVE record indicate the result is a cross-origin data leak rather than arbitrary native code execution.
Conditions required:
  • Renderer-controlled content can reach the vulnerable WebUI path
  • The victim session has useful data in scope for cross-origin leakage
Where this breaks in practice:
  • Bug details are still restricted, which usually means defenders and attackers alike lack turnkey exploitation specifics
  • Not every renderer compromise can reliably pivot into the specific WebUI path
  • Leak impact depends on what the user is actively authenticated to in that browser profile
Detection/coverage: Coverage is mostly version-based. Browser telemetry may show unusual internal page access or WebUI navigation, but most vuln scanners will only tell you the installed Chrome version is in-range.
STEP 03

Extract cross-origin data

If the WebUI boundary bypass succeeds, the attacker can read data that should have been isolated by the browser's cross-origin protections. That can include sensitive content from authenticated sessions, internal apps, or browser-managed surfaces visible to the compromised profile. The outcome is *confidentiality loss*, not broad endpoint takeover.
Conditions required:
  • Victim is logged into valuable web apps or internal portals in the same browser context
  • The leaked data is accessible through the vulnerable path
Where this breaks in practice:
  • Impact is scoped to the browser profile and available session state
  • No direct integrity or availability impact is described
  • Without a workable exfil channel after stage two, the leak remains theoretical
Detection/coverage: Data-loss signals may show up in proxy, CASB, or browser telemetry if exfiltration leaves the host, but there is no high-confidence standalone network signature for this CVE.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo current evidence of active exploitation found in authoritative sources reviewed; not KEV-listed and Google did not flag it as exploited in the release note.
Proof-of-concept availabilityNo public weaponized PoC located from primary sources. The Chromium issue 500505339 appears restricted, which slows copycat exploitation.
EPSS0.00043 from the provided intel, which is extremely low and consistent with a chain-dependent browser bug rather than a mass-exploitation candidate.
KEV statusNo — not present in the CISA Known Exploited Vulnerabilities Catalog as of this assessment.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N maps to a user-driven confidentiality issue, but that vector understates the real prerequisite that the renderer is already compromised.
Affected versionsDesktop Chrome before the fixed 149.0.7827.53 line: Windows/macOS updated to 149.0.7827.53/54; Linux updated to 149.0.7827.53 in the June 2, 2026 stable release.
Fixed versions149.0.7827.53 on Linux and 149.0.7827.53/54 on Windows/macOS. The May 29, 2026 early stable release exposed the fix to a small percentage first, followed by broad stable rollout on June 2, 2026.
Exposure realityChrome is ubiquitous, but this bug is not internet-exposed infrastructure. Exploitation requires a victim browser, user interaction, and a prior renderer compromise, which sharply narrows reachable enterprise impact.
Disclosure and reportingPublished in the CVE record on 2026-06-04; Google's stable release notes show the bug was reported by Google on 2026-04-08.
Scanning and detectionExpect mostly version-only detection from endpoint and vuln-management tools. External attack-surface platforms like Shodan/Censys/FOFA are not useful here because the vulnerable asset is an endpoint browser, not a server.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.6/10)

The single most important downward pressure is that exploitation requires prior renderer compromise, which makes this a second-stage browser boundary issue rather than an initial-access bug. In enterprise terms, that means the exposed population is every Chrome user in theory but only a tiny subset of already-compromised browser sessions in practice.

HIGH Affected version and fixed build identification
MEDIUM Real-world exploitability assessment with restricted Chromium bug details
HIGH No current KEV or public-exploitation signal

Why this verdict

  • Major prerequisite drag: the attacker must already have compromised the renderer process, which implies a prior exploit stage or malicious extension foothold before this CVE contributes anything.
  • Exposure population collapses after stage one: while Chrome is everywhere, the subset of enterprise browsers with a working renderer compromise in play is tiny compared with remotely reachable server bugs.
  • Impact is scoped to confidentiality: the described outcome is cross-origin data leakage, not direct endpoint code execution, domain-wide blast radius, or service interruption.
  • Modern controls should stop earlier steps: extension allowlisting, browser hardening, EDR, and web filtering are more likely to break the chain before the WebUI flaw is exercised.
  • Threat intel is cold: no KEV listing, no public exploitation signal, and a very low EPSS all argue against emergency prioritization.

Why not higher?

To justify HIGH, this would need either first-hop exploitability, broad active exploitation, or unusually low-friction chaining. We have the opposite: a chained, post-renderer-compromise confidentiality bug with restricted details and no public exploitation evidence. That is not the profile of a fleet-wide interrupt-driven patch event.

Why not lower?

It is still a real browser boundary failure in a massively deployed product, and successful chaining can expose authenticated cross-origin data from enterprise users. Once a renderer is compromised, the browser profile can contain high-value SaaS, SSO, and internal-app data, so dismissing it entirely would be sloppy.

05 · Compensating Control

What to do — in priority order.

  1. Enforce Chrome auto-update — Make sure endpoints are actually receiving Chrome 149+ and not stuck on frozen channels or broken update services. For a LOW verdict there is no SLA (treat as backlog hygiene), so handle this in the normal browser evergreen cycle rather than as an emergency outage event.
  2. Tighten extension allowlisting — Because this CVE only matters after renderer compromise or equivalent browser foothold, reducing untrusted extension execution removes one of the most realistic enterprise chain starters. Keep this in place as ongoing hygiene; there is no mitigation SLA for LOW beyond normal control maintenance.
  3. Preserve browser process telemetry — Retain EDR/browser telemetry around unusual renderer crashes, unexpected internal-page access, and suspicious Chrome child-process behavior. This helps you catch the *first* stage of the chain, which is the part that actually determines risk.
  4. Prioritize shared-admin and privileged-user fleets — If you must sequence rollout, hit admin workstations, developers, and users with persistent access to internal apps first because those profiles carry the highest-value cross-origin data. Still treat it as normal patch hygiene, not a special crisis action.
What doesn't work
  • Perimeter WAF rules do not meaningfully help because the vulnerable target is the local browser and the bug sits behind a prior renderer compromise.
  • External exposure scanning is nearly useless here; this is not a server-side internet-facing service you can find with Shodan or Censys.
  • MFA does not stop the vulnerability itself; it may reduce downstream account abuse, but it does nothing to prevent cross-origin data leakage inside an already-authenticated browser session.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint or through your endpoint management tooling. Invoke it with python3 chrome_cve_2026_11105_check.py (or python chrome_cve_2026_11105_check.py on Windows); no admin rights are required if the script can execute the local Chrome binary with --version.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
# CVE-2026-11105 Chrome version check
# 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)

WINDOWS_PATHS = [
    r"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
    r"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
    os.path.expandvars(r"%LOCALAPPDATA%\\Google\\Chrome\\Application\\chrome.exe"),
]

MAC_PATHS = [
    "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
    os.path.expanduser("~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),
]

LINUX_CANDIDATES = [
    "google-chrome",
    "google-chrome-stable",
    "chromium-browser",
    "chromium",
    "/opt/google/chrome/chrome",
]


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_command(path):
    try:
        result = subprocess.run([path, "--version"], capture_output=True, text=True, timeout=10)
        output = (result.stdout or "") + " " + (result.stderr or "")
        return output.strip()
    except Exception:
        return None


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

    if system == "windows":
        for p in WINDOWS_PATHS:
            if p and os.path.exists(p):
                return p
        where = shutil.which("chrome") or shutil.which("chrome.exe")
        if where:
            return where

    elif system == "darwin":
        for p in MAC_PATHS:
            if os.path.exists(p):
                return p
        where = shutil.which("google-chrome")
        if where:
            return where

    else:
        for candidate in LINUX_CANDIDATES:
            if candidate.startswith("/") and os.path.exists(candidate):
                return candidate
            where = shutil.which(candidate)
            if where:
                return where

    return None


def compare_versions(found, fixed):
    if found < fixed:
        return -1
    if found > fixed:
        return 1
    return 0


def main():
    chrome = find_chrome_binary()
    if not chrome:
        print("UNKNOWN - Chrome binary not found")
        sys.exit(2)

    output = run_version_command(chrome)
    if not output:
        print(f"UNKNOWN - Failed to execute version check for: {chrome}")
        sys.exit(2)

    version = parse_version(output)
    if not version:
        print(f"UNKNOWN - Could not parse Chrome version from output: {output}")
        sys.exit(2)

    cmp_result = compare_versions(version, FIXED_VERSION)
    version_str = ".".join(str(x) for x in version)

    if cmp_result < 0:
        print(f"VULNERABLE - Detected Chrome {version_str} at {chrome}; fixed version is {'.'.join(str(x) for x in FIXED_VERSION)} or later")
        sys.exit(1)
    else:
        print(f"PATCHED - Detected Chrome {version_str} at {chrome}; meets or exceeds fixed version {'.'.join(str(x) for x in FIXED_VERSION)}")
        sys.exit(0)


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

If you remember one thing.

TL;DR
Monday morning, do not blow up your patch queue for this one. Sweep for Chrome versions older than 149.0.7827.53, confirm auto-update health, and fold the fix into your normal browser rollout; for a LOW verdict there is no noisgate mitigation SLA and no special workaround deadline, and the noisgate remediation SLA is likewise no SLA (treat as backlog hygiene), so patch it in the standard evergreen endpoint cycle while documenting that the bug is chain-dependent and requires prior renderer compromise.

Sources

  1. Chrome stable desktop release 149.0.7827.53/54
  2. Chrome early stable desktop release 149.0.7827.53/54
  3. Chromium issue 500505339
  4. CVE record
  5. Chrome security page
  6. FIRST EPSS API
  7. CISA KEV catalog
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.