Back to Intelligence

Chrome 157.0.8103.78 Patches 83 Flaws Including Critical CVE-2026-126885 and CVE-2026-126895 — Enterprise Update and Detection Guide

SA
Security Arsenal Team
November 12, 2026
11 min read

Google's Stable channel update to Chrome 157.0.8103.78/.79 for Windows and Mac, and 157.0.8103.78 for Linux closes 83 security vulnerabilities in a single release — one of the heavier fix batches we've seen ship in a single stable push this year. Two of those fixes carry a Critical severity rating, both use-after-free conditions reported by researcher Xinyang Ge:

  • CVE-2026-126885 — Use after free in ServiceWorker
  • CVE-2026-126895 — Use after free in CSS

Per Google's standard disclosure policy, bug details and links remain restricted until a majority of users receive the fix — which historically means Google considers at least one of these bugs sensitive enough to withhold technical detail while the fleet updates. That restriction pattern, combined with a Critical rating on memory-corruption primitives reachable from web content, is your signal to treat this as a priority-one browser patch cycle.

If you manage an enterprise fleet, the defensive clock started when this release hit the wire. The gap between patch release and patch deployment is exactly where browser exploitation campaigns operate.

Technical Analysis

Affected Products and Versions

PlatformFixed VersionPrior Versions
Windows157.0.8103.78 / 157.0.8103.79All builds < 157.0.8103.78
macOS157.0.8103.78 / 157.0.8103.79All builds < 157.0.8103.78
Linux157.0.8103.78All builds < 157.0.8103.78

The rollout is staged over the coming days/weeks, which means some endpoints will not auto-update promptly. Do not assume Chrome's self-update mechanism has covered your fleet — verify.

The Vulnerabilities

CVE-2026-126885 — Use After Free in ServiceWorker. Service workers are persistent background scripts that intercept network requests, manage caches, and handle push events — they run with significant privilege inside the browser process architecture and survive page navigation. A use-after-free in this component means an attacker-controlled object can be referenced after the underlying memory has been freed and reallocated. In a renderer context, a reliable UAF in ServiceWorker is a classic building block for renderer compromise: heap grooming to control the reallocated memory, then type confusion or vtable hijack to gain read/write primitives.

CVE-2026-126895 — Use After Free in CSS. The CSS engine parses attacker-controlled style content on every rendered page. A UAF here is reachable through nothing more exotic than a crafted stylesheet delivered via a malicious page, a compromised legitimate site, or injected content. CSS parsing bugs are attractive to exploit developers because they trigger during normal rendering — no user interaction beyond visiting a page.

