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

Inappropriate implementation in SVG in Google Chrome prior to 149

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

This is a forged visitor badge for the browser, not a skeleton key to the estate

CVE-2026-11166 is an SVG handling flaw in Google Chrome that can let a remote attacker inject arbitrary script or HTML in the browser context, i.e. a UXSS-style outcome, when a user renders attacker-controlled content. Based on Google's June 2, 2026 desktop stable rollout, the affected population is Chrome versions before 149.0.7827.53 on Linux and before 149.0.7827.53/54 on Windows and macOS.

Google rated it MEDIUM at 6.8, and that is broadly the right bucket, but the raw score is a little generous for enterprise prioritization. The attack still needs a user to open or render hostile content, the vendor vector already admits AC:H and UI:R, there is no KEV listing or public exploitation evidence, and the likely business impact is stolen web session data or action-on-behalf-of-user in the browser rather than durable host takeover.

"Real risk is browser session abuse through a finicky UXSS path, not reliable endpoint compromise"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Deliver a malicious SVG lure

The attacker needs to place a crafted SVG where a target will open it in vulnerable Chrome, typically via phishing, chat attachment, compromised site content, or an HTML page that embeds the SVG. Tooling here is commodity delivery infrastructure rather than a known exploit kit; no public weaponized framework for this CVE is visible. Reference: Google lists the flaw in the June 2, 2026 stable desktop advisory.
Conditions required:
  • Target uses Chrome below the fixed build
  • Attacker can get the victim to load attacker-controlled SVG or a page embedding it
  • Browser policy does not force safer rendering or isolation
Where this breaks in practice:
  • User interaction is mandatory
  • Email gateways, safe browsing, secure web gateway filtering, and browser isolation can break delivery
  • SVG attachment handling often differs across mail and collaboration platforms
Detection/coverage: Little network signature value. Detection is mostly indirect: mail/web proxy logs for delivered SVGs, browser crash/telemetry spikes, and version-based asset inventory rather than exploit-specific IDS.
STEP 02

Trigger the SVG parsing edge case

Once rendered, the malicious content must hit the specific SVG implementation mistake needed to cross into script or HTML injection. The vendor vector's AC:H matters: this does not look like a broad one-click-anywhere primitive, but a narrower browser-state or document-shape condition. Tooling would be a bespoke proof payload inside the SVG; no public PoC repo is evident.
Conditions required:
  • The crafted SVG reaches the vulnerable code path
  • Browser behavior matches the exploit assumptions
  • Content is not sanitized or transformed by an upstream service
Where this breaks in practice:
  • High attack complexity lowers repeatability
  • Many platforms reprocess, rasterize, or strip active SVG content
  • Renderer and site context differences can make exploit reliability brittle
Detection/coverage: Static scanners can tell you the browser version, not whether the exploit path is reachable in a given workflow. Browser dev telemetry and crash reports are more useful than perimeter signatures.
STEP 03

Run injected script in the victim browser

If the bug fires, the attacker gets script or HTML injection in a browser context, which is effectively a UXSS event. Practical post-exploitation is web-account theft, DOM access, token theft, or action-on-behalf-of-user against SaaS apps the victim is already logged into. Tooling at this stage is standard JavaScript post-exploitation, not endpoint malware.
Conditions required:
  • Victim is authenticated to something valuable in the same browsing session
  • Browser protections do not neutralize the injected execution path
  • The attacker can exfiltrate data or drive state-changing requests
Where this breaks in practice:
  • Impact is bounded by browser session state, not instant system compromise
  • MFA does not stop existing-session abuse but can limit follow-on account takeover
  • CSP, site hardening, and tenant session controls can reduce blast radius
Detection/coverage: CASB, IdP anomaly detection, unusual SaaS requests, and impossible-travel/session anomalies may catch abuse after execution. Host EDR often sees little because this can stay inside the browser.
STEP 04

Translate browser access into business impact

The attacker cashes out by stealing data from active web apps, sending messages, changing records, or staging follow-on phishing from trusted accounts. That is serious, but it is materially different from reliable workstation code execution or sandbox escape. No named in-the-wild campaign is currently tied to this CVE.
Conditions required:
  • The user has access to sensitive SaaS or internal web apps
  • Session lifetime and token scope are meaningful
  • Downstream apps do not have strong anomaly controls
