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

Insufficient validation of untrusted input in DevTools in Google Chrome prior to 149

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

This is a second lock behind a first break-in, not an open front door

CVE-2026-10916 is an *improper input validation* bug in Chrome DevTools affecting Chrome versions prior to 149.0.7827.53 on Linux and 149.0.7827.53/54 on Windows and macOS. Google lists it as a High-severity DevTools issue reported internally on 2026-03-30 and disclosed in the June 2, 2026 stable release notes; the CVE record was published on 2026-06-04. The public description is incomplete in the advisory snippet you provided, but the wording pattern and neighboring Chrome CVEs strongly indicate this is a *post-renderer-compromise* bug rather than a clean one-click initial access flaw.

paragraph 2: Google calling it High at the Chromium severity layer is understandable from a bug-bar perspective, but operationally this is not Chrome's equivalent of an internet-facing RCE. The decisive friction is the prerequisite: the attacker already needs a compromised renderer process, which means they have already won a separate browser bug or exploit stage. That turns this from a fleet-wide emergency into a *chain-hardening* issue—real, worth patching, but not on the same shelf as unauthenticated renderer RCE or known-exploited sandbox escapes.

"Post-renderer Chrome bug with no public exploitation: important, but not a fleet-wide fire drill"
02 · The Attack Path

3 steps from start to impact.

STEP 01

Land the first-stage browser foothold

The attacker must first compromise Chrome's renderer process through some separate bug or exploit chain, typically via malicious web content. That is a major prerequisite because this CVE does not appear to provide initial code execution by itself. In practice, the weaponized tool here is the *preceding exploit chain*, not CVE-2026-10916 alone.
Conditions required:
  • Victim browses attacker-controlled content
  • Attacker possesses a separate renderer compromise primitive
  • Target is running a vulnerable Chrome build prior to 149.0.7827.53
Where this breaks in practice:
  • Requires a different exploitable bug first
  • Modern Chrome sandboxing and exploit mitigations raise the bar on the first-stage compromise
  • No public one-shot exploit for CVE-2026-10916 was found
Detection/coverage: Most enterprise scanners will only detect version exposure, not attempted renderer compromise. Browser exploit attempts are more likely to surface in EDR/browser crash telemetry than in perimeter tools.
STEP 02

Abuse the DevTools validation flaw

Once code is executing in or controlling the compromised renderer, the attacker abuses insufficient validation in DevTools to cross an internal security boundary. Google has not published full bug details, so the exact primitive is still restricted; based on Chrome's wording conventions, this likely enables a boundary bypass or privilege amplification *after* renderer compromise rather than a stand-alone exploit. The practical weapon here is a custom in-memory exploit stage targeting DevTools internals.
Conditions required:
  • Renderer process already compromised
  • Specific vulnerable DevTools code path reachable from that foothold
  • Attack chain survives Chrome version and platform differences
Where this breaks in practice:
  • Bug details and issue tracker remain restricted
  • Exploit reliability likely depends on Chrome build and platform specifics
  • No commodity framework or public PoC is available
Detection/coverage: There is little signature-based coverage for this step. Detection is mostly indirect: anomalous browser child-process behavior, crash clusters, and exploit-prevention hits in EDR.
STEP 03

Convert boundary bypass into usable impact

The attacker then turns the DevTools-side primitive into whatever the hidden bug permits—most plausibly broader browser access, data access, or help toward sandbox escape. Even if successful, the blast radius is usually tied to the active browser/user context rather than instant enterprise-wide compromise. This matters: it is serious for targeted users, but it is not a wormable fleet event.
Conditions required:
  • Successful exploitation of the DevTools bug
  • Valuable browser session, cookies, or downstream target available in the victim context
  • No compensating detection or containment interrupts post-exploitation
Where this breaks in practice:
  • Impact appears user-context-bound, not network-service-wide
  • Enterprise EDR can still catch suspicious follow-on behavior
  • Attackers still need a second-stage objective after the browser boundary bypass