Exploitation Requirements and Attack Chain (Defender's View)

From a defensive standpoint, both bugs share the same exploitation model:

  1. Delivery: Victim visits a malicious or compromised page (watering hole, malvertising, phishing link, SEO poisoning).
  2. Trigger: Crafted ServiceWorker registration logic or CSS content causes the browser to free an object that is subsequently dereferenced.
  3. Renderer compromise: Heap manipulation converts the UAF into arbitrary read/write within the renderer process.
  4. Sandbox escape (if chained): Critical-rated UAFs are frequently chained with a sandbox-escape bug to reach full code execution on the host. The 83-fix batch likely contains sandbox-relevant fixes as well — another reason to patch the whole release, not cherry-pick.

Exploitation Status

As of this writing, Google has not flagged either CVE as exploited in the wild, and neither appears in the CISA Known Exploited Vulnerabilities catalog. However, two caveats from the field: (1) Google's bug-detail restriction means we cannot yet assess how easily these bugs can be weaponized, and (2) Chrome zero-days historically move from patch-diffing to working exploit in days to weeks. A Critical UAF with public patch binaries available for differential analysis is a live target for exploit developers right now. Treat unexploited as not yet exploited.

Related Supply-Chain Note

Chromium underpins Microsoft Edge, Brave, Opera, Vivaldi, Arc, and numerous embedded frameworks (CEF, Electron). Electron-based applications bundling older Chromium are a persistent blind spot — they do not auto-update with Chrome. Inventory Electron apps in your environment (Teams, Slack, VS Code, Discord and their ilk) and track vendor updates separately.

Detection & Response

Memory-corruption bugs in the renderer don't leave clean static indicators, but exploitation attempts and post-exploitation behavior do. The highest-fidelity detection strategy here is twofold: (1) flag outdated Chrome builds still running in your fleet, and (2) alert on renderer/sandbox process anomalies consistent with post-exploitation behavior — a compromised renderer that escapes the sandbox typically spawns unexpected child processes from the browser process tree.

Sigma Rules

YAML
---
title: Chrome Browser Process Spawning Script Interpreter or Shell
id: 8b1e4f92-3c7a-4d55-9e21-6f8a2b4c9d01
status: experimental
description: Detects chrome.exe spawning command shells, script interpreters, or LOLBins as child processes. A compromised or escaped Chrome renderer frequently hands off execution to cmd, powershell, wscript, or mshta for payload staging.
references:
  - http://chromereleases.googleblog.com/2026/11/stable-channel-update-for-desktop_01744469280.html
  - https://attack.mitre.org/techniques/T1203/
  - https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/11/17
tags:
  - attack.execution
  - attack.t1203
  - attack.t1059
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith: '\chrome.exe'
  selection_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\mshta.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\wmic.exe'
      - '\bitsadmin.exe'
      - '\certutil.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Rare enterprise browser extensions or SSO tooling invoking helper processes
  - Legitimate software updaters launched via browser
title_note: Tune against known-good extension behavior before broad deployment.
level: high
---
title: Outdated Chrome Version Executing on Endpoint
id: 2f6c9d18-7b4e-4a93-8c15-3d9e5f7a0b12
status: experimental
description: Detects execution of chrome.exe from a non-standard or user-writable path, which can indicate sideloaded or trojanized browser binaries used in post-exploitation. Combine with fleet version inventory for CVE-2026-126885/CVE-2026-126895 exposure tracking.
references:
  - http://chromereleases.googleblog.com/2026/11/stable-channel-update-for-desktop_01744469280.html
  - https://attack.mitre.org/techniques/T1218/
author: Security Arsenal
date: 2026/11/17
tags:
  - attack.defense_evasion
  - attack.t1218
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Image|endswith: '\chrome.exe'
  filter_standard_paths:
    Image|startswith:
      - 'C:\Program Files\Google\Chrome\Application\'
      - 'C:\Program Files (x86)\Google\Chrome\Application\'
  condition: selection and not filter_standard_paths
falsepositives:
  - Portable Chrome installations (rare in managed environments)
  - Developer or test builds in AppData
level: medium

KQL — Microsoft Sentinel / Defender Hunting

The first query inventories Chrome versions across the fleet to identify endpoints still exposed to CVE-2026-126885 and CVE-2026-126895. The second hunts for the post-exploitation behavior — shells or script interpreters spawned under the Chrome process tree.

KQL — Microsoft Sentinel / Defender
// Hunt 1: Fleet-wide Chrome version inventory — flag endpoints below 157.0.8103.78
DeviceFileEvents
| where TimeGenerated > ago(7d)
| where FileName =~ "chrome.exe"
| where FolderPath has "Google\\Chrome\\Application"
| summarize arg_max(TimeGenerated, *) by DeviceName, FolderPath
| extend VersionString = extract(@"Application\\(\d+\.\d+\.\d+\.\d+)", 1, FolderPath)
| extend VersionParts = split(VersionString, ".")
| extend Major = toint(VersionParts[0]), Minor = toint(VersionParts[1]), Build = toint(VersionParts[2]), Patch = toint(VersionParts[3])
| extend IsVulnerable = (Major < 157) or (Major == 157 and Build < 8103) or (Major == 157 and Build == 8103 and Patch < 78)
| where IsVulnerable == true
| project DeviceName, VersionString, TimeGenerated
| sort by DeviceName asc

// Hunt 2: Chrome spawning script interpreters or shells (post-exploitation behavior)
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName =~ "chrome.exe"
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe", "regsvr32.exe", "wmic.exe", "bitsadmin.exe", "certutil.exe")
| project TimeGenerated, DeviceName, InitiatingProcessCommandLine, FileName, ProcessCommandLine, AccountName, InitiatingProcessId
| sort by TimeGenerated desc

// Hunt 3: Chrome child processes establishing outbound network connections (renderer escape beaconing)
DeviceNetworkEvents
| where TimeGenerated > ago(3d)
| where InitiatingProcessFileName in~ ("cmd.exe", "powershell.exe", "rundll32.exe", "regsvr32.exe")
| join kind=inner (
    DeviceProcessEvents
    | where TimeGenerated > ago(3d)
    | where InitiatingProcessFileName =~ "chrome.exe"
    | project DeviceName, ProcessId, ProcessCreationTime=TimeGenerated
) on DeviceName
| project TimeGenerated, DeviceName, InitiatingProcessFileName, RemoteIP, RemoteUrl, RemotePort
| where RemotePort !in (80, 443) or RemoteUrl !has_any ("google.com", "gstatic.com", "googleapis.com")

Velociraptor VQL

Use this artifact to sweep endpoints for installed Chrome versions and anomalous Chrome process ancestry — useful for validating patch deployment across unmanaged or loosely managed assets where your EDR inventory has gaps.

VQL — Velociraptor
-- Hunt: Chrome version inventory and suspicious process ancestry
-- Validates CVE-2026-126885 / CVE-2026-126895 exposure across the fleet

-- Part 1: Enumerate Chrome install directories and versions
SELECT FullPath AS ChromeBinary,
       basename(path=dirname(path=FullPath)) AS InstallDir,
       Mtime AS BinaryModified
FROM glob(globs='C:/Program Files*/Google/Chrome/Application/*/chrome.exe')

-- Part 2: Running Chrome processes with parent process detail
SELECT Pid,
       Ppid,
       Name,
       Exe,
       CommandLine,
       Username,
       CreateTime
FROM pslist()
WHERE Name =~ '(?i)chrome\.exe'
   OR Exe =~ '(?i)chrome\.exe'

-- Part 3: Shell or script interpreter processes parented to Chrome (post-exploitation indicator)
SELECT child.Pid AS ChildPid,
       child.Name AS ChildName,
       child.CommandLine AS ChildCommandLine,
       child.Username AS RunAs,
       parent.Name AS ParentName,
       parent.Exe AS ParentExe
FROM pslist() AS child
JOIN pslist() AS parent ON child.Ppid = parent.Pid
WHERE parent.Name =~ '(?i)chrome\.exe'
  AND child.Name =~ '(?i)(cmd|powershell|pwsh|wscript|cscript|mshta|rundll32|regsvr32|wmic|bitsadmin|certutil)\.exe'

Patch Verification and Enforcement Script

For Windows fleets, this PowerShell script checks installed Chrome versions, flags builds below the fixed version, and optionally forces the update channel to re-check. Run it via your RMM, Intune, or as a GPO startup script.

PowerShell
# Chrome CVE-2026-126885 / CVE-2026-126895 exposure check and remediation
# Flags any Chrome install below 157.0.8103.78

$FixedVersion = [version]"157.0.8103.78"
$chromePaths = @(
    "${env:ProgramFiles}\Google\Chrome\Application\chrome.exe",
    "${env:ProgramFiles(x86)}\Google\Chrome\Application\chrome.exe",
    "${env:LOCALAPPDATA}\Google\Chrome\Application\chrome.exe"
)

$found = $false
foreach ($path in $chromePaths) {
    if (Test-Path $path) {
        $found = $true
        $installed = [version](Get-Item $path).VersionInfo.ProductVersion
        if ($installed -lt $FixedVersion) {
            Write-Warning "VULNERABLE: Chrome $installed at $path (below $FixedVersion)"
            # Force update channel re-check via Google Update
            $updateExe = "${env:ProgramFiles(x86)}\Google\Update\GoogleUpdate.exe"
            if (Test-Path $updateExe) {
                Start-Process $updateExe -ArgumentList "/ua /installsource scheduler" -WindowStyle Hidden
                Write-Host "Triggered Google Update re-check."
            }
        } else {
            Write-Host "OK: Chrome $installed at $path is patched."
        }
    }
}

# Enumerate versioned Application subdirectories (multi-install edge cases)
Get-ChildItem "${env:ProgramFiles}\Google\Chrome\Application" -Directory -ErrorAction SilentlyContinue |
    Where-Object { $_.Name -match '^\d+\.\d+\.\d+\.\d+$' } |
    ForEach-Object {
        $v = [version]$_.Name
        if ($v -lt $FixedVersion) {
            Write-Warning "STALE BUILD DIRECTORY: $($_.FullName) — consider cleanup after update."
        }
    }

if (-not $found) { Write-Host "Chrome not found on this host." }

# Exit code for RMM alerting: 1 = vulnerable found

For Linux endpoints managed via package managers:

Bash / Shell
#!/bin/bash
# Chrome version verification for CVE-2026-126885 / CVE-2026-126895
FIXED_MAJOR=157
FIXED_BUILD=8103
FIXED_PATCH=78

INSTALLED=$(google-chrome --version 2>/dev/null | grep -oP '\d+\.\d+\.\d+\.\d+')
if [ -z "$INSTALLED" ]; then
  echo "Chrome not installed."; exit 0
fi

IFS='.' read -r MAJ MIN BLD PAT <<< "$INSTALLED"
if [ "$MAJ" -lt "$FIXED_MAJOR" ] || { [ "$MAJ" -eq "$FIXED_MAJOR" ] && [ "$BLD" -lt "$FIXED_BUILD" ]; } || { [ "$MAJ" -eq "$FIXED_MAJOR" ] && [ "$BLD" -eq "$FIXED_BUILD" ] && [ "$PAT" -lt "$FIXED_PATCH" ]; }; then
  echo "VULNERABLE: Chrome $INSTALLED < ${FIXED_MAJOR}.x.${FIXED_BUILD}.${FIXED_PATCH}"
  # Debian/Ubuntu:
  apt-get update && apt-get install -y --only-upgrade google-chrome-stable
  # RHEL/Fedora: dnf upgrade -y google-chrome-stable
  exit 1
else
  echo "OK: Chrome $INSTALLED is patched."
  exit 0
fi

Remediation

  1. Deploy Chrome 157.0.8103.78/.79 (Windows/Mac) and 157.0.8103.78 (Linux) immediately. Do not wait for your normal patch ring cadence on a Critical-rated browser UAF batch. Use your RMM, Intune, JAMF, or package manager to force the update rather than relying on Chrome's staged rollout.
  2. Enforce browser restart. Chrome updates do not take effect until the browser relaunches. Track and enforce restarts — a patched binary on disk with an unpatched process in memory is still vulnerable. Consider GPO/MDM policies that prompt or force relaunch within a defined window.
  3. Verify, don't assume. Run the version-inventory KQL query or PowerShell script above against 100% of endpoints. Pay special attention to: remote workers off-VPN, kiosks, lab machines, and systems with Chrome auto-update disabled by policy.
  4. Address downstream Chromium consumers. Track Edge, Brave, Opera, Vivaldi updates as they ingest this Chromium release. Inventory Electron-based applications and pressure vendors on update timelines for any bundling Chromium < 157.0.8103.78.
  5. Deploy the detections. Enable the Sigma rules for Chrome-spawned shells now — these catch post-exploitation behavior regardless of whether CVE-2026-126885/CVE-2026-126895 or a future browser bug is the initial vector.
  6. Harden the browser attack surface. Where operationally feasible, enable Chrome's site isolation (on by default — verify it hasn't been disabled by policy), consider network-level filtering of newly registered domains, and review extension allowlists, since malicious extensions remain a parallel browser-compromise vector.
  7. Monitor for follow-on disclosure. When Google lifts the bug-detail restrictions on these CVEs, review the technical write-ups and reassess detection content. Watch the CISA KEV catalog — if either CVE is added, federal remediation deadlines will apply and your patching SLA should compress accordingly.

Official vendor advisory: Chrome Releases Blog — Stable Channel Update for Desktop

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.