← Back to Feed CACHED · 2026-07-09 22:44:58 · CACHE_KEY CVE-2026-15112
CVE-2026-15112 · CWE-416 · Disclosed 2026-07-08

Use after free in Ozone in Google Chrome prior to 150

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A stale pointer in Chrome's display layer that a booby-trapped webpage can turn into code execution inside the renderer sandbox

Ozone is Chromium's abstraction layer for the underlying windowing/display system — X11, Wayland, Fuchsia, headless, etc. A use-after-free here means Chrome frees a graphics-related object but keeps using the dangling pointer, letting a crafted HTML page corrupt the heap in the renderer process. Affected: all Chrome/Chromium desktop channels prior to 150.0.7871.115; downstream Edge, Brave, Opera, Vivaldi, and Electron apps built on older Chromium ship the same defect until they rebase.

The vendor's HIGH (8.8) rating is *directionally correct but slightly inflated*. CVSS gives no credit for Chrome's site-isolation renderer sandbox, which is the wall between a renderer RCE and OS-level compromise. In practice, exploiting this bug alone gets an attacker code execution inside a sandboxed renderer — meaningful, but a sandbox escape (a separate bug) is required for full host compromise. Reassessed at 7.8: still HIGH, still worth the fast auto-update cycle, not a drop-everything CRITICAL unless chained.

"Classic Chrome renderer UAF — HIGH is fair. Push the auto-update, verify the fleet, move on."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Lure user to attacker-controlled page

Attacker hosts a malicious page or injects malicious content into an ad network, compromised site, or phishing link. The user must actively browse to it — the CVSS UI:R (user interaction required) reflects this. Weaponized delivery is typically via BeEF, malvertising kits, or watering-hole redirects.
Conditions required:
  • Attacker owns or compromises a reachable web resource
  • Victim uses vulnerable Chrome build
  • Victim clicks through or is redirected
Where this breaks in practice:
  • Enterprise web proxies + SWG (Zscaler, Netskope, Umbrella) block known malicious domains
  • Safe Browsing / SmartScreen catches known bad URLs pre-navigation
Detection/coverage: Proxy logs, DNS telemetry, EDR web-content inspection
STEP 02

Trigger the Ozone use-after-free

The crafted page uses JavaScript + DOM/graphics operations (canvas, WebGL, or window/display-surface manipulation) to force Chrome to free an Ozone-owned object while a reference is still held. Exploit primitives are typically built with a Chromium-fork test harness or v8-based heap-grooming techniques published by Chrome bug hunters.
Conditions required:
  • Victim page executes attacker JS
  • Renderer allocator state is groomed
Where this breaks in practice:
  • PartitionAlloc-Everywhere and MiraclePtr (raw_ptr<T>) increasingly neutralize UAFs in renderer allocations — many recent Chrome UAFs degrade to DoS rather than RCE
  • ASLR + control-flow integrity raise the exploit-dev cost
Detection/coverage: Renderer crashes surfaced via Chrome crash telemetry / EDR process-crash events
STEP 03

Heap corruption → renderer code execution

The freed-then-reused chunk is overlaid with attacker-controlled data, yielding an arbitrary read/write in the renderer process. From there the attacker builds a ROP/JOP chain and executes arbitrary code — but still confined to the renderer sandbox. Public tooling analog: weggli for UAF pattern discovery, domato for fuzz-derived PoCs.
Conditions required:
  • Successful trigger from step 2
  • MiraclePtr does not scoop this allocation type
Where this breaks in practice:
  • Chrome's V8 sandbox and renderer sandbox contain the payload
  • No public exploit is known for this specific CVE at time of assessment
Detection/coverage: EDR behavioral rules for anomalous chrome.exe child processes or unusual syscalls from renderer
STEP 04

Chain a sandbox escape (required for host impact)

Renderer RCE alone cannot touch the filesystem, credentials, or other tabs. The attacker must chain a second vulnerability — a Mojo IPC bug, a GPU-process flaw, or a kernel LPE — to break out. Historical chains use tools like exploit primitives from Project Zero writeups or full 1-day chains re-derived from patch diffs.
Conditions required:
  • A working sandbox-escape 0/1-day exists AND targets the same Chrome version window
Where this breaks in practice:
  • Sandbox-escape bugs are scarce and highly valuable; unlikely to burn one for opportunistic drive-by
  • Windows Hypervisor-Protected Code Integrity (HVCI) and MDAG raise the cost further
Detection/coverage: EDR: chrome.exe spawning cmd/powershell, unexpected token duplication, GPU-process anomalies
STEP 05

Persistence / lateral movement

