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

Inappropriate implementation in SafeBrowsing in Google Chrome prior to 149

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

Like peeling the hazard sticker off a dangerous package while leaving the lock on the door

CVE-2026-11266 is a Safe Browsing bypass in Google Chrome before 149.0.7827.53 that lets a remote attacker get a malicious file past Chrome's normal reputation/warning flow. The affected population is broad in product terms—Chrome desktop deployments prior to 149.0.7827.53, with downstream Chromium builds also picking up the same fix—but the flaw's direct effect is narrow: it removes or weakens a browser safety check rather than granting code execution, sandbox escape, or data theft by itself.

Google's MEDIUM 4.3 label is reasonable in a vacuum, but for enterprise patch priority this lands lower. The decisive friction is that the attacker still needs a second-stage success condition after the bypass: the user must download/open the file, and the file then must do something harmful that other controls fail to stop. In real fleets, email security, web filtering, attachment detonation, SmartScreen/Gatekeeper/EDR, and application control all sit downstream, so this is best treated as a defense-evasion gap in a browser control—not an emergency breach path.

"This is a warning-label failure in a browser control, not a one-click Chrome compromise"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Deliver lure and malicious file

The attacker uses a phishing page, drive-by download prompt, chat attachment, or redirected download to present a file to the victim through Chrome. The weaponized item is the malicious file itself; the CVE is only relevant if the file delivery depends on Safe Browsing reputation checks failing to warn or block.
Conditions required:
  • Target uses Chrome earlier than 149.0.7827.53
  • Attacker can get the victim to a download flow or file link
  • Victim has network access to the attacker-controlled or compromised hosting site
Where this breaks in practice:
  • Email gateways and secure web gateways often block or rewrite risky downloads before Chrome sees them
  • User awareness and browser download prompts already reduce open rates
  • Many enterprises disallow or quarantine high-risk file types at the transport layer
Detection/coverage: Phishing, URL, and attachment scanners usually see this stage; browser-version-only vuln scanners may flag the CVE, but they cannot prove exploitability.
STEP 02

Bypass Safe Browsing warning path

Because of the Safe Browsing implementation flaw, Chrome may fail to present the expected warning or may otherwise let the file appear benign enough to proceed. The weaponized mechanism here is Chrome Safe Browsing bypass; unlike an RCE, the bug does not execute attacker code inside the browser.
Conditions required:
  • The malicious file or delivery pattern must hit the vulnerable Safe Browsing logic
  • Safe Browsing must be in use and relevant to the flow
Where this breaks in practice:
  • No public exploitation details or PoC were found in reviewed sources
  • Enhanced protection, alternate reputation systems, or enterprise proxies can still add coverage outside the vulnerable decision point
  • Some users are on non-Chrome browsers or already auto-updated past the fixed build
Detection/coverage: Difficult to detect as a discrete event from endpoint telemetry; most defenders will only see the downstream download, file write, or process execution.
STEP 03

Rely on user execution or follow-on abuse

After the warning is bypassed, the attacker still needs the victim to open, run, or trust the file, or otherwise complete a social-engineering action. The weaponized tool at this point is the payload family behind the file—commodity malware, a trojanized installer, a document exploit chain, or a fake application update.
Conditions required:
  • User interaction after download
  • A harmful payload that can execute or trick the user once delivered
Where this breaks in practice:
  • EDR, attachment sandboxing, SmartScreen, Gatekeeper, notarization checks, and application control can still stop execution
  • If the payload is just a document or archive, additional macro/exploit controls are needed for compromise
  • The CVE contributes no privilege gain, no persistence, and no lateral movement by itself
Detection/coverage: This is where detection gets better: file reputation, AMSI/script logging, EDR process trees, quarantine events, and application control logs usually fire.
STEP 04

Achieve actual impact

Real business impact only happens if the payload successfully runs or the user is successfully deceived into a harmful action. In other words, this CVE is an amplifier for initial access content, not the initial access itself.
Conditions required:
  • Downstream controls miss the file or allow user override
  • Payload has a viable execution path on the target OS
Where this breaks in practice:
  • Modern fleets commonly have multiple independent controls after the browser
  • Blast radius is generally one user endpoint at a time, not tenant-wide or domain-wide
Detection/coverage: Impact is observable through the downstream malware or account abuse, not through the Safe Browsing bypass alone.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed active exploitation found in the reviewed sources, and the user-provided intel says KEV listed: No.
KEV statusNot listed in CISA KEV at review time; absent from the public catalog link used for validation.
EPSS0.00026 from the user-provided intel — effectively near-baseline exploitation probability.
Proof-of-concept availabilityNo public PoC located in the reviewed sources. That matters because Safe Browsing bypasses are often harder to operationalize than the CVE label suggests when exploit details stay private.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N — remote and unauthenticated, but user interaction is required and the direct impact is only integrity-low.
Affected versionsGoogle Chrome prior to 149.0.7827.53; downstream Chromium consumers may inherit exposure until their vendor republishes a fixed build.
Fixed versionsChrome 149.0.7827.53 for Linux and 149.0.7827.53/.54 for Windows/Mac in Google's release cadence; openSUSE also references chromium 149.0.7827.53 as the security-fix baseline.
Exposure realityThis is widely deployed software but not scanner-friendly internet exposure. Shodan/Censys/FOFA are largely irrelevant here because they do not tell you which endpoints in your fleet are running a vulnerable browser build.
Disclosure date2026-06-05 per the user-provided intel and third-party CVE feed indexing.
Researcher / reporterNo public reporter attribution found in reviewed sources for this specific CVE.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (2.9/10)

