Google shipped an emergency Chrome stable channel update on Thursday addressing 12 vulnerabilities — and one of them, CVE-2026-85046, is already being exploited in the wild. The flaw is a high-severity type confusion bug in V8, Chrome's JavaScript and WebAssembly engine, carrying a CVSS score of 8.8. It was fixed in Chrome version 152.0.7977.82.
If your organization runs Chrome — and statistically, it does — treat this as an emergency patch event. V8 type confusion vulnerabilities are the single most reliably weaponized class of Chrome bugs. They are the workhorse of commercial spyware vendors, APT groups, and exploit-kit operators because they convert directly into renderer-process remote code execution simply by getting a victim to load a malicious page. No user interaction beyond visiting a URL. No macros, no attachments, no prompts.
This post breaks down the vulnerability from a defender's perspective, gives you hunt logic for post-exploitation behavior, and provides the remediation path.
Technical Analysis
The Vulnerability
CVE-2026-85046 is a type confusion vulnerability in V8, the JavaScript and WebAssembly engine shared by Chrome and every Chromium-based browser (Edge, Brave, Opera, Vivaldi). Per Google's advisory, the bug "allowed a remote attacker to potentially exploit heap corruption via a crafted HTML page" in Chrome versions prior to 152.0.7977.82.
Type confusion occurs when the JIT (Just-In-Time) compiler in V8 makes incorrect assumptions about an object's type during optimization passes. V8's TurboFan compiler speculatively optimizes JavaScript based on observed object shapes ("maps"). When attacker-controlled JavaScript can trick the optimizer into treating one object type as another — for example, treating a double array as an object pointer array — the result is memory read/write primitives that attackers bootstrap into full arbitrary code execution within the renderer process.
The classic exploitation chain for a V8 type confusion looks like this:
- Delivery: Victim visits a malicious or compromised webpage (watering hole, malvertising, phishing link).
- Trigger: Crafted JavaScript forces TurboFan to optimize a function, then mutates an object's type mid-optimization, causing type confusion.
- Primitive building: Attacker gains relative/absolute read-write in the V8 heap, leaks object addresses, defeats ASLR.
- Renderer RCE: Code execution inside the sandboxed Chrome renderer process.
- Sandbox escape (if chained): A second vulnerability escapes the Chrome sandbox for full host compromise. Historically, in-the-wild V8 exploits are frequently chained with a sandbox escape or a kernel/driver flaw.
Affected Products and Versions
| Product | Affected | Fixed Version |
|---|---|---|
| Google Chrome (Windows/Mac/Linux) | < 152.0.7977.82 | 152.0.7977.82 |
| Microsoft Edge (Chromium) | Builds prior to the corresponding Chromium 152.0.7977.82 ingest | Watch Microsoft Security Update Guide |
| Other Chromium-based browsers (Brave, Opera, Vivaldi) | Prior to Chromium 152.0.7977.82 merge | Per-vendor advisories |
Note that V8 is also embedded in other software (notably Node.js and Electron applications). Watch for downstream advisories — Electron-based apps that allow loading remote content inherit this risk until they ship an updated Chromium.
Exploitation Status
- Confirmed in-the-wild exploitation: Yes. Google's advisory explicitly states an exploit for CVE-2026-85046 exists in the wild.
- Public PoC: Not publicly released as of this writing, but with active exploitation confirmed, working exploit code exists in adversary hands.
- CISA KEV: Monitor the CISA Known Exploited Vulnerabilities catalog — actively exploited Chrome V8 flaws are routinely added within days, which triggers a BOD 22-01 remediation deadline (typically 3 weeks) for federal civilian agencies. Private-sector organizations should hold themselves to the same clock.
Given active exploitation, assume exploitation attempts are already broad — commercial surveillance vendors and exploit brokers move V8 bugs into their toolchains within days of a patch dropping, because the patch itself reveals the bug class and code region.
Detection & Response
You will not reliably signature the initial JavaScript exploit at the endpoint — it executes inside the renderer's memory and leaves few artifacts. Where defenders win is post-exploitation: a compromised renderer that escapes the sandbox, or a drive-by that drops and executes a payload, produces highly anomalous process lineage. Chrome's renderer should essentially never spawn cmd.exe, powershell.exe, or script interpreters.
Sigma Rules
---
title: Chrome Renderer Spawning Shell or Script Interpreter
tid: 4f8c2a11-9b3d-4e5f-a6c7-8d9e0f1a2b3c
status: experimental
description: Detects Chrome browser processes spawning command shells, script interpreters, or LOLBins — a strong indicator of browser exploit post-exploitation activity such as that following V8 type confusion exploitation (CVE-2026-85046).
references:
- https://thehackernews.com/2026/09/google-releases-chrome-update-to-patch.html
- https://attack.mitre.org/techniques/T1203/
author: Security Arsenal
date: 2026/09/18
tags:
- attack.execution
- attack.t1203
- attack.t1059
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\brave.exe'
- '\opera.exe'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
- '\regsvr32.exe'
- '\wmic.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
condition: selection_parent and selection_child
falsepositives:
- Rare enterprise browser extensions or internal tooling that legitimately invoke shells from browser context
level: high
---
title: Suspicious Payload Dropped by Browser Process
tid: 8c1d3e55-2a4b-4c6d-9e7f-0a1b2c3d4e5f
status: experimental
description: Detects browser processes writing executable files or scripts to user-writable directories — consistent with a browser drive-by exploit staging a payload after V8 renderer compromise.
references:
- https://thehackernews.com/2026/09/google-releases-chrome-update-to-patch.html
- https://attack.mitre.org/techniques/T1204.002/
author: Security Arsenal
date: 2026/09/18
tags:
- attack.initial_access
- attack.t1204.002
logsource:
category: file_event
product: windows
detection:
selection_image:
Image|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\brave.exe'
selection_ext:
TargetFilename|endswith:
- '.exe'
- '.dll'
- '.scr'
- '.bat'
- '.cmd'
- '.ps1'
- '.vbs'
- '.js'
- '.hta'
selection_path:
TargetFilename|contains:
- '\AppData\Local\Temp\'
- '\AppData\Roaming\'
- '\Users\Public\'
- '\ProgramData\'
condition: selection_image and selection_ext and selection_path
falsepositives:
- Legitimate browser downloads (correlate with browser download history and user confirmation)
- Software update mechanisms writing to ProgramData
level: medium
---
title: Chrome Child Process Making Outbound Network Connection to Rare Destination
tid: 2b6f9d33-7c1e-4a2b-b8d4-5e6f7a8b9c0d
status: experimental
description: Detects shell or script interpreter processes spawned by Chrome making outbound network connections — indicative of C2 callback following successful browser exploitation.
references:
- https://thehackernews.com/2026/09/google-releases-chrome-update-to-patch.html
- https://attack.mitre.org/techniques/T1071.001/
author: Security Arsenal
date: 2026/09/18
tags:
- attack.command_and_control
- attack.t1071.001
logsource:
category: network_connection
product: windows
detection:
selection:
Image|endswith:
- '\powershell.exe'
- '\cmd.exe'
- '\mshta.exe'
- '\rundll32.exe'
Initiated: 'true'
filter_ports:
DestinationPort:
- 80
- 443
- 8080
- 8443
condition: selection and filter_ports
falsepositives:
- Administrative scripting with web requests
- Software update and telemetry traffic
level: medium
KQL — Microsoft Sentinel / Defender
This query hunts the core post-exploitation signal: shells, script interpreters, or LOLBins spawned under any Chromium browser process. It is tuned for Defender for Endpoint (DeviceProcessEvents) and includes parent-process depth to catch payloads launched one level down from the browser.
let BrowserProcesses = dynamic(["chrome.exe", "msedge.exe", "brave.exe", "opera.exe", "vivaldi.exe"]);
let SuspiciousChildren = dynamic(["cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe", "regsvr32.exe", "wmic.exe", "certutil.exe", "bitsadmin.exe", "schtasks.exe", "regsvcs.exe", "msbuild.exe"]);
DeviceProcessEvents
| where TimeGenerated > ago(14d)
| where InitiatingProcessFileName in~ (BrowserProcesses)
or InitiatingProcessParentFileName in~ (BrowserProcesses)
| where FileName in~ (SuspiciousChildren)
| extend ParentChain = strcat(InitiatingProcessParentFileName, " -> ", InitiatingProcessFileName, " -> ", FileName)
| summarize FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), Instances = count()
by DeviceName, AccountName, ParentChain, ProcessCommandLine, SHA256, FolderPath
| order by FirstSeen desc
A companion query for payload staging — browser processes writing executables or scripts outside known download/update paths:
let BrowserProcesses = dynamic(["chrome.exe", "msedge.exe", "brave.exe", "opera.exe"]);
let SuspiciousExtensions = dynamic([".exe", ".dll", ".scr", ".ps1", ".bat", ".cmd", ".vbs", ".js", ".hta", ".msi"]);
DeviceFileEvents
| where TimeGenerated > ago(14d)
| where InitiatingProcessFileName in~ (BrowserProcesses)
| where FolderPath has_any ("\\AppData\\Local\\Temp", "\\AppData\\Roaming", "\\Users\\Public", "\\ProgramData")
| extend Ext = tolower(extract(@"\.([a-z0-9]+)$", 1, FileName))
| where Ext in~ (SuspiciousExtensions)
| where FolderPath !has "\\Downloads\\"
| summarize FirstSeen = min(TimeGenerated), Instances = count()
by DeviceName, InitiatingProcessFileName, FolderPath, FileName, SHA256
| order by FirstSeen desc
Also sweep your fleet for vulnerable Chrome versions to drive the patch effort — treat any endpoint still below 152.0.7977.82 as an incident priority:
DeviceTvmSoftwareInventory
| where SoftwareName has "Google Chrome"
| extend Vulnerable = parse_version(SoftwareVersion) < parse_version("152.0.7977.82")
| where Vulnerable
| summarize DeviceCount = dcount(DeviceId), Devices = make_set(DeviceName, 20) by SoftwareVersion
| order by DeviceCount desc
Velociraptor VQL
For live-response triage on endpoints where browser exploitation is suspected, this artifact enumerates browser-spawned child processes with anomalous lineage, plus recently written executables in user-writable staging directories.
-- Hunt for anomalous child processes spawned by Chromium browsers (post-exploitation indicator)
LET browsers = ('chrome.exe', 'msedge.exe', 'brave.exe', 'opera.exe', 'vivaldi.exe')
LET suspicious = ('cmd.exe', 'powershell.exe', 'pwsh.exe', 'wscript.exe', 'cscript.exe', 'mshta.exe', 'rundll32.exe', 'regsvr32.exe', 'wmic.exe', 'certutil.exe')
SELECT Pid, Ppid, Name, Exe, CommandLine, Username, CreateTime
FROM pslist()
WHERE Name =~ '(?i)(' + join(sep='|', array=suspicious) + ')$'
AND Ppid IN (
SELECT Pid FROM pslist()
WHERE Name =~ '(?i)(' + join(sep='|', array=browsers) + ')$'
)
-- Hunt for recently dropped executables/scripts in browser staging directories
SELECT FullPath, Size, Mtime, Btime
FROM glob(globs=[
'C:/Users/*/AppData/Local/Temp/*.exe',
'C:/Users/*/AppData/Local/Temp/*.dll',
'C:/Users/*/AppData/Roaming/**/*.exe',
'C:/Users/Public/*.exe',
'C:/ProgramData/**/*.exe'
])
WHERE Mtime > now() - 86400 * 3
ORDER BY Mtime DESC
Remediation Script — Verify Chrome Version Across Windows Endpoints
Use this PowerShell to audit Chrome installation versions on a host (or push via your RMM/Intune across the fleet). It flags anything below the fixed build and optionally forces an update check.
# CVE-2026-85046 - Chrome version audit and update enforcement
$FixedVersion = [version]"152.0.7977.82"
$chromePaths = @(
"${env:ProgramFiles}\Google\Chrome\Application\chrome.exe",
"${env:ProgramFiles(x86)}\Google\Chrome\Application\chrome.exe",
"${env:LOCALAPPDATA}\Google\Chrome\Application\chrome.exe"
) | Where-Object { Test-Path $_ }
if (-not $chromePaths) {
Write-Output "[INFO] Chrome not installed on this host."
exit 0
}
foreach ($path in $chromePaths) {
$installed = [version](Get-Item $path).VersionInfo.ProductVersion
if ($installed -lt $FixedVersion) {
Write-Output "[VULNERABLE] $path version $installed < $FixedVersion (CVE-2026-85046)"
# Trigger Chrome's update task to accelerate patching
$task = Get-ScheduledTask -TaskName "GoogleUpdateTaskMachine*" -ErrorAction SilentlyContinue
if ($task) { $task | Start-ScheduledTask; Write-Output "[ACTION] Google Update task triggered." }
} else {
Write-Output "[PATCHED] $path version $installed"
}
}
# Force Edge check as well (Chromium sibling)
$edgePath = "${env:ProgramFiles(x86)}\Microsoft\Edge\Application\msedge.exe"
if (Test-Path $edgePath) {
$edgeVer = [version](Get-Item $edgePath).VersionInfo.ProductVersion
Write-Output "[INFO] Microsoft Edge version: $edgeVer - verify against MS advisory for Chromium 152.0.7977.82 ingest."
}
Remediation
-
Patch Chrome to 152.0.7977.82 or later immediately. Chrome auto-updates, but auto-update only applies on browser restart — and users keep browsers open for weeks. Enforce restart via your endpoint management tooling (Intune, GPO
RelaunchNotification, Jamf for macOS, or your RMM). Do not wait for the standard patch cycle; this is actively exploited. -
Patch the Chromium ecosystem. Microsoft Edge, Brave, Opera, and Vivaldi all inherit V8. Track each vendor's advisory for their Chromium 152.0.7977.82 merge. Do not assume Edge is covered because Chrome is.
-
Audit Electron and Node.js exposure. Inventory internally deployed Electron apps (Slack, Teams, Discord-class clients) that render remote content, and track their Chromium bump. V8 in Node.js is not directly exploitable via HTML pages, but server-side rendering of untrusted content warrants review once the Node.js security release lands.
-
Monitor CISA KEV. If CVE-2026-85046 is cataloged, federal agencies face a binding remediation deadline; use it as your internal SLA justification regardless of sector.
-
Enable Chrome's enhanced protections as a compensating control until patching is verified fleet-wide:
- Enforce Site Isolation (on by default — verify it hasn't been disabled via policy).
- Enable Safe Browsing Enhanced Protection via policy (
SafeBrowsingProtectionLevel = 2) for improved malicious-page blocking. - Consider temporarily restricting browsing on high-value assets (executive workstations, jump boxes, admin tiers) to patched browsers only.
-
Hunt before you assume clean. Run the KQL queries above across the last 14+ days, not just forward-looking. If the exploit was live before you patched, the renderer compromise may have already happened. Any hit on browser-spawned shell processes warrants full host triage — memory acquisition, browser cache forensic review, and credential exposure assessment.
-
Verify patch compliance, don't trust deployment reports. Configuration management tools report "update pushed," not "browser restarted." Use the version-audit script (or
DeviceTvmSoftwareInventory) to confirm the running binary version on every endpoint.
Analyst Notes
V8 type confusion bugs remain the highest-frequency path to browser zero-day exploitation precisely because JIT optimization logic is enormously complex and the attack surface is exposed to every webpage. The defensive reality: you cannot prevent the trigger with signatures, so your control stack is (a) patch velocity measured in hours not weeks, (b) exploit-mitigation posture (site isolation, sandbox integrity), and (c) behavioral detection on post-exploitation lineage. If your patch SLA for actively exploited browser CVEs is longer than 72 hours, that gap is your actual exposure window — and adversaries know it.
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.