Detection/coverage: Focus on browser-launched subprocesses, credential theft behavior, unusual local file access from browser descendants, and user-reported Chrome instability around malicious browsing sessions.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo evidence found that this CVE is actively exploited, and it is not listed in CISA KEV as of 2026-06-06.
Public PoCNo public exploit or reproducible PoC located. Google keeps the linked issue tracker restricted, which is normal for fresh Chrome security bugs.
EPSS0.00073 from the supplied intel — extremely low predicted exploitation probability.
KEV statusNot listed in the CISA KEV catalog.
Vendor severity / scoreChromium labels the bug High in the June 2, 2026 stable release notes, but no vendor CVSS score was published.
Affected versionsGoogle Chrome prior to 149.0.7827.53 on Linux and prior to 149.0.7827.53/54 on Windows and macOS.
Fixed versionsPatch to at least 149.0.7827.53 on Linux or 149.0.7827.53/54 on Windows/macOS. Android 149.0.7827.59 carries the corresponding desktop security fixes per Google.
Exposure populationThis is a client-side browser bug, not an internet-facing server flaw. Shodan/Censys-style exposure counting is not materially useful here because they enumerate exposed services, not enterprise browser patch levels.
Disclosure timelineStable release published 2026-06-02; CVE record published 2026-06-04.
ReporterReported by Google on 2026-03-30 in the Chrome release notes.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.9/10)

The single biggest severity brake is the attacker position requirement: this appears to require an already-compromised renderer process, which makes it a *post-initial-browser-compromise* bug rather than an initial intrusion vector. That sharply narrows the reachable population and means most enterprises only face this risk when an attacker already has a separate browser exploit stage.

MEDIUM Severity assessment despite missing vendor CVSS
HIGH Patch/fix version and affected release identification
MEDIUM Inference that this is a post-renderer-compromise chain component

Why this verdict

  • Requires prior compromise: the public wording indicates an attacker already needs a compromised renderer process, which implies a separate exploit stage landed first.
  • Client-side, not edge-exposed: this is not a remotely reachable service on your perimeter; reachable population is every vulnerable browser, but exploitability is gated by browser exploitation conditions and user activity.
  • No exploitation heat: no KEV listing, no public PoC, and the supplied EPSS is extremely low, all of which push this down from panic territory.
  • Ubiquity keeps it above LOW: Chrome is everywhere in enterprise fleets, and browser-chain bugs matter disproportionately on developer, admin, and privileged workstation populations.

Why not higher?

This does not look like a stand-alone, unauthenticated one-click RCE that an attacker can spray at scale and immediately monetize. The need for a prior renderer compromise is compounding friction: it assumes a separate exploit, reduces opportunistic attacker coverage, and narrows real-world abuse to higher-capability actors or chained attacks.

Why not lower?

Chrome is a universally deployed client and DevTools sits inside a high-value trust boundary. Even post-compromise browser bugs deserve attention because they can turn a contained renderer foothold into a more dangerous chain stage against users with sensitive sessions, privileged access, or developer workflows.

05 · Compensating Control

What to do — in priority order.

  1. Prioritize privileged browsing tiers — Push the fixed Chrome build first to administrators, developers, executives, help-desk staff, and anyone who uses high-value SaaS sessions. For a MEDIUM verdict there is no mitigation SLA — go straight to the 365-day remediation window, but these user groups should still move earlier because chained browser exploitation pays off most on privileged endpoints.
  2. Enforce rapid browser auto-update — Make sure Chrome enterprise policies are not delaying stable-channel uptake more than necessary, and verify restart enforcement where your org uses deferred restarts. There is no mitigation SLA for MEDIUM, so this is about shrinking exposure through normal remediation rather than standing up emergency controls.
  3. Harden high-risk browsing paths — Route unknown browsing, research, and threat-intel work through isolated browser profiles, VDI, or remote browser isolation if you already have it. This does not replace patching, but it reduces the value of a renderer-first exploit chain while you work through the remediation window.
  4. Tune EDR for browser-child anomalies — Hunt for suspicious behavior where chrome.exe or google-chrome spawns unusual child processes, touches credential stores, or launches scripting engines. Again, no mitigation SLA applies here for MEDIUM; this is a detection-and-containment backstop while standard patch rollout completes.
What doesn't work
  • A WAF does not help; this is a client-side browser flaw, not a web app bug on your servers.
  • Perimeter vulnerability scanning will not tell you who is exploiting it; at best it can validate browser version inventory if you already collect endpoint software data.
  • Blocking DevTools access alone is not a dependable fix; the bug is in DevTools code, but the public description suggests the meaningful gate is prior renderer compromise, not ordinary user opening of DevTools.