The single biggest downward driver is that this bug does not compromise Chrome on its own; it only weakens a warning and still needs the user to complete a second-stage file execution or trust action. That makes it a defense-evasion assist in an initial-access chain, not a reliable stand-alone enterprise breach path.

HIGH Direct technical impact is limited to Safe Browsing bypass rather than code execution
MEDIUM Real-world exploitability without public PoC or exploitation reporting

Why this verdict

  • Start from vendor 4.3, then mark down for the missing payload stage — the CVE removes a browser warning but does not deliver code execution, privilege gain, or data access by itself.
  • User interaction compounds the friction — the attacker needs a victim to download/open or otherwise trust a malicious file, which is a weaker path than silent browser compromise.
  • Enterprise control stack adds multiple downstream stops — secure email/web gateways, attachment detonation, SmartScreen/Gatekeeper, EDR, and app control all still have chances to kill the chain after the Safe Browsing miss.
  • Exposure is broad but blast radius is narrow — Chrome is everywhere, but exploitation is endpoint-by-endpoint and usually user-by-user rather than service-wide.
  • No exploitation evidence, KEV listing, or public PoC keeps this out of urgent patch territory despite Chrome's ubiquity.

Why not higher?

A higher rating would need a cleaner enterprise attack path: active exploitation, a mature PoC, or a direct outcome like RCE, sandbox escape, or credential theft. None of that is present here. This CVE only improves the odds of a malicious download succeeding, and only if several other controls also fail.

Why not lower?

It is not IGNORE because Safe Browsing is a meaningful protective layer on one of the most widely deployed enterprise clients on earth. If your environment leans heavily on browser-mediated protection for risky downloads, a bypass still increases exposure to phishing-delivered malware and fake installers.

05 · Compensating Control

What to do — in priority order.

  1. Force managed Chrome updates — Push Chrome/Chromium to 149.0.7827.53 or later through your normal browser management channel. For a LOW verdict there is no mitigation SLA; treat this as backlog hygiene and complete patching inside the 365-day remediation window unless your own browser baseline is tighter.
  2. Harden download controls — Block or sandbox high-risk file types at the email gateway, secure web gateway, or proxy so the browser is not your first and last line of defense. This is the most effective compensating control because the CVE's value to an attacker appears only when a malicious file reaches a user.
  3. Enforce Safe Browsing policy — Keep SafeBrowsingProtectionLevel enabled on managed Chrome rather than allowing users to turn it off. This does not fix the bug, but it preserves the rest of Chrome's reputation pipeline and should remain standard fleet policy.
  4. Tighten endpoint execution policy — Use WDAC/AppLocker on Windows, Gatekeeper/notarization enforcement on macOS, and equivalent Linux application allowlisting where practical. Because the CVE is only a delivery-assist, blocking untrusted binaries and scripts is what collapses the actual attack chain.
  5. Prioritize EDR coverage on download-to-exec paths — Tune detections for browser child processes, archive extraction into temp paths, unsigned installers, and user-profile execution locations. That is where this CVE would surface operationally if abused.
What doesn't work
  • MFA does nothing for a malicious file landing on an endpoint; this is not an authentication problem.
  • A WAF does nothing for most enterprise client-side download flows because the vulnerable component is the browser on the endpoint, not your web application.
  • Network segmentation has limited value at the vulnerable step; it may reduce later lateral movement, but it does not stop the browser warning bypass itself.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint or via your software inventory agent anywhere Python 3 is available. Invoke it as python3 check_chrome_cve_2026_11266.py; no admin rights are required, though access to application bundle paths helps on macOS. It checks common Google Chrome and Chromium install locations and prints VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
# check_chrome_cve_2026_11266.py
# Detects local Google Chrome / Chromium versions against CVE-2026-11266 fixed version.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

import os
import platform
import re
import subprocess
import sys
from typing import List, Optional, Tuple

FIXED = (149, 0, 7827, 53)
VERSION_RE = re.compile(r'(\d+)\.(\d+)\.(\d+)\.(\d+)')


def parse_version(text: str) -> Optional[Tuple[int, int, int, int]]:
    m = VERSION_RE.search(text or '')
    if not m:
        return None
    return tuple(int(x) for x in m.groups())


