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

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

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

This is a second lock behind a door the attacker already had to kick open

CVE-2026-10911 is a Chrome Media input-validation flaw fixed in Chrome 149 for desktop and Android. The vendor text and CVSS shape strongly imply a *post-renderer-compromise* path: a remote attacker first lands code execution or equivalent control in the renderer, then uses crafted media handling to cross a trust boundary and escalate impact. Affected versions are Chrome releases prior to 149.0.7827.53 on Linux and 149.0.7827.53/54 on Windows/Mac; Android received the same fixes in 149.0.7827.59.

Google rating it High is internally consistent with Chromium's own severity guidance for renderer-compromise-to-sandbox-escape style bugs. For enterprise patch triage, though, that is still too hot if you read it like an initial-access RCE. The decisive friction is that the attacker must already have *won stage one* inside Chrome's renderer, which sharply narrows real-world reach, keeps EPSS tiny, and makes this much more valuable as an exploit-chain component than as a stand-alone enterprise fire drill.

"This is a chain bug, not an entry bug: serious inside an exploit chain, much less urgent by itself."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Land code in the renderer

The attacker needs a separate stage-one browser bug to compromise the Chrome renderer process, typically through a malicious page or active content. CVE-2026-10911 is not that bug; it becomes relevant only after the renderer is already under attacker control.
Conditions required:
  • Victim runs vulnerable Chrome prior to 149.0.7827.53/54
  • Attacker has a separate renderer compromise primitive
  • User visits attacker-controlled or attacker-influenced content
Where this breaks in practice:
  • Requires chaining with another vulnerability or equivalent renderer compromise
  • Modern exploit mitigations, site isolation, and sandboxing raise chain complexity
  • Email gateways, web filtering, and browser hardening can stop stage-one delivery before this CVE matters
Detection/coverage: No scanner can prove exploitability here from version alone; detection is mostly indirect via browser exploit telemetry, EDR child-process anomalies, crash spikes, or exploit-kit artifacts.
STEP 02

Trigger Media parsing from the compromised renderer

With renderer control, the attacker drives Chrome's Media component using crafted content to hit the insufficient input validation condition. The goal is to abuse a higher-privilege or differently trusted path reachable from that compromised renderer context.
Conditions required:
  • Renderer can invoke the affected Media code path
  • Crafted media content reaches the vulnerable parser or IPC boundary
Where this breaks in practice:
  • The vulnerable path may not be reachable from every page or every codec/container combination
  • Bug details were still restricted at release, which slows commodity weaponization
Detection/coverage: Version-based asset scanners can flag potentially affected Chrome builds, but they cannot validate whether the vulnerable media path is enabled or reachable in a given workflow.
STEP 03

Cross the sandbox boundary

Successful exploitation likely converts renderer control into broader browser or host impact, which is why Chromium classifies these patterns as high severity. In practice this is the expensive part of the chain: the attacker must turn a logic flaw in Media into a reliable privilege boundary bypass.
Conditions required:
  • Exploit must survive Chrome sandboxing and process isolation
  • Target platform-specific mitigations must not break reliability
Where this breaks in practice:
  • Sandbox escapes are harder to make reliable than renderer-only bugs
  • Platform differences across Windows, macOS, and Linux reduce one-size-fits-all exploitation
Detection/coverage: EDR can sometimes catch post-browser-process spawning, suspicious IPC, memory-corruption side effects, or payload staging after boundary crossing; preventative browser telemetry is stronger than network detection here.
STEP 04

Convert browser compromise into endpoint impact

After escaping the intended sandbox boundary, the attacker can pivot to credential theft, local persistence, or further host compromise depending on user rights and follow-on tooling. That downstream blast radius is real, but it depends entirely on first clearing multiple earlier hurdles.
Conditions required:
  • Successful stage-two exploit
  • Useful post-exploitation path on the endpoint
Where this breaks in practice:
  • Least-privilege endpoints, EDR, application control, and browser profile isolation limit payoff
  • A successful exploit still lands with user-context constraints unless chained again