06 · Verification

Crowdsourced verification payload.

Run this on the target endpoint or through your endpoint management tooling. Invoke it with python3 check_chrome_cve_2026_10916.py on Linux/macOS or py check_chrome_cve_2026_10916.py on Windows; no admin rights are usually required, but local software inventory access is needed.

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

import os
import platform
import re
import subprocess
import sys

WIN_FIXED = (149, 0, 7827, 53)  # accept 53 or higher; release notes mention 53/54
LINUX_FIXED = (149, 0, 7827, 53)
MAC_FIXED = (149, 0, 7827, 53)  # accept 53 or higher; release notes mention 53/54


def parse_version(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 run_cmd(cmd):
    try:
        p = subprocess.run(cmd, capture_output=True, text=True, timeout=10)
        out = (p.stdout or '') + ' ' + (p.stderr or '')
        return out.strip()
    except Exception:
        return ''


def find_version_windows():
    candidates = [
        r'C:\Program Files\Google\Chrome\Application\chrome.exe',
        r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe',
        os.path.expandvars(r'%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe'),
    ]
    for path in candidates:
        if path and os.path.exists(path):
            out = run_cmd([path, '--version'])
            ver = parse_version(out)
            if ver:
                return ver, path
    return None, None


def find_version_linux():
    candidates = ['google-chrome', 'google-chrome-stable', 'chromium', 'chromium-browser']
    for cmd in candidates:
        out = run_cmd([cmd, '--version'])
        ver = parse_version(out)
        if ver:
            return ver, cmd
    return None, None


def find_version_mac():
    candidates = [
        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
        os.path.expanduser('~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'),
    ]
    for path in candidates:
        if os.path.exists(path):
            out = run_cmd([path, '--version'])
            ver = parse_version(out)
            if ver:
                return ver, path
    return None, None


def compare(ver, fixed):
    if ver is None:
        return None
    if ver < fixed:
        return 'VULNERABLE'
    return 'PATCHED'


def main():
    system = platform.system().lower()
    ver = None
    source = None
    fixed = None

    if 'windows' in system:
        ver, source = find_version_windows()
        fixed = WIN_FIXED
    elif 'linux' in system:
        ver, source = find_version_linux()
        fixed = LINUX_FIXED
    elif 'darwin' in system or 'mac' in system:
        ver, source = find_version_mac()
        fixed = MAC_FIXED
    else:
        print('UNKNOWN - unsupported platform')
        sys.exit(2)

    if ver is None:
        print('UNKNOWN - Chrome/Chromium version not found')
        sys.exit(2)

    status = compare(ver, fixed)
    if status == 'VULNERABLE':
        print(f'VULNERABLE - detected {ver[0]}.{ver[1]}.{ver[2]}.{ver[3]} from {source}; fixed is {fixed[0]}.{fixed[1]}.{fixed[2]}.{fixed[3]} or later')
        sys.exit(1)
    elif status == 'PATCHED':
        print(f'PATCHED - detected {ver[0]}.{ver[1]}.{ver[2]}.{ver[3]} from {source}')
        sys.exit(0)
    else:
        print('UNKNOWN - comparison failed')
        sys.exit(2)


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

If you remember one thing.

TL;DR
Monday morning: treat this as a chain-hardening browser patch, not an all-hands emergency. Use your normal browser deployment ring, verify who is still below 149.0.7827.53/54, and front-load privileged browsing tiers first; for a MEDIUM verdict there is noisgate mitigation SLAno mitigation SLA — go straight to the 365-day remediation window — and your noisgate remediation SLA is to complete patching within 365 days, though most mature shops should finish routine Chrome rollouts far sooner than that.

Sources

  1. Google Chrome Releases - Stable Channel Update for Desktop (June 2, 2026)
  2. Google Chrome Releases archive showing CVE-2026-10916 entry
  3. Canadian Centre for Cyber Security advisory AV26-544
  4. Chromium Security page
  5. CISA Known Exploited Vulnerabilities Catalog
  6. FIRST EPSS
  7. GreyNoise CVE enrichment API reference
  8. Censys Search product overview
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.