def cmp_ver(a: Tuple[int, int, int, int], b: Tuple[int, int, int, int]) -> int:
    return (a > b) - (a < b)


def run_version_cmd(cmd: List[str]) -> Optional[str]:
    try:
        p = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, timeout=10)
        out = (p.stdout or '').strip()
        return out if out else None
    except Exception:
        return None


def check_windows() -> List[Tuple[str, Optional[Tuple[int, int, int, int]], str]]:
    results = []
    candidates = [
        os.path.expandvars(r'%ProgramFiles%\Google\Chrome\Application\chrome.exe'),
        os.path.expandvars(r'%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe'),
        os.path.expandvars(r'%LocalAppData%\Google\Chrome\Application\chrome.exe'),
        os.path.expandvars(r'%ProgramFiles%\Chromium\Application\chrome.exe'),
        os.path.expandvars(r'%ProgramFiles(x86)%\Chromium\Application\chrome.exe'),
    ]
    ps = 'powershell'
    for path in candidates:
        if os.path.exists(path):
            cmd = [ps, '-NoProfile', '-Command', f"(Get-Item '{path.replace("'", "''")}').VersionInfo.ProductVersion"]
            out = run_version_cmd(cmd)
            ver = parse_version(out or '')
            results.append((path, ver, out or ''))
    return results


def check_macos() -> List[Tuple[str, Optional[Tuple[int, int, int, int]], str]]:
    results = []
    candidates = [
        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
        os.path.expanduser('~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),
        '/Applications/Chromium.app/Contents/MacOS/Chromium',
        os.path.expanduser('~/Applications/Chromium.app/Contents/MacOS/Chromium'),
    ]
    for path in candidates:
        if os.path.exists(path):
            out = run_version_cmd([path, '--version'])
            ver = parse_version(out or '')
            results.append((path, ver, out or ''))
    return results


def check_linux() -> List[Tuple[str, Optional[Tuple[int, int, int, int]], str]]:
    results = []
    candidates = [
        ['google-chrome', '--version'],
        ['google-chrome-stable', '--version'],
        ['chromium', '--version'],
        ['chromium-browser', '--version'],
        ['/opt/google/chrome/chrome', '--version'],
        ['/usr/bin/google-chrome', '--version'],
        ['/usr/bin/chromium', '--version'],
        ['/usr/bin/chromium-browser', '--version'],
    ]
    seen = set()
    for cmd in candidates:
        key = tuple(cmd)
        if key in seen:
            continue
        seen.add(key)
        out = run_version_cmd(cmd)
        if out:
            ver = parse_version(out)
            results.append((' '.join(cmd), ver, out))
    return results


def main() -> int:
    system = platform.system().lower()
    if 'windows' in system:
        findings = check_windows()
    elif 'darwin' in system:
        findings = check_macos()
    else:
        findings = check_linux()

    if not findings:
        print('UNKNOWN: Chrome/Chromium not found in common locations')
        return 2

    vulnerable = []
    patched = []
    unknown = []

    for loc, ver, raw in findings:
        if ver is None:
            unknown.append((loc, raw))
        elif cmp_ver(ver, FIXED) < 0:
            vulnerable.append((loc, ver))
        else:
            patched.append((loc, ver))

    if vulnerable:
        details = '; '.join([f'{loc}={".".join(map(str, ver))}' for loc, ver in vulnerable])
        print(f'VULNERABLE: {details} (fixed version: 149.0.7827.53+)')
        return 1

    if patched and not unknown:
        details = '; '.join([f'{loc}={".".join(map(str, ver))}' for loc, ver in patched])
        print(f'PATCHED: {details}')
        return 0

    if patched:
        details = '; '.join([f'{loc}={".".join(map(str, ver))}' for loc, ver in patched])
        print(f'PATCHED: {details} | Note: some installs could not be versioned')
        return 0

    print('UNKNOWN: Browser found but version could not be parsed')
    return 2


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

If you remember one thing.

TL;DR
Monday morning: do not preempt high-value server or actively exploited work for this one. Add vulnerable Chrome/Chromium endpoints to your standard browser update queue, keep file-delivery controls and EDR tuned, and verify that Safe Browsing remains enforced by policy where you use managed Chrome. For a LOW verdict there is no noisgate mitigation SLA and noisgate remediation SLA is backlog hygiene rather than an emergency lane; translate that into your normal browser-patch cycle and close it inside your broader annual remediation window, sooner if browser auto-update makes that effectively free.

Sources

  1. Chrome Releases - Early Stable Update for Desktop (149.0.7827.53/.54)
  2. openSUSE patchinfo - chromium security fixes in 149.0.7827.53
  3. TechSpot - Google Chrome 149.0.7827.54 release notes aggregation
  4. Chrome Help - Choose your Safe Browsing protection level
  5. Chrome Enterprise Help - Safe Browsing and your data
  6. Chromium design doc - Safe Browsing
  7. CISA Known Exploited Vulnerabilities Catalog
  8. FIRST EPSS API documentation
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.