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.
4 steps from start to impact.
Deliver lure and malicious file
- 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
- 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
Bypass Safe Browsing warning path
- The malicious file or delivery pattern must hit the vulnerable Safe Browsing logic
- Safe Browsing must be in use and relevant to the flow
- 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
Rely on user execution or follow-on abuse
- User interaction after download
- A harmful payload that can execute or trick the user once delivered
- 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
Achieve actual impact
- Downstream controls miss the file or allow user override
- Payload has a viable execution path on the target OS
- 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
The supporting signals.
| In-the-wild status | No confirmed active exploitation found in the reviewed sources, and the user-provided intel says KEV listed: No. |
|---|---|
| KEV status | Not listed in CISA KEV at review time; absent from the public catalog link used for validation. |
| EPSS | 0.00026 from the user-provided intel — effectively near-baseline exploitation probability. |
| Proof-of-concept availability | No 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 vector | CVSS: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 versions | Google Chrome prior to 149.0.7827.53; downstream Chromium consumers may inherit exposure until their vendor republishes a fixed build. |
| Fixed versions | Chrome 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 reality | This 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 date | 2026-06-05 per the user-provided intel and third-party CVE feed indexing. |
| Researcher / reporter | No public reporter attribution found in reviewed sources for this specific CVE. |
noisgate verdict.
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.
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.
What to do — in priority order.
- 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.
- 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.
- Enforce Safe Browsing policy — Keep
SafeBrowsingProtectionLevelenabled 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. - 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.
- 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.
- 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.
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.
#!/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())
If you remember one thing.
Sources
- Chrome Releases - Early Stable Update for Desktop (149.0.7827.53/.54)
- openSUSE patchinfo - chromium security fixes in 149.0.7827.53
- TechSpot - Google Chrome 149.0.7827.54 release notes aggregation
- Chrome Help - Choose your Safe Browsing protection level
- Chrome Enterprise Help - Safe Browsing and your data
- Chromium design doc - Safe Browsing
- CISA Known Exploited Vulnerabilities Catalog
- FIRST EPSS API documentation
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.