Once outside the sandbox the attacker has the user's context — same story as any browser-delivered malware. Deploy stealer (Redline, Lumma), drop C2 (Cobalt Strike, Sliver, Mythic), pivot on cached SSO tokens.
Conditions required:
  • Sandbox escape achieved
  • No EDR blocks payload
Where this breaks in practice:
  • Modern EDR (CrowdStrike, SentinelOne, Defender for Endpoint) catches common post-exploit tooling
Detection/coverage: Standard EDR post-exploit telemetry
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNot KEV-listed. No public reports of active exploitation as of 2026-07-10. Chrome bulletin does not flag it as exploited-in-the-wild (contrast: bugs Google flags with 'exists in the wild' language).
Public PoCNone public at disclosure. Patch-diff reversing by researchers such as *man yue mo (GitHub Security Lab)* and *@_manfp* typically yields renderer-crash PoCs within 2–4 weeks of Chrome stable-channel drops.
EPSS0.00185 (~0.19%) — below the 50th percentile. Consistent with 'patched, not weaponized yet.'
KEVNot listed by CISA as of 2026-07-10.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H = 8.8. UI:R is the load-bearing constraint — no zero-click. S:U ignores the renderer sandbox, which is why the raw score overstates real host impact.
Affected versionsAll Chrome/Chromium < 150.0.7871.115 (Stable). Downstream: Edge, Brave, Opera, Vivaldi, Electron apps until rebased. ChromeOS via LTS channel.
Fixed versionChrome 150.0.7871.115 (Stable, 2026-07-08). Edge and other Chromium downstreams typically ship equivalents within 24–72h.
Exposure dataChrome installed base ≈ 65% of desktop browsers (StatCounter). Auto-update means well-managed fleets patch within 7 days; unmanaged / kiosk / air-gapped fleets lag indefinitely.
Disclosure2026-07-08 in the Chrome Stable Channel Update. Credit typically to external researcher via Chrome VRP; assume named credit in the bulletin.
Bug class trendOzone/graphics UAFs are a recurring Chrome bug class (see CVE-2024-4671, CVE-2023-3079, etc.). MiraclePtr rollout has reduced weaponization rate meaningfully but not to zero.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (7.8/10)

HIGH is retained because the affected component is the world's most widely deployed browser and a crafted webpage suffices to trigger the flaw — the exposure population is enormous. Downgraded only fractionally from 8.8 because renderer-sandbox containment blocks full host compromise without a chained escape, which is not publicly available today.

HIGH Vendor advisory and version data
HIGH No active exploitation at time of assessment
MEDIUM Weaponization timeline — patch-diff exploitation is likely within 2–6 weeks

Why this verdict

  • Massive install base: Chrome + Chromium downstreams are on essentially every enterprise endpoint. Even with UI:R, the reachable population is >90% of your fleet — friction does not narrow this the way it would for a niche server product.
  • UI:R is real friction, not theoretical: a user must load an attacker page. That is stopped by web-proxy category blocking, Safe Browsing, and email-gateway URL rewriting for the majority of opportunistic delivery. This is why 8.8 → 7.8 rather than 8.8 → 8.8.
  • Sandbox containment caps blast radius: renderer RCE ≠ host RCE. Without a second (sandbox-escape) bug, the attacker gets code execution in a process that cannot read your home directory, cookies from other origins, or credential stores. CVSS gives no credit for this — noisgate does.
  • Role multiplier: Chrome runs primarily on workstations (typical role — chain ends at user-context compromise post-escape) and on some VDI/jump hosts (elevated role — a jump host RCE gets an attacker onto the admin plane, but this is a small fraction of installs). No canonical high-value role is defined by 'runs Chrome' — the floor is HIGH, not CRITICAL.
  • No exploit, no KEV, low EPSS today — but patch-diffing Chrome UAFs is a known cottage industry, so weaponization within weeks is a reasonable planning assumption.

Why not higher?

CRITICAL is reserved for chains that end in fleet or identity compromise on their own. This bug requires user interaction AND a separate sandbox-escape bug to reach the host. Neither is present in a public exploit today, and Chrome's auto-update will patch the majority of the fleet within a week without operator action.

Why not lower?

MEDIUM would understate the risk: Chrome is on every endpoint, drive-by delivery is the #1 initial-access vector in commodity intrusion sets, and Chromium UAFs are historically weaponized within weeks of patch. Ignoring this because 'it's just the renderer' gets you owned when a chain drops.

05 · Compensating Control