Where this breaks in practice:
  • Blast radius is usually one user session at a time
  • Enterprise SaaS monitoring can expose abuse quickly
  • This is post-click browser abuse, not broad unauthenticated infrastructure compromise
Detection/coverage: Watch for abnormal SaaS actions from normal user IP/device combinations, token replay indicators, and spikes in suspicious attachment views. Vulnerability scanners remain version-only for this issue.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo public evidence of active exploitation found at time of assessment; not in CISA KEV.
Public PoCNo credible public PoC or exploit repo surfaced in primary-source review. Treat this as no known public weaponization yet, not as proof of safety.
EPSS0.00029 from the user-supplied intel is extremely low, consistent with low near-term mass exploitation probability.
KEV statusNot listed in the CISA Known Exploited Vulnerabilities Catalog as of this assessment.
CVSS vector readoutCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N means remote and no auth, but high complexity + required user interaction sharply reduce operational reach. It is dangerous when it lands, but not broadly automatable.
Affected versionsGoogle's June 2, 2026 advisory covers Chrome desktop builds before 149.0.7827.53 on Linux and before 149.0.7827.53/54 on Windows/macOS.
Fixed versionsUpgrade to 149.0.7827.53 or later on Linux and 149.0.7827.53/54 or later on Windows/macOS. This is a browser binary fix, not a distro package backport story.
Exposure and scanning realityThis is not internet-scannable infrastructure. Shodan/Censys/FOFA-style external exposure counts are largely irrelevant; the meaningful exposure metric is your installed Chrome fleet version distribution and whether high-risk users can open untrusted SVG content.
Disclosure timelineGoogle stable desktop update published 2026-06-02; user-supplied CVE disclosure date is 2026-06-04.
ReporterGoogle's advisory attributes the bug to Google, reported on 2026-04-13; the underlying Chromium issue is restricted.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to MEDIUM (5.8/10)

The decisive factor is compound friction: the attacker needs a vulnerable browser, a successful lure, and a comparatively brittle AC:H browser-state/parser condition before any impact occurs. This is still worth fixing because successful UXSS can abuse live SaaS sessions, but it is not a clean, reliable, hands-off endpoint compromise primitive.

HIGH Affected version and patch floor
MEDIUM Exploitability in real enterprise browsing workflows
MEDIUM Impact characterization as session abuse versus host compromise

Why this verdict

  • Downward pressure: UI:R means every attack starts with a click or render event; that implies phishing, web delivery, or content-hosting success before the vulnerability even matters.
  • Further downward pressure: AC:H is not decorative; it says the parser or browser state requirement is fussy enough that most opportunistic actors will prefer easier Chrome bugs.
  • Further downward pressure: this is a client-side browser flaw, not exposed infrastructure; reach is limited to users who both run the vulnerable build and can be induced to load the hostile SVG.
  • Further downward pressure: no KEV, no public exploitation evidence, and no visible public PoC; that materially lowers immediate weaponization pressure for a 10,000-host enterprise.
  • Upward pressure: Chrome is everywhere and UXSS against an authenticated user can still be high-value; stolen SaaS data, token abuse, and action-on-behalf-of-user are real business impacts even without native code execution.

Why not higher?

It is not higher because the chain narrows quickly in the real world: remote delivery still needs user interaction, exploit success still needs a high-complexity condition, and the impact is primarily in-browser. There is also no current evidence of active exploitation, no KEV listing, and no public exploit ecosystem pushing this into urgent defender panic territory.

Why not lower?

It is not lower because a successful UXSS event in Chrome can directly compromise the confidentiality and integrity of active business web sessions. In enterprises that live inside SaaS, that can still translate into data theft, fraudulent transactions, or trusted-user lateral phishing.

05 · Compensating Control

What to do — in priority order.

  1. Force browser auto-update compliance — Make sure managed Chrome update policy is actually landing on endpoints and that stale channels are not pinned indefinitely. For a MEDIUM verdict there is no noisgate mitigation SLA — go straight to the 365-day remediation window, but browsers should ride your normal fast client-update motion rather than wait for annual backlog cleanup.
  2. Restrict untrusted SVG handling — Block or warn on externally sourced .svg attachments and downloads in mail, chat, and secure web gateway controls where business use allows it. This cuts the most likely delivery path while patching proceeds; there is no noisgate mitigation SLA for this verdict, so use it as a risk reducer during the remediation window.
  3. Isolate high-risk browsing — Put privileged admins, finance users, and help desk staff behind browser isolation or hardened browsing profiles for untrusted sites. This is especially useful where users routinely open externally shared design assets or documents that may embed SVG content.
  4. Harden SaaS session controls — Shorten token lifetime where practical, require re-auth for sensitive actions, and tune IdP/CASB anomaly detection for unusual in-session behavior. It will not stop the browser bug itself, but it reduces the payoff if UXSS lands.
