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

Inappropriate implementation in Network in Google Chrome prior to 149

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

This is a peephole in the browser's alarm system, not a broken front door

CVE-2026-11194 is a Chrome Network-side implementation flaw fixed in Chrome 149.0.7827.53 for Linux and 149.0.7827.53/54 for Windows and macOS. The public Chrome advisory calls it an "inappropriate implementation in Network" that could let a remote attacker leak cross-origin data through a crafted HTML page, and the linked Chromium fix ties the bug to violation reporting logic that failed to sanitize URLs before putting them into COEP and Document Isolation Policy reports.

The vendor's MEDIUM label is fair on paper but still too generous for enterprise patch triage. The reachable impact here looks much narrower than a generic "cross-origin data leak": the public fix shows leakage of URL fragments and credentials in reporting fields, which means the attack needs specific browser security-reporting paths and secrets embedded in URLs in the first place; that is a real confidentiality bug, but not the kind of clean read-anything primitive that earns front-of-queue treatment across 10,000 endpoints.

"Real bug, small blast radius: this is a niche URL-reporting leak, not a general cross-origin read primitive."
02 · The Attack Path

3 steps from start to impact.

STEP 01

Lure the user to attacker HTML

The attacker hosts a crafted page and gets the victim to load it in a vulnerable Chrome build. This is a standard web-origin delivery model: no local foothold and no authentication, but it does require user interaction because the victim has to browse to attacker-controlled content.
Conditions required:
  • Victim is running Chrome prior to 149.0.7827.53
  • Victim loads attacker-controlled HTML
  • Attacker can induce navigation through phishing, malvertising, or a compromised site
Where this breaks in practice:
  • User interaction is mandatory
  • Browser auto-update shrinks the vulnerable population quickly on managed fleets
  • Safe Browsing, mail filtering, and web proxies reduce lure success
Detection/coverage: Network scanners will not catch this; detection is mostly indirect through browser version inventory, web proxy telemetry, and suspicious outbound report traffic.
STEP 02

Trigger a cross-origin policy violation path

The crafted page coerces Chrome into producing a COEP or Document Isolation Policy violation report involving a cross-origin URL. The public fix for bug 503719488 shows the vulnerable path was URL serialization for reporting, where fragments, usernames, and passwords were preserved when they should have been stripped.
Conditions required:
  • The relevant reporting code path must be exercised
  • The target data must exist in URL components that can be serialized into a report
  • The browser must generate and send the violation report
Where this breaks in practice:
  • This is not a broad same-origin-policy bypass for arbitrary response bodies
  • Many modern apps do not place meaningful secrets in URL fragments or userinfo
  • The issue appears tied to specific reporting mechanisms rather than all cross-origin requests
Detection/coverage: Little to no commodity scanner coverage; code-level linkage exists via Chromium issue 503719488 and commit 59bf0e200cae8f2ac8f62fc4ef251be67d426e15.
STEP 03

Receive leaked URL data via report endpoint

If the report is emitted to an attacker-observable endpoint, the attacker can read sanitized-but-insufficiently-sanitized URL data from the report payload. Based on the fix, the exposed material is URL metadata that should have been removed, not a full cross-origin document read.
Conditions required:
  • Attacker can observe the resulting report delivery
  • The blocked URL contains sensitive fragment, username, or password material worth stealing
Where this breaks in practice:
  • Blast radius is limited to URL-derived data, not arbitrary DOM or response contents
  • Many enterprises strip or avoid credentials in URLs entirely
  • Reporting has to be enabled and functional enough for the leak path to complete
Detection/coverage: Look for unexpected Reporting API or report collector traffic from browsers, but expect weak visibility unless you already inspect egress DNS/HTTP for reporting endpoints.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo public exploitation evidence found. Google did not state active exploitation in the June 2, 2026 release note, and CISA KEV does not list CVE-2026-11194 as of 2026-06-05.
Proof-of-concept availabilityNo public PoC found in primary-source searches. The Chromium bug is access-restricted, but the linked public fix commit is visible and gives enough signal to understand the bug class.
EPSS0.00014 (~0.014%) from the user-supplied intel; that is noise-floor territory. Authoritative percentile was not verified from a primary EPSS source during this review.
KEV statusNot KEV-listed as of 2026-06-05; no CISA due date applies.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N maps to a web-delivered confidentiality issue with mandatory user interaction and no integrity or availability impact. In practice, the public fix suggests the real confidentiality scope is narrower than the vector implies.
Affected versionsChrome prior to 149.0.7827.53; Google shipped fixes as 149.0.7827.53 for Linux and 149.0.7827.53/54 for Windows and macOS.
Fixed versions and rollout datesEarly Stable for Windows/macOS started 2026-05-29; full Stable promotion for Chrome 149 began 2026-06-02. Enterprises on managed channels should verify endpoint uptake, not just policy assignment.
Root cause from public fixThe public Chromium change for Fixed: 503719488 says violation reporters were preserving URL fragments and credentials in blockedURL and introduced SerializeResponseUrlForReporting to strip fragments, usernames, and passwords before reporting.
Scanning and exposure realityShodan/Censys/FOFA are basically irrelevant here. This is an endpoint browser bug, not an internet-facing daemon; exposure must be measured from EDR, MDM, SCCM/Intune/Jamf, or Chrome Enterprise inventory.
Disclosure and reporterPublic release landed 2026-06-04 in the CVE record / advisory flow. Chrome's release note says the issue was reported by Google on 2026-04-17.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.9/10)

The decisive downward factor is impact narrowness: the public fix points to leakage of URL components inside browser-generated policy reports, not a general-purpose cross-origin read primitive. That sharply limits both the reachable population and the value of successful exploitation compared with what the vendor CVSS wording suggests.

HIGH Affected version and fixed version mapping
MEDIUM Public-fix-based interpretation of real exploit impact
MEDIUM Absence of public exploitation or PoC at time of review

Why this verdict

  • Vendor baseline starts at 6.5, then drops because the public fix narrows the story. The commit tied to bug 503719488 is about stripping fragments, usernames, and passwords from reporting URLs, which is materially smaller than a broad arbitrary cross-origin read.
  • User interaction is required. The attacker must get a user onto a crafted page, so this is not wormable, not service-exposed, and not something that turns a browser into an unauthenticated remote foothold by itself.
  • Exploit chain depends on specific browser reporting paths and URL-shaped secrets. Requiring COEP/DIP violation reporting plus sensitive data living in URL components is compounding friction that cuts real-world success rates.

Why not higher?

This does not look like a browser sandbox escape, renderer RCE, or clean SOP bypass that hands over arbitrary cross-origin response bodies. The public fix strongly suggests the leak is confined to report serialization of URL metadata, which is a much smaller prize and a much more conditional path.

Why not lower?

It is still a remotely triggerable confidentiality bug in one of the most widely deployed enterprise applications on the planet. If a target workflow still carries secrets in fragments or URL credentials, the attacker can potentially harvest them from browser-generated reports without needing local code execution.

05 · Compensating Control

What to do — in priority order.

  1. Enforce browser currency — Use your normal endpoint management stack to confirm Chrome is at or above 149.0.7827.53 on Linux and 149.0.7827.53/54 on Windows/macOS. Because this is a LOW noisgate verdict, there is no formal mitigation SLA; treat this as backlog hygiene and close it during routine browser update enforcement.
  2. Inventory non-standard Chrome channels — Find endpoints pinned to Extended Stable, frozen VDI images, kiosk builds, gold images, and offline developer workstations. Those are the places where browser bugs linger after auto-update would normally have solved the problem; for a LOW verdict, clean them up in the next regular image or maintenance cycle.
  3. Review report collectors — If you operate Reporting API, COEP, or Document Isolation Policy collectors, verify who can receive browser policy reports and whether those endpoints are exposed to third parties. There is no mitigation SLA for this verdict, but tightening report destinations reduces the already small blast radius while patch uptake catches up.
  4. Hunt for secrets in URLs — Search internal apps for tokens, credentials, or sensitive state in URL fragments and userinfo components. That is sound engineering regardless of this CVE and it removes the specific data shape this bug appears able to expose; handle in normal secure-development backlog rather than emergency change.
What doesn't work
  • WAF rules do not meaningfully help because the vulnerable logic is in the client browser's handling and reporting path, not a server-side parser you can shield at the perimeter.
  • Network vulnerability scanning will miss this because Chrome on endpoints is not an externally enumerable service; you need software inventory, not port scans.
  • MFA is unrelated to the vulnerability mechanics; it may reduce phishing follow-on risk, but it does not stop the browser from generating a bad report if the user opens the crafted page.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint or via your software-distribution/EDR remote script runner. Invoke it with python3 check_chrome_cve_2026_11194.py on macOS/Linux or py check_chrome_cve_2026_11194.py on Windows; no admin rights are required if Chrome is installed in standard locations.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3\n# check_chrome_cve_2026_11194.py\n# Exit codes:\n#   0 = PATCHED\n#   1 = VULNERABLE\n#   2 = UNKNOWN\n\nimport os\nimport platform\nimport re\nimport shutil\nimport subprocess\nimport sys\nfrom typing import Optional, Tuple\n\nFIX_WINDOWS_MAC = (149, 0, 7827, 54)\nFIX_LINUX = (149, 0, 7827, 53)\n\ndef parse_version(text: str) -> Optional[Tuple[int, int, int, int]]:\n    m = re.search(r'(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)', text)\n    if not m:\n        return None\n    return tuple(int(x) for x in m.groups())\n\ndef run_cmd(cmd):\n    try:\n        p = subprocess.run(cmd, capture_output=True, text=True, timeout=10)\n        out = (p.stdout or '') + '\\n' + (p.stderr or '')\n        return p.returncode, out.strip()\n    except Exception:\n        return 99, ''\n\ndef get_version_windows() -> Optional[Tuple[int, int, int, int]]:\n    candidates = [\n        os.path.expandvars(r'%ProgramFiles%\\Google\\Chrome\\Application\\chrome.exe'),\n        os.path.expandvars(r'%ProgramFiles(x86)%\\Google\\Chrome\\Application\\chrome.exe'),\n        os.path.expandvars(r'%LocalAppData%\\Google\\Chrome\\Application\\chrome.exe'),\n    ]\n    ps = shutil.which('powershell') or shutil.which('pwsh')\n    for path in candidates:\n        if os.path.exists(path) and ps:\n            cmd = [ps, '-NoProfile', '-Command', f\"(Get-Item '{path}').VersionInfo.ProductVersion\"]\n            rc, out = run_cmd(cmd)\n            ver = parse_version(out)\n            if ver:\n                return ver\n    return None\n\ndef get_version_macos() -> Optional[Tuple[int, int, int, int]]:\n    candidates = [\n        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',\n        os.path.expanduser('~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),\n    ]\n    for path in candidates:\n        if os.path.exists(path):\n            rc, out = run_cmd([path, '--version'])\n            ver = parse_version(out)\n            if ver:\n                return ver\n    return None\n\ndef get_version_linux() -> Optional[Tuple[int, int, int, int]]:\n    candidates = ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser']\n    for exe in candidates:\n        path = shutil.which(exe)\n        if path:\n            rc, out = run_cmd([path, '--version'])\n            ver = parse_version(out)\n            if ver:\n                return ver\n    return None\n\ndef compare(v1, v2):\n    return (v1 > v2) - (v1 < v2)\n\ndef main():\n    system = platform.system().lower()\n    version = None\n    fixed = None\n\n    if 'windows' in system:\n        version = get_version_windows()\n        fixed = FIX_WINDOWS_MAC\n    elif 'darwin' in system:\n        version = get_version_macos()\n        fixed = FIX_WINDOWS_MAC\n    elif 'linux' in system:\n        version = get_version_linux()\n        fixed = FIX_LINUX\n    else:\n        print('UNKNOWN - unsupported platform for this checker')\n        sys.exit(2)\n\n    if not version:\n        print('UNKNOWN - Google Chrome not found or version unreadable')\n        sys.exit(2)\n\n    vstr = '.'.join(str(x) for x in version)\n    fstr = '.'.join(str(x) for x in fixed)\n\n    if compare(version, fixed) >= 0:\n        print(f'PATCHED - detected Chrome {vstr}, fixed threshold {fstr}')\n        sys.exit(0)\n    else:\n        print(f'VULNERABLE - detected Chrome {vstr}, fixed threshold {fstr}')\n        sys.exit(1)\n\nif __name__ == '__main__':\n    main()\n
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: do not treat CVE-2026-11194 like a Chrome fire drill. This is a LOW noisgate verdict, so there is noisgate mitigation SLA for temporary controls and noisgate remediation SLA deadline either; treat it as backlog hygiene, verify browser inventory, and let normal Chrome currency policy roll the fleet to 149.0.7827.53+ during the next routine endpoint maintenance cycle while you document that the real risk is a narrow reporting-path URL leak rather than a broad cross-origin read bug.

Sources

  1. Chrome Releases: Stable Channel Update for Desktop (June 2, 2026)
  2. Chrome Releases: Early Stable Update for Desktop (May 29, 2026)
  3. Chromium fix commit for bug 503719488
  4. Chromium Site Isolation documentation
  5. Chromium design doc: Blocking Cross-Site Documents for Site Isolation
  6. CISA Known Exploited Vulnerabilities Catalog
  7. FIRST EPSS overview
  8. Vulnerability Lookup entry for CVE-2026-11194
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.