What to do — in priority order.

  1. Force Chrome auto-update fleet-wide — Push RelaunchNotification = 2 (Required) and RelaunchNotificationPeriod ≤ 86400000 (24h) via GPO/Intune/Jamf so users cannot indefinitely defer the relaunch that finalizes the update. Deploy within the noisgate mitigation SLA of 30 days, ideally within 7.
  2. Verify Chromium downstreams — Edge, Brave, Opera, Vivaldi, and every Electron app in your inventory (Slack, Teams-classic, VS Code, Discord, Notion, 1Password desktop) each carry their own Chromium fork. Confirm each ships an equivalent patch and roll it. Same 30-day mitigation window.
  3. Enable Site Isolation everywhere — Set IsolateOrigins and SitePerProcess = enabled via policy. This is the control that turns renderer-RCE into a per-origin blast radius rather than an all-tabs compromise. Verify now; it should already be the default on desktop.
  4. Tighten web egress via SWG — Ensure Zscaler / Netskope / Umbrella / Defender for Cloud Apps categories 'Newly Registered Domains', 'Uncategorized', and 'Malware' are set to Block. Blocks drive-by delivery pre-navigation.
  5. EDR: alert on chrome.exe child processes — chrome.exe should almost never spawn cmd.exe, powershell.exe, wscript.exe, or unexpected LOLBINs. Tune EDR to alert; this catches sandbox-escape post-conditions even if the initial UAF succeeds.
What doesn't work
  • WAF / IPS signatures on inbound web traffic — the malicious page is served to your users from *outbound* browsing, not into your DMZ. WAFs don't see it.
  • Disabling JavaScript — theoretically kills the trigger, breaks 100% of business web apps. Non-starter operationally.
  • MFA / SSO hardening — irrelevant to the exploit chain itself; it only limits post-escape lateral movement, not the RCE.
  • Network segmentation — the exploit rides an outbound HTTPS session the user initiated. Segmentation between endpoints doesn't affect delivery.
06 · Verification

Crowdsourced verification payload.

Run on a target Windows endpoint (or via your RMM/Intune script deployment against the fleet). Requires standard user rights — reads Chrome's on-disk version from Program Files. Invoke with .\Check-CVE-2026-15112.ps1 for local, or wrap in your RMM's PowerShell task for fleet-wide execution.

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
#requires -Version 5.0
# noisgate verifier: CVE-2026-15112 (Chrome Ozone UAF)
# Exit 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN

$FixedVersion = [Version]'150.0.7871.115'
$paths = @(
    "$env:ProgramFiles\Google\Chrome\Application\chrome.exe",
    "${env:ProgramFiles(x86)}\Google\Chrome\Application\chrome.exe",
    "$env:LOCALAPPDATA\Google\Chrome\Application\chrome.exe"
)

$found = $false
$vulnerable = $false
foreach ($p in $paths) {
    if (Test-Path $p) {
        $found = $true
        try {
            $vi = (Get-Item $p).VersionInfo
            $installed = [Version]$vi.ProductVersion
            Write-Host "Found Chrome at $p : $installed"
            if ($installed -lt $FixedVersion) {
                Write-Host "VULNERABLE: $installed < $FixedVersion" -ForegroundColor Red
                $vulnerable = $true
            } else {
                Write-Host "PATCHED: $installed >= $FixedVersion" -ForegroundColor Green
            }
        } catch {
            Write-Host "UNKNOWN: could not parse version at $p" -ForegroundColor Yellow
            exit 2
        }
    }
}

if (-not $found) {
    Write-Host "UNKNOWN: Chrome not installed at standard paths." -ForegroundColor Yellow
    exit 2
}
if ($vulnerable) { exit 1 } else { exit 0 }
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: push the Chrome 150.0.7871.115 rollout via your management channel and set RelaunchNotification = Required so users can't sit on the old build — this is your compensating control and it must be complete within the noisgate mitigation SLA of 30 days for HIGH (target ≤ 7 days given the volume of exposed endpoints). Fleet-wide remediation — meaning every endpoint including Chromium downstreams (Edge, Brave, Electron apps like Slack/Teams/VS Code) verified on the fixed version — falls under the noisgate remediation SLA of 180 days but should realistically close inside 30. No KEV, no public exploit, no ITW campaign today — this is not a fire drill, but Chromium UAFs get patch-diffed fast, so don't let this slip past a normal patch window.

Sources

  1. Chrome Releases — Stable Channel Update for Desktop
  2. NVD — CVE-2026-15112
  3. MITRE CWE-416 (Use After Free)
  4. Chromium Ozone architecture
  5. Chromium MiraclePtr / raw_ptr<T> writeup
  6. CISA Known Exploited Vulnerabilities Catalog
  7. FIRST EPSS
  8. Microsoft Edge security updates (Chromium downstream)
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.