What doesn't work
  • MFA alone does not stop session abuse once the user is already logged in; this flaw is about abusing an existing browser session.
  • Network vulnerability scanners will not meaningfully detect exploitation; at best they identify browser version through agent inventory, not the exploit path.
  • Perimeter WAF rules are mostly irrelevant because the vulnerable component is the client browser parsing attacker-controlled SVG, not your web server.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint itself or through your fleet-management agent. Invoke it as python3 check_cve_2026_11166.py on macOS/Linux or py check_cve_2026_11166.py on Windows; no admin rights are required as long as the user can execute the local Chrome binary.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
# CVE-2026-11166 Chrome version check
# Outputs: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

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

TARGET = (149, 0, 7827, 53)


def norm_version_tuple(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_ver(a, b):
    return (a > b) - (a < b)


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


def windows_candidates():
    cands = []
    for env in ('ProgramFiles', 'ProgramFiles(x86)', 'LocalAppData'):
        base = os.environ.get(env)
        if base:
            cands.append(os.path.join(base, 'Google', 'Chrome', 'Application', 'chrome.exe'))
    which = shutil.which('chrome.exe') or shutil.which('chrome')
    if which:
        cands.append(which)
    return cands


def mac_candidates():
    cands = [
        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
        os.path.expanduser('~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),
    ]
    which = shutil.which('google-chrome') or shutil.which('chrome')
    if which:
        cands.append(which)
    return cands


def linux_candidates():
    names = ['google-chrome', 'google-chrome-stable', 'chrome', 'chromium', 'chromium-browser']
    cands = [shutil.which(n) for n in names]
    cands += ['/usr/bin/google-chrome', '/opt/google/chrome/chrome']
    return [c for c in cands if c]


def get_candidates():
    system = platform.system().lower()
    if system == 'windows':
        return windows_candidates()
    if system == 'darwin':
        return mac_candidates()
    return linux_candidates()


def first_existing(paths):
    seen = set()
    out = []
    for p in paths:
        if p and p not in seen:
            seen.add(p)
            out.append(p)
    return out


def main():
    candidates = first_existing(get_candidates())
    if not candidates:
        print('UNKNOWN: Google Chrome executable not found')
        sys.exit(2)

    for exe in candidates:
        if not os.path.exists(exe):
            continue
        out = run_version([exe, '--version'])
        ver = norm_version_tuple(out)
        if ver is None:
            continue

        # CVE fixed in 149.0.7827.53 or later per vendor advisory
        if cmp_ver(ver, TARGET) < 0:
            print(f'VULNERABLE: {exe} -> {ver[0]}.{ver[1]}.{ver[2]}.{ver[3]}')
            sys.exit(1)
        else:
            print(f'PATCHED: {exe} -> {ver[0]}.{ver[1]}.{ver[2]}.{ver[3]}')
            sys.exit(0)

    print('UNKNOWN: Chrome found but version could not be determined')
    sys.exit(2)


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

If you remember one thing.

TL;DR
Monday morning: treat this as routine-but-real browser hygiene, not an all-hands fire drill. Because the verdict is MEDIUM, there is no noisgate mitigation SLA — go straight to the 365-day remediation window under the noisgate remediation SLA, but in practice you should verify Chrome auto-update health this week, identify any endpoints still below 149.0.7827.53/149.0.7827.54, and fold them into your next normal client patch wave rather than letting stale browsers linger for quarters.

Sources

  1. Google Chrome Releases: Stable Channel Update for Desktop (2026-06-02)
  2. Google Chrome Releases: Early Stable Update for Desktop (2026-05-29)
  3. CISA Known Exploited Vulnerabilities Catalog
  4. FIRST EPSS
  5. Canadian Centre for Cyber Security advisory AV26-544
  6. Guyana National CIRT advisory ADV2026_360
  7. SecurityWeek: Chrome 149 Patches 429 Vulnerabilities
  8. NVD comparator: CVE-2026-11169 in same Chrome 149 release train
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.