Executive Summary
CVE-2026-5281 is a use-after-free vulnerability in Dawn, Google Chrome's cross-platform WebGPU implementation, that has been confirmed exploited in the wild and added to CISA's Known Exploited Vulnerabilities (KEV) catalog. Rated CVSS 8.8 (High), a remote attacker can craft a malicious webpage that causes a victim's browser to execute arbitrary code simply by visiting the page. Google issued an emergency patch on April 1, 2026, updating Chrome to version 146.0.7680.177/178 — organizations that have not yet updated are exposed to active threat actor campaigns.
1. What Is This Vulnerability?
A use-after-free (UAF) vulnerability occurs when a program continues to use a pointer to memory that has already been freed (deallocated). In the case of CVE-2026-5281, the flaw resides in Dawn — the open-source, cross-platform C++ library that powers Chrome's implementation of the WebGPU graphics API.
The Technical Root Cause
Dawn maintains an internal sequential command queue to organize GPU command buffers submitted by JavaScript before they are dispatched to the underlying hardware API (Vulkan, Metal, DirectX). When a script calls gpuDevice.queue.submit(), Dawn allocates memory regions to track the asynchronous execution state of each submitted task.
The flaw arises from a race condition in Dawn's queue management system: under specific multi-threaded timing conditions, a GPU command buffer's backing memory can be freed (released) while a separate internal Dawn bookkeeping thread still holds and dereferences a raw pointer to that same memory region. This stale pointer access constitutes the use-after-free condition.
The resulting dangling pointer can be manipulated by a carefully constructed sequence of WebGPU API calls to:
- Control the freed memory region's contents (heap spray / type confusion)
- Redirect program execution to attacker-controlled code
Because WebGPU is a first-class JavaScript API accessible from any webpage, the entire attack surface is reachable through the browser's renderer process — no plugins, no downloads, no elevated permissions required.
Attack Vector
Victim visits attacker-controlled page
└─> Page loads malicious JavaScript
└─> JS crafts a sequence of gpuDevice.queue operations
└─> Race condition triggers use-after-free in Dawn
└─> Heap spray overwrites freed memory
└─> Arbitrary code execution in renderer process
└─> Sandbox escape (chained with separate exploit)
└─> Full system compromise
The exploit requires user interaction only insofar as visiting a webpage — no clicks, no downloads, no JavaScript consent dialogs. Drive-by attacks via malvertising or compromised legitimate sites are viable.
Real-World Impact
Google confirmed that "an exploit for CVE-2026-5281 exists in the wild" at the time of disclosure on April 1, 2026. CISA added the CVE to its KEV catalog the same day, citing evidence of active exploitation by threat actors targeting federal networks. Attribution has not been publicly confirmed, though the exploitation pattern (drive-by delivery, no user interaction) is consistent with sophisticated nation-state and financially motivated actors who have targeted browser zero-days throughout 2026.
This is the fourth Chrome zero-day exploited in the wild in 2026, following:
| CVE | Component | Type | Patched |
|---|---|---|---|
| CVE-2026-2441 | CSSFontFeatureValuesMap | Iterator Invalidation | Feb 2026 |
| CVE-2026-3909 | Skia | Out-of-Bounds Write | Apr 2026 |
| CVE-2026-3910 | V8 JavaScript Engine | Inappropriate Implementation | Apr 2026 |
| CVE-2026-5281 | Dawn (WebGPU) | Use-After-Free | Apr 1, 2026 |
2. Who Is Affected?
Directly Affected Browsers
| Browser | Vulnerable Version | Patched Version |
|---|---|---|
| Google Chrome (Windows/macOS) | < 146.0.7680.177 | 146.0.7680.177 / 146.0.7680.178 |
| Google Chrome (Linux) | < 146.0.7680.177 | 146.0.7680.177 |
| Microsoft Edge (Chromium-based) | Corresponding Chromium builds | Patch released by Microsoft |
| Brave Browser | Chromium builds using affected Dawn | Update to latest stable |
| Opera | Chromium builds using affected Dawn | Update to latest stable |
| Any Chromium-based browser | Builds shipping the affected Dawn version | Varies by vendor |
Who Is NOT Affected
- Mozilla Firefox — uses its own WebGPU implementation (wgpu), not Dawn
- Apple Safari — uses WebKit's own WebGPU backend
- Users with WebGPU disabled (niche enterprise hardening configurations)
Risk Factors That Amplify Exposure
- Systems where Chrome auto-update has been disabled by policy (common in locked-down enterprise environments that ironically delay patch application)
- Users on Extended Stable channel who receive patches on a 4-week delay
- Kiosk and embedded deployments using Chrome in locked versions
- Organizations allowing Shadow IT browser use where patch status is unmonitored
3. How to Detect It (Testing)
Manual Testing Steps
Step 1: Check your current Chrome version
- Open Chrome → Navigate to
chrome://settings/help - Note the displayed version number
- If the version is below 146.0.7680.177, the browser is vulnerable
Step 2: Check fleet-wide browser versions
- On Windows (via PowerShell, run on endpoint or via GPO/RMM):
(Get-Item "C:\Program Files\Google\Chrome\Application\chrome.exe").VersionInfo.FileVersion - On macOS (Terminal):
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version - On Linux:
google-chrome --version # or chromium-browser --version
Step 3: Verify WebGPU is enabled (determines exploitability)
- Navigate to
chrome://flags/#enable-unsafe-webgpu - If WebGPU is enabled (default in modern Chrome), the attack surface is active
Step 4: Check for Indicators of Compromise
- Review endpoint security logs for unusual child processes spawned by
chrome.exeorchrome(unexpectedcmd.exe,powershell.exe,bash, or network tools as Chrome subprocesses) - Review DNS query logs for connections from Chrome to unexpected external hosts
Automated Scanning
Tool: Tenable Nessus / Tenable.io
- Plugin ID for CVE-2026-5281 is available in the April 2026 plugin feed
- Command:
nessus -q -x -T html -c /your/policy.nessus -o output.html target_ip - Expected output: Flags Chrome installations below the patched version
Tool: Qualys Browser Security Module
- Query:
CVE:CVE-2026-5281in the vulnerability management dashboard - Will enumerate all detected Chrome/Chromium installs and flag vulnerable versions
Tool: osquery (endpoint fleet detection)
SELECT name, version, install_location
FROM programs
WHERE name LIKE '%Chrome%'
AND version < '146.0.7680.177';
Run via osqueryi or fleet management (Fleet, Kolide):
osqueryi "SELECT name, version FROM programs WHERE name LIKE '%Chrome%';"
Tool: Snyk / GitHub Dependabot (for apps embedding CEF/Electron)
- If your application bundles Chromium via Electron or CEF, run:
snyk test --all-projects - Look for Chromium version references below the patched build
Code Review Checklist (for applications embedding Chromium)
- Confirm Electron framework version ships Chromium ≥ 146.0.7680.177
- Verify
package.json/electron-builderconfig pins to a non-vulnerable Electron release - Check CEF (Chromium Embedded Framework) version if used in a native app
- Audit any
webgpuAPI calls in embedded browser contexts for unusual queue submission patterns - Review
Content-Security-Policyheaders to limit WebGPU context creation where not needed
4. How to Fix It (Mitigation)
Step-by-Step Remediation
For End Users:
- Open Chrome and navigate to
chrome://settings/help - Chrome will automatically check for updates — allow it to download version 146.0.7680.177 or later
- Click "Relaunch" to apply the update (all tabs will be restored)
- Confirm the version displayed is 146.0.7680.177 or higher
For Enterprise / IT Administrators:
-
Push the update via your software management platform (SCCM, Intune, Jamf, Ansible, etc.)
- Download the enterprise MSI/PKG from the Chrome Enterprise download page
- Target: all endpoints regardless of department criticality
- Priority: P1 — complete within 24–48 hours given active exploitation
-
Verify deployment success — run fleet query to confirm no endpoints remain on vulnerable versions (use osquery above, or your UEM/EDR dashboard)
-
Force update via Group Policy (Windows):
Computer Configuration > Administrative Templates > Google > Google Update > Applications > Google Chrome > Update policy override → "Always allow updates"Additionally:
Computer Configuration > Administrative Templates > Google > Google Update > Applications > Google Chrome > Target version prefix override → "146." -
Update other Chromium-based browsers — Microsoft Edge receives Chromium patches with a slight delay; check the Microsoft Edge Security Updates page and deploy the latest Edge build. Repeat for Brave, Opera, etc., per their respective update mechanisms.
-
Communicate to users — notify employees to restart Chrome if the update notification badge appears, emphasizing urgency given active exploitation
Code Fix Example (for apps embedding Chromium via Electron)
Before (vulnerable):
// package.json — pinned to a vulnerable Electron version
{
"dependencies": {
"electron": "^34.0.0"
}
}
After (patched):
// Update to the Electron release that bundles Chromium 146.0.7680.177+
{
"dependencies": {
"electron": "^34.5.0"
}
}
Then:
npm update electron
npm audit
Confirm the bundled Chromium version:
node -e "const { app } = require('electron'); console.log(process.versions.chrome);"
Configuration Hardening (Short-Term Mitigations)
If immediate patching is not possible (e.g., validated rollout process, change freeze):
-
Disable WebGPU via Chrome Enterprise Policy:
// chrome_policy.json (deploy via GPO or MDM) { "WebGPUEnabled": false }This disables the Dawn component and removes the attack surface, at the cost of WebGPU-dependent features (3D web apps, certain AI inference in browser).
-
Block access to unknown/untrusted web resources via proxy/firewall filtering — reduce drive-by exposure by enforcing web category filtering
-
Enable Chrome Enhanced Safe Browsing via policy:
{ "SafeBrowsingProtectionLevel": 2 } -
Deploy browser isolation (if available in your security stack) — zero-trust browser isolation products (Zscaler ZIA, Menlo Security, Prisma Access Browser) can neutralize renderer-process exploits by rendering web content in a remote container
5. How to Test the Fix (Validation)
Regression Test Scenarios
- Scenario A: Confirm Chrome reports version 146.0.7680.177 or higher at
chrome://settings/helpon all patched endpoints - Scenario B: Confirm that running the Nessus / Qualys scan post-patch returns zero findings for CVE-2026-5281 on patched hosts
- Scenario C: Confirm that normal WebGPU-dependent web applications (e.g., Google Maps 3D, WebGPU demos at webgpufundamentals.org) still function as expected post-patch — verifying no regression in normal GPU rendering
Security Test Cases
Test Case 1: Version Verification
- Precondition: Patch deployed to target endpoint
- Steps: Run
google-chrome --versionor navigate tochrome://settings/help - Expected Result: Version ≥ 146.0.7680.177 displayed; Nessus plugin for CVE-2026-5281 returns "Not Vulnerable"
Test Case 2: Exploit Proof-of-Concept Blocked
- Precondition: Patched Chrome installed; controlled test environment (never test PoC exploits on production systems)
- Steps: Load a known-safe WebGPU stress-test harness that exercises high-frequency
gpuDevice.queue.submit()concurrency patterns - Expected Result: No crashes, no unexpected child process spawning, no memory corruption signals in Chrome's built-in crash reporter
Test Case 3: WebGPU API Availability
- Precondition: Patched Chrome; WebGPU enabled
- Steps: Navigate to
chrome://gpuand verify WebGPU status; runnavigator.gpu.requestAdapter()in DevTools console - Expected Result:
navigator.gpuis notnull; adapter is returned successfully; rendering pipeline initializes without error
Automated Tests (CI/CD Integration)
For teams running Electron apps or web apps with WebGPU, integrate the following into your CI pipeline:
// security-audit.test.js — Jest/Playwright
const { chromium } = require('playwright');
test('Chrome version meets security baseline', async () => {
const browser = await chromium.launch();
const version = browser.version();
const [major, minor, build, patch] = version.split('.').map(Number);
// Patched version: 146.0.7680.177
expect(major).toBeGreaterThanOrEqual(146);
if (major === 146) {
expect(build).toBeGreaterThanOrEqual(7680);
if (build === 7680) {
expect(patch).toBeGreaterThanOrEqual(177);
}
}
await browser.close();
});
Run with: npx playwright install chromium && npx jest security-audit.test.js
6. Prevention & Hardening
Best Practices
-
Enable Chrome automatic updates fleet-wide — the single most impactful long-term control. Chrome zero-days in 2026 have averaged patch-to-exploitation windows measured in hours; manual update workflows are operationally insufficient. Use Google Chrome's enterprise update policies to enforce automatic updates.
-
Adopt a browser inventory and version SLA — maintain a continuously updated asset inventory of every browser installation, version, and device. Establish a policy that critical browser CVEs (CVSS ≥ 7.0, KEV-listed) must be patched within 24 hours of vendor release.
-
Apply the principle of least privilege for browser renderer processes — on Windows, configure Chrome's renderer process to run at a lower integrity level. On Linux, ensure Chrome runs with appropriate seccomp-bpf sandbox enabled (
--no-sandboxmust be prohibited in all deployment configs). -
Deploy browser-based attack surface reduction — where feasible, implement endpoint policies to block navigation to uncategorized or newly registered domains, which are frequently used for drive-by exploit delivery.
-
Monitor for lateral movement following browser compromise — a renderer-process exploit is often the first stage; lateral movement and persistence follow. Tune EDR rules to flag Chrome spawning unusual child processes (
cmd.exe,wscript.exe, network reconnaissance tools).
Monitoring & Detection
EDR / SIEM Detection Rules:
-
Unusual Chrome child processes (Windows):
Process: chrome.exe spawns → cmd.exe | powershell.exe | wscript.exe | mshta.exe | regsvr32.exe Alert: HIGH — possible renderer exploit followed by sandbox escape -
Network connections from Chrome renderer to non-web ports:
Source process: chrome.exe | chrome Destination port: NOT (80, 443, 8080, 8443) Alert: MEDIUM — unusual outbound from browser process -
WebGPU crash loops (Application Event Log / Chrome crash reporter):
Event: Chrome crash dump generated involving Dawn / gpu_process Frequency: > 3 times in 5 minutes Alert: MEDIUM — possible exploitation attempts triggering instability -
CISA KEV alert monitoring: Subscribe to CISA's KEV RSS feed and integrate into your vulnerability management platform to receive real-time alerts when exploited vulnerabilities are cataloged — enabling immediate triage without waiting for vendor notification.
Threat Intelligence Feeds: Integrate Mandiant, Recorded Future, or VirusTotal Intelligence feeds to receive automated alerts when new Chrome exploit samples are uploaded, allowing proactive detection before widespread exploitation.
References
- CVE Link: NVD — CVE-2026-5281
- Google Chrome Release Notes: Stable Channel Update for Desktop — April 1, 2026
- CISA KEV Entry: CISA Known Exploited Vulnerabilities Catalog
- BleepingComputer Coverage: Google fixes fourth Chrome zero-day exploited in attacks in 2026
- The Hacker News: New Chrome Zero-Day CVE-2026-5281 Under Active Exploitation — Patch Released
- SOCRadar Analysis: CVE-2026-5281: Chrome WebGPU Zero-Day Exploited In The Wild
- Help Net Security: Google fixes Chrome zero-day with in-the-wild exploit (CVE-2026-5281)
- The Cyber Throne: CVE-2026-5281 — Google Chrome Dawn Use-After-Free Under Active Exploitation
- CVE Reports: CVE-2026-5281 Detail
- Google Chrome Enterprise Help: Download Chrome for Enterprise