Detection/coverage: Endpoint visibility matters more than perimeter telemetry. Hunt for browser-originated child processes, dropped payloads, abnormal credential access, and exploit-protection alerts.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo public evidence of active exploitation found. It is not in CISA KEV, and Chromium states bug details may remain restricted until most users are patched.
KEV statusNot KEV-listed as of this assessment. That materially lowers urgency versus Chrome bugs that arrive with same-week exploitation pressure.
Proof-of-concept availabilityNo public PoC located in this review. Public search turned up no credible GitHub or researcher release tied to CVE-2026-10911; issue details are still effectively opaque from the public side.
EPSS0.00066 from the user-supplied intel block; that is very low and consistent with a hard-to-weaponize chain component. I did not independently confirm the percentile from FIRST's live API in this session.
CVSS vectorCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H — read this as *internet-reachable only in theory*, but with high complexity, user interaction, and a changed scope boundary-crossing outcome.
Affected versionsGoogle's release note says desktop Chrome before 149.0.7827.53 on Linux and 149.0.7827.53/54 on Windows/Mac. Android picked up the corresponding security fixes in 149.0.7827.59.
Fixed versionsDesktop fixed in 149.0.7827.53 (Linux) and 149.0.7827.53/54 (Windows/Mac); Android fixed in 149.0.7827.59. I found no authoritative distro-style backport advisory for this Chrome client issue beyond Google's release channels.
Scanning/exposure realityShodan/Censys/FOFA are basically irrelevant here. This is a client-side browser vulnerability, not a server you can enumerate on the public internet. Your exposure question is fleet version coverage, kiosk/VDI laggards, and auto-update health.
Disclosure timingThere is a date mismatch worth noting: Google shipped the stable fix on 2026-06-02, while your intel says disclosed 2026-06-04. That likely reflects downstream record publication after the patch shipped.
Reporter / originThe stable-channel advisory credits Google as the reporter and references Chromium issue 495819067.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.9/10)

The single biggest reason this lands at MEDIUM is that it appears to require a compromised renderer first, which makes it a post-initial-compromise chain component rather than an enterprise-scale initial-access event. That prerequisite dramatically reduces the reachable population of successful attacks even though the end-state impact could be severe inside a mature exploit chain.

MEDIUM Exploit-path interpretation as a renderer-compromise-dependent chain bug
HIGH Version/fix metadata from Google's release notes
HIGH No KEV listing and no public exploitation evidence found

Why this verdict

  • Down one full band for attacker position: this is not unauthenticated remote code execution by itself; the attacker appears to need prior renderer compromise, which implies stage-one success already happened.
  • Down again for reachable population: every enterprise has Chrome, but only a tiny slice of attacks will have both a working stage-one renderer exploit and the right stage-two media path for this CVE.
  • Down for threat intel: no KEV, no public PoC found, and the supplied EPSS is extremely low (0.00066), all of which argue against emergency patch prioritization.

Why not higher?

If this were a stand-alone browser RCE or a Chrome bug with confirmed in-the-wild chaining, it would stay in HIGH or climb beyond it operationally. But the prerequisite of prior renderer compromise is a major practical brake, and the current threat intel does not show broad weaponization pressure.

Why not lower?

This is still a browser boundary-crossing bug in one of the most widely deployed user applications on the planet. Once paired with a renderer bug, the blast radius can jump from tab compromise to materially worse endpoint impact, so treating it as mere backlog hygiene would understate the chain value.

05 · Compensating Control

What to do — in priority order.

  1. Validate Chrome auto-update health — Because this is MEDIUM, there is no mitigation SLA — go straight to the 365-day remediation window. Still, verify that managed Windows, macOS, Linux, VDI, and kiosk channels are actually ingesting Chrome 149+ so this does not linger in frozen images or broken update rings.
  2. Harden browser exploit paths — Use existing browser-hardening baselines, exploit protection, and EDR memory-exploit coverage to reduce the odds of the required stage-one renderer compromise. There is no noisgate mitigation SLA for a MEDIUM finding, so use this as a routine hardening check rather than an emergency change.
  3. Focus on unmanaged edge cases — Prioritize kiosks, VDI gold images, contractor laptops, and Linux workstations that often miss Chrome update policy. Those are the places where client-side browser CVEs survive longest, even when mainstream endpoints auto-update normally.
  4. Watch for browser-to-host pivots — Tune EDR hunts for chrome-spawned child processes, suspicious downloads, abnormal credential access, and exploit-protection alerts. This does not replace patching, but it is the best compensating visibility for a browser exploit-chain component while updates roll through normal maintenance.
What doesn't work
  • Perimeter scanning won't help much; this is a client-side browser flaw, so external exposure scanners do not tell you who is at risk.
  • A WAF is largely irrelevant because the vulnerable component runs on the endpoint and the attacker can deliver content over normal browsing paths, not just your web apps.
  • Email filtering alone is insufficient; even perfect mail controls do nothing if the first-stage renderer exploit arrives through general web traffic or an ad/script supply chain.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint or through your software-distribution/remote-exec tooling, not from an auditor workstation. Invoke it as python3 check_cve_2026_10911.py with standard user rights; it reads the local Chrome version from common install paths and prints VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
# check_cve_2026_10911.py
# Determine whether local Google Chrome is vulnerable to CVE-2026-10911
# Fixed desktop versions:
#   Linux:   149.0.7827.53+
#   Windows: 149.0.7827.53/54+
#   macOS:   149.0.7827.53/54+
# Exit codes:
#   0 = PATCHED
#   1 = VULNERABLE
#   2 = UNKNOWN

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

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


def run_cmd(cmd):
    try:
        p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=10)
        out = (p.stdout or '') + '\n' + (p.stderr or '')
        return out.strip()
    except Exception:
        return ''


def find_linux_version():
    candidates = [
        shutil.which('google-chrome'),
        shutil.which('google-chrome-stable'),
        shutil.which('chromium-browser'),
        shutil.which('chromium'),
        '/opt/google/chrome/chrome',
        '/usr/bin/google-chrome',
        '/usr/bin/google-chrome-stable',
    ]
    for c in candidates:
        if c and os.path.exists(c):
            out = run_cmd([c, '--version'])
            v = parse_version(out)
            if v:
                return c, v
    return None, None


def find_macos_version():
    app = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
    if os.path.exists(app):
        out = run_cmd([app, '--version'])
        v = parse_version(out)
        if v:
            return app, v
    mdls_target = '/Applications/Google Chrome.app'
    if os.path.exists(mdls_target):
        out = run_cmd(['mdls', '-name', 'kMDItemVersion', mdls_target])
        v = parse_version(out)
        if v:
            return mdls_target, v
    return None, None


def find_windows_version():
    candidates = [
        os.path.join(os.environ.get('ProgramFiles', r'C:\Program Files'), 'Google', 'Chrome', 'Application', 'chrome.exe'),
        os.path.join(os.environ.get('ProgramFiles(x86)', r'C:\Program Files (x86)'), 'Google', 'Chrome', 'Application', 'chrome.exe'),
        os.path.join(os.environ.get('LocalAppData', ''), 'Google', 'Chrome', 'Application', 'chrome.exe'),
    ]
    for c in candidates:
        if c and os.path.exists(c):
            try:
                import winreg  # type: ignore
                # Best-effort file version via PowerShell fallback
            except Exception:
                pass
            out = run_cmd(['powershell', '-NoProfile', '-Command', f"(Get-Item '{c}').VersionInfo.ProductVersion"]) if shutil.which('powershell') else ''
            v = parse_version(out)
            if v:
                return c, v
            out = run_cmd([c, '--version'])
            v = parse_version(out)
            if v:
                return c, v
    return None, None


def main():
    system = platform.system().lower()
    path = None
    version = None

    if 'linux' in system:
        path, version = find_linux_version()
    elif 'darwin' in system:
        path, version = find_macos_version()
    elif 'windows' in system:
        path, version = find_windows_version()
    else:
        print('UNKNOWN - unsupported operating system')
        sys.exit(2)

    if not version:
        print('UNKNOWN - Google Chrome version not found')
        sys.exit(2)

    version_str = '.'.join(str(x) for x in version)
    if version_ge(version, FIXED):
        print(f'PATCHED - found {version_str} at {path}')
        sys.exit(0)
    else:
        print(f'VULNERABLE - found {version_str} at {path}; fixed is 149.0.7827.53 or later')
        sys.exit(1)


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

If you remember one thing.

TL;DR
Monday morning, treat this as a routine-but-real browser chain risk, not a stop-the-world event. Because the reassessed verdict is MEDIUM and there is no KEV or active exploitation evidence, there is no noisgate mitigation SLA — go straight to the 365-day remediation window; use Monday to inventory Chrome laggards, verify auto-update health, and clean up frozen images, kiosk builds, and unmanaged endpoints. Target actual patch uptake to 149.0.7827.53/54+ on desktop and 149.0.7827.59+ on Android inside your standard browser servicing program, completing it within the noisgate remediation SLA of ≤365 days.

Sources

  1. Google Chrome stable desktop release 149
  2. Google Chrome Android release 149
  3. Chromium Security page
  4. Chromium severity guidelines
  5. Chromium issue 495819067
  6. CISA Known Exploited Vulnerabilities catalog
  7. FIRST EPSS API documentation
  8. FIRST EPSS data stats
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.