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

Insufficient policy enforcement in FoldableAPIs in Google Chrome prior to 149

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

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

What the bug *appears* to be in practice is a FoldableAPIs policy/control failure in Google Chrome before 149.0.7827.53 that becomes reachable only after code is already running in the renderer process. One important caveat: the public metadata is inconsistent. Google's June 2, 2026 Chrome 149 release notes list CVE-2026-11233 as "insufficient validation of untrusted input in FoldableAPIs" and list the adjacent CVE-2026-11234 as "insufficient policy enforcement in FoldableAPIs"; your supplied title and CVSS match the *policy-enforcement / compromised-renderer* pattern, but the identifier in the prompt is 11233.

Either way, the operational story is the same: this is not an internet-facing initial-access bug. The decisive friction is that the attacker must already have achieved renderer compromise, which implies a separate exploit, a successful malicious page, and defeat of browser hardening up to that point. That sharply narrows real-world exposure, so a vendor MEDIUM 4.7 score overstates patch urgency for enterprise backlog triage; for defenders managing fleets, this belongs in the LOW bucket unless chained exploitation evidence appears.

"This is a chain helper, not an entry point: it matters after renderer compromise, not before."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Land code in the renderer

The attacker first needs a separate bug or exploit chain that achieves execution inside Chrome's renderer process from malicious web content. In practice that means a weaponized browser exploit delivered via a crafted page, ad, or embedded content; this CVE does not provide that foothold by itself. Think of this step as the real cost of entry.
Conditions required:
  • Victim browses attacker-controlled or attacker-influenced content
  • A separate renderer-compromise exploit exists and works against the target build
  • Browser mitigations for the initial exploit chain are bypassed
Where this breaks in practice:
  • Requires a second vulnerability or exploit primitive outside this CVE
  • Modern Chrome sandboxing and exploit mitigations raise cost
  • Email/web gateways, Safe Browsing, and content isolation may stop delivery before exploitation
Detection/coverage: Traditional vulnerability scanners do not see this step. Detection is mostly via browser crash telemetry, exploit protection alerts, EDR child-process anomalies, and threat intel around active browser exploit chains.
STEP 02

Invoke the FoldableAPIs path

Once in the renderer, the attacker exercises the affected FoldableAPIs code path through crafted HTML/JavaScript. The purpose is to abuse weak policy enforcement or validation logic to cross an internal browser trust boundary that should have constrained renderer behavior.
Conditions required:
  • Compromised renderer context can reach the vulnerable FoldableAPIs surface
  • Target is running a Chrome build earlier than 149.0.7827.53
Where this breaks in practice:
  • FoldableAPIs is a niche browser subsystem, not a universally exercised enterprise workflow
  • Feature reachability may vary by platform, build, and page context
  • No public exploit chain or weaponized PoC was found for this CVE
Detection/coverage: Very limited scanner coverage beyond version checks. Browser-side telemetry or targeted detection engineering would be needed to spot unusual FoldableAPIs invocation.
STEP 03

Abuse the broken policy boundary

If the bug is successfully triggered, the attacker can potentially obtain data or capability that should remain blocked from a renderer-controlled context. Based on the supplied CVSS vector (S:C/C:L/I:N/A:N), the expected impact is limited confidentiality leakage rather than broad integrity or availability loss.
Conditions required:
  • The vulnerable policy/validation check is actually bypassable on the target platform
  • Useful target data exists behind that boundary
Where this breaks in practice:
  • Impact is narrow: no evidence of direct code execution, persistence, or system compromise from this CVE alone
  • Confidentiality impact is rated low, suggesting small blast radius per successful trigger
Detection/coverage: At scale this is mostly invisible unless you already collect fine-grained browser telemetry. Network DLP may catch some exfiltration, but only after the attacker has already crossed the browser boundary.
STEP 04

Chain to meaningful post-exploitation

The attacker still needs to turn that limited browser-side win into something operationally useful, such as session theft, cross-origin data leakage, or further chaining into a sandbox escape or credential abuse. This final step is where many theoretical browser-bug impacts fail to translate into broad enterprise risk.
Conditions required:
  • Leaked data is valuable and reusable
  • Additional enterprise controls do not block follow-on abuse
Where this breaks in practice:
  • MFA, token binding, short-lived sessions, and conditional access can reduce follow-on value
  • Blast radius is usually one browser profile or one user session, not 10,000 hosts
Detection/coverage: Downstream controls like IdP anomaly detection, CASB, and DLP are more likely to see impact than the vulnerability trigger itself.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed exploitation found. Not present in CISA KEV, and I found no vendor statement calling this a zero-day.
PoC availabilityNo public weaponized PoC or exploit repo found for this specific CVE. That matters because this bug already depends on a prior renderer compromise.
EPSS0.00019 from your supplied intel — effectively background noise, consistent with a niche, chain-dependent browser bug.
KEV statusNo KEV listing as of the CISA catalog data reviewed; no KEV add date because it is not listed.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:N — network-deliverable and user-driven, but only low confidentiality impact and no integrity/availability damage in the score.
Affected versionsChrome versions prior to 149.0.7827.53 on desktop, with Android inheriting the corresponding desktop security fixes per Google's release note.
Fixed versionsDesktop fixed in Chrome 149.0.7827.53 (Linux) and 149.0.7827.53/.54 (Windows/Mac); Android 149.0.7827.59 carries the same desktop security fixes.
Scanning / exposure realityThis is a client-side browser flaw, so Shodan/Censys/FOFA-style internet exposure counts are the wrong model. Your real exposure metric is managed Chrome fleet version distribution, not open ports.
Disclosure timelineGoogle's stable release carrying the fix was posted on June 2, 2026; your supplied disclosure date is June 4, 2026. Use the June 2, 2026 release date when aligning enterprise patch windows.
Record mismatch to watchThere is a likely metadata collision: Google's release notes map CVE-2026-11233 to *insufficient validation* in FoldableAPIs and CVE-2026-11234 to *insufficient policy enforcement* in FoldableAPIs. Your prompt's title/CVSS look closer to the adjacent record than to the official 11233 release-note line item.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (2.8/10)

The single biggest reason this lands in LOW is the attacker-position requirement: it needs an already-compromised renderer process, which means this CVE is a *post-initial-access browser chain helper*, not an entry point. That sharply limits the reachable population and the standalone value of exploitation, even in a widely deployed product like Chrome.

HIGH Attacker-position friction materially lowers real-world severity
MEDIUM Identifier/title mismatch between supplied intel and Google's official release notes
MEDIUM Assessment that impact is mostly limited confidentiality leakage rather than broad host compromise

Why this verdict

  • Requires prior renderer compromise: this prerequisite implies the attacker already won a separate browser exploitation stage, which is major downward pressure on severity.
  • Reachable population is narrower than "all Chrome users": only unpatched Chrome builds *and* successful renderer-compromise chains *and* reachable FoldableAPIs paths matter.
  • Modern controls should break earlier steps: Safe Browsing, browser exploit mitigations, EDR, web isolation, and secure web gateways are all more likely to stop the attack before this CVE becomes relevant.
  • Blast radius is limited: the supplied CVSS points to low confidentiality impact and no direct integrity or availability loss, so even successful exploitation is not a fleet-wide disaster on its own.
  • No KEV, no exploitation evidence, no PoC: absent real-world weaponization, this looks like a low-value chain component rather than a patch-now fire.

Why not higher?

A higher severity would require one of three amplifiers: active exploitation, a public working exploit chain, or a lower-friction attacker position such as unauthenticated remote compromise from web content alone. None of those are present here. The fact pattern says chain-dependent, post-renderer, low-impact confidentiality exposure.

Why not lower?

It is not IGNORE because Chrome is massively deployed and browser flaws do get chained. Even a low-value browser trust-boundary bug can become relevant if paired with another exploit, and managed fleets should still roll the fixed version through normal browser-update hygiene.

05 · Compensating Control

What to do — in priority order.

  1. Force auto-update compliance — Use enterprise browser management to ensure Chrome moves to 149.0.7827.53/.54 or later during the normal maintenance cycle. For a LOW verdict there is no SLA (treat as backlog hygiene), but stale browser rings should still be corrected because chainable browser debt accumulates.
  2. Harden browser exploit prevention — Keep EDR exploit protection, browser sandbox settings, Safe Browsing, and reputation-based blocking enabled because they target the earlier renderer-compromise stage this CVE depends on. For a LOW verdict there is no formal mitigation SLA, but these controls should already be baseline policy.
  3. Monitor browser version drift — Track managed endpoints that remain below 149.0.7827.53 and correlate with high-risk user groups like admins, developers, and finance staff. This is the practical way to measure exposure because internet scanning cannot see client-browser patch state.
  4. Reduce risky browsing paths — Apply web isolation or tighter content filtering for high-risk populations where browser exploit chains are more likely to start. That matters more than a CVE-specific workaround because the decisive friction is the need for a separate renderer exploit first.
What doesn't work
  • A perimeter vulnerability scan will not meaningfully reduce risk here, because this is a client-side browser issue and scanners cannot validate exploitability beyond version checks.
  • Network segmentation does little by itself; the vulnerable component is the endpoint browser, not a server listening on a segmented subnet.
  • WAF tuning is mostly irrelevant because the browser must first be compromised client-side; this is not a server-side request path problem.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint or through your software inventory agent. Invoke it with python3 chrome_cve_2026_11233_check.py on macOS/Linux or py chrome_cve_2026_11233_check.py on Windows; it needs only normal user rights because it reads the installed Chrome version from common executable paths and the registry when available.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3\n# Chrome version check for CVE-2026-11233 / adjacent FoldableAPIs fixes\n# Outputs: VULNERABLE / PATCHED / UNKNOWN\n# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN\n\nimport os\nimport platform\nimport re\nimport subprocess\nimport sys\n\nTARGET = (149, 0, 7827, 53)\n\ndef norm(v):\n    m = re.search(r'(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)', v or '')\n    if not m:\n        return None\n    return tuple(int(x) for x in m.groups())\n\ndef ver_to_str(v):\n    return '.'.join(str(x) for x in v)\n\ndef run_cmd(cmd):\n    try:\n        p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=5)\n        out = (p.stdout or p.stderr or '').strip()\n        return out\n    except Exception:\n        return ''\n\ndef check_windows():\n    try:\n        import winreg\n    except Exception:\n        winreg = None\n\n    paths = [\n        r'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',\n        r'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',\n        os.path.expandvars(r'%LOCALAPPDATA%\\Google\\Chrome\\Application\\chrome.exe'),\n    ]\n\n    for p in paths:\n        if p and os.path.exists(p):\n            out = run_cmd([p, '--version'])\n            v = norm(out)\n            if v:\n                return v, p\n\n    if winreg is not None:\n        reg_paths = [\n            (winreg.HKEY_CURRENT_USER, r'Software\\Google\\Chrome\\BLBeacon', 'version'),\n            (winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\\Google\\Chrome\\BLBeacon', 'version'),\n            (winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\\WOW6432Node\\Google\\Chrome\\BLBeacon', 'version'),\n        ]\n        for hive, key_path, value_name in reg_paths:\n            try:\n                key = winreg.OpenKey(hive, key_path)\n                val, _ = winreg.QueryValueEx(key, value_name)\n                v = norm(val)\n                if v:\n                    return v, f'registry:{key_path}'\n            except Exception:\n                pass\n\n    return None, None\n\ndef check_macos():\n    paths = [\n        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',\n        os.path.expanduser('~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),\n    ]\n    for p in paths:\n        if os.path.exists(p):\n            out = run_cmd([p, '--version'])\n            v = norm(out)\n            if v:\n                return v, p\n    return None, None\n\ndef check_linux():\n    candidates = [\n        'google-chrome', 'google-chrome-stable', 'chrome',\n        '/usr/bin/google-chrome', '/usr/bin/google-chrome-stable', '/opt/google/chrome/chrome'\n    ]\n    for c in candidates:\n        if '/' in c and not os.path.exists(c):\n            continue\n        out = run_cmd([c, '--version'])\n        v = norm(out)\n        if v:\n            return v, c\n    return None, None\n\ndef main():\n    system = platform.system().lower()\n    version = None\n    source = None\n\n    if 'windows' in system:\n        version, source = check_windows()\n    elif 'darwin' in system:\n        version, source = check_macos()\n    else:\n        version, source = check_linux()\n\n    if version is None:\n        print('UNKNOWN: Google Chrome version could not be determined from common install paths')\n        sys.exit(2)\n\n    # Windows/Mac fixed at 149.0.7827.53 or .54; Linux fixed at 149.0.7827.53.\n    # Treat any version >= 149.0.7827.53 as patched for this check.\n    if version >= TARGET:\n        print(f'PATCHED: detected Chrome {ver_to_str(version)} via {source}')\n        sys.exit(0)\n    else:\n        print(f'VULNERABLE: detected Chrome {ver_to_str(version)} via {source}; needs >= {ver_to_str(TARGET)}')\n        sys.exit(1)\n\nif __name__ == '__main__':\n    main()\n
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: treat this as browser backlog hygiene, not a break-glass event. There is no noisgate mitigation SLA — go straight to the 365-day remediation window, but because Chrome updates are low-friction you should still push managed endpoints to 149.0.7827.53/.54 or later in the next normal browser release cycle and clean up laggards well before the noisgate remediation SLA of ≤ 365 days. If your environment has users at elevated phishing or watering-hole risk, prioritize their browser rings first, because the only meaningful path here is as part of a broader renderer-compromise chain.

Sources

  1. Google Chrome Releases - Stable Channel Update for Desktop (Chrome 149)
  2. Google Chrome Releases - main site
  3. Chromium Security Page
  4. CISA Known Exploited Vulnerabilities Catalog
  5. FIRST EPSS overview
  6. FIRST EPSS API documentation
  7. GovCERT.HK alert for Chrome 149.0.7827.53
  8. Third-party aggregation showing CVE-2026-11233 supplied metadata
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.