Medium watch ✔︎ verified CVSS 8.3 chrome Policy Bypass 📄 Reporter bug report 🔧 Commit mapped

Overview

Medium
Severity
8.3
CVSS
No
Exploited ITW
Fixed
Fix Status
ImpactInsufficient policy enforcement in GPU
DescriptionInsufficient policy enforcement in GPU
ComponentGPU
Bug ClassPolicy Bypass
Action tierwatch — logic/policy bug — security-relevant, no memory-unsafety — factors set by independent review by AI
Computed by PatchGap's deterministic exploitability ruler from the fixing commit. patch-now = RCE-class & attacker-reachable in a default config, or exploited in the wild; watch = real security signal below that bar; noise = no security relevance.
Independent review by AIConfirmed
A second, independent AI reviewer (not a human) re-derived this analysis from the fixing commit and the vendor advisory, looking for errors.
Tracker491422244
Fix commit7082f0611039 (chromium/src) +4/-2
CWECWE-693
CVSS vectorCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H
CISA KEVNot listed
CreditedMark Blaszczyk
Reported2026-03-10 (per vendor advisory)
Fix landed2026-03-17 (public git)
Disclosed2026-05-12
Patch gap56 days — fix public in source before the advisory

Background

Seatbelt profile
sandbox/policy/mac/gpu.sb is the macOS sandbox policy constraining what the Chrome GPU process may do.
`com.apple.lsd.modifydb`
a Launch Services Mach service that can modify the per-user Launch Services database (e.g. default URL-scheme handlers).

Root Cause Analysis

The pre-fix GPU profile granted the GPU process mach-lookup access to (global-name "com.apple.lsd.modifydb") at sandbox/policy/mac/gpu.sb:28, among other Launch Services names in the same allow mach-lookup block (:15-40). It also granted broad (allow file-read* file-write* ...) over the Darwin user cache/home/temp directories at sandbox/policy/mac/gpu.sb:122-126. Together these let a GPU process both write files under user-writable directories — including extended attributes, because the wildcard file-write* subsumes file-write-xattr — and talk to the Launch Services modify-database service. The advisory records this as insufficient policy enforcement in GPU: capabilities broader than the GPU process requires.

The fix tightens the policy by deleting the com.apple.lsd.modifydb grant (diff removes line 28) and by narrowing the file-write grant from file-write* to the explicit tokens file-write-data file-write-create file-write-owner file-write-unlink, which drops file-write-xattr and file-write-mode. This is a pure restriction — it removes capabilities and adds none.

Key insight
The GPU sandbox held two capabilities it did not need — the com.apple.lsd.modifydb Mach service and the wildcard file-write* (which includes xattr writes) — and the fix removes the service grant and replaces the wildcard with a minimal set of write tokens.

Attack Path

  1. Compromise the GPU process An attacker first gains code execution inside the GPU process by some other means. (inferred — not shown in the material.)
  2. Write and de-quarantine a bundle Using the pre-fix broad file-write* grant on the user cache directory (gpu.sb:122-126), the process writes an app bundle and clears its quarantine attribute via an xattr write. (inferred — reporter’s claim.)
  3. Register a URL handler Using the com.apple.lsd.modifydb grant (gpu.sb:28), the process alters the Launch Services database to claim a URL scheme. (inferred — reporter’s claim.)
  4. Trigger execution outside the sandbox A later navigation to that scheme launches the attacker’s handler outside the GPU sandbox. (inferred.)

Impact Assessment

The advisory rates this medium severity, not in the wild, and classifies it as insufficient policy enforcement in GPU. The removed grants would let an already-compromised GPU process influence system Launch Services state and write extended attributes, which the reporter describes as a path to a macOS sandbox escape; that escalation is (inferred) and presupposes prior GPU compromise.

Files Changed

  • sandbox/policy/mac/gpu.sb

Audit Directions

  • Overbroad sandbox tokens
    Audit .sb profiles for wildcard grants like file-write* and prefer explicit minimal tokens where xattr/mode writes are not required.
  • Legacy Mach-service grants
    Review Mach global-name allowances (e.g. Launch Services modifydb) for grants added years earlier that are no longer needed.
From 7082f06110390405f1ecd750a783101b40e8fbfa Mon Sep 17 00:00:00 2001
From: Dale Curtis <dalecurtis@chromium.org>
Date: Tue, 17 Mar 2026 16:03:31 -0700
Subject: [PATCH] Tighten macOS GPU sandbox restrictions

These were added back in 2018 and don't seem to be necessary
anymore.

Changes suggested by mark <at> advert.com.au

Fixed: 491422244
Change-Id: Ie7c37352b0b9fbb324611eb247bae9b4ab4ad467
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7671372
Reviewed-by: Mark Mentovai <mark@chromium.org>
Commit-Queue: Dale Curtis <dalecurtis@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1600856}
---

diff --git a/sandbox/policy/mac/gpu.sb b/sandbox/policy/mac/gpu.sb
index 9d98e44..9269f4f2c 100644
--- a/sandbox/policy/mac/gpu.sb
+++ b/sandbox/policy/mac/gpu.sb
@@ -25,7 +25,6 @@
   (global-name "com.apple.cvmsServ")
   (global-name "com.apple.gpumemd.source")
   (global-name "com.apple.lsd.mapdb")
-  (global-name "com.apple.lsd.modifydb")
   (global-name "com.apple.powerlog.plxpclogger.xpc")
   (global-name "com.apple.PowerManagement.control")
   (global-name "com.apple.SecurityServer")
@@ -119,7 +118,10 @@
 )
 
 ; crbug.com/980134
-(allow file-read* file-write*
+; Restrict file-write to data/create/unlink only — the GPU process does not need
+; file-write-xattr or file-write-mode.
+; TODO(crbug.com/491422244): Remove file-write-owner needed by WebNN.
+(allow file-read* file-write-data file-write-create file-write-owner file-write-unlink
   (subpath (param darwin-user-cache-dir))
   (subpath (param darwin-user-dir))
   (subpath (param darwin-user-temp-dir))
Loading diff…

Original Bug Report

reported by ma...@advert.com.au

GPU sandbox escape on macOS via lsd.modifydb > RCE

Steps to reproduce the problem

Tested on 147.0.7704.0

  1. patch -p1 < poc.diff
  2. gn gen out/Default --args='is_debug=false' && autoninja -C out/Default content_shell
  3. out/Default/Content\ Shell.app/Contents/MacOS/Content\ Shell "data:text/html,<h1>trigger</h1>"
  4. Wait a few seconds for the GPU process to register the handler, then quit content_shell.
  5. Trigger mailto: from terminal, Chrome, or any app: open "mailto:test@example.com"
  6. Observe: ~/Desktop/gpu_escape_poc.txt is created and TextEdit opens. The file contains uname -a and uptime output, proving code execution outside the GPU sandbox.

Problem Description

The GPU sandbox policy (sandbox/policy/mac/gpu.sb line 28) grants com.apple.lsd.modifydb Mach service access. This is GPU-only, not granted to renderer, audio, or utility sandboxes.

Combined with the GPU sandbox’s file-write permission to DARWIN_USER_CACHE_DIR (gpu.sb lines 122-126), a compromised GPU process can:

  1. Resolve DARWIN_USER_CACHE_DIR via confstr(_CS_DARWIN_USER_CACHE_DIR)
  2. Write a .app bundle there (sandbox permits file-write)
  3. Strip quarantine xattr via removexattr() (permitted because gpu.sb grants file-write* to this directory, which includes file-write-xattr)
  4. Call LSRegisterURL to register the app with Launch Services
  5. Call LSSetDefaultHandlerForURLScheme to claim mailto: (and chickennuggets://)
  6. When Chrome loads a page with window.location = "mailto:...", Chrome dispatches to the OS, which launches the hijacked handler outside the sandbox

The PoC demonstrates this from inside HandleRasterCHROMIUM in gpu/command_buffer/service/raster_decoder.cc, reachable from a compromised renderer via GPU command buffer IPC. The payload writes a file to ~/Desktop/gpu_escape_poc.txt and opens TextEdit.

The mailto: hijack is particularly impactful: every website with a “contact us” or “email” link uses mailto:, and the hijack is system-wide (affects Chrome, Safari, Slack, and every other application). window.location = "mailto:..." fires automatically on page load with zero user interaction.

Additional Comments

  • Content Shell does not dispatch external protocol navigations. In Chrome, window.location = "mailto:..." will trigger the RCE.
  • com.apple.lsd.modifydb was added in f92299c (2019-04-24, bug 871280): “macOS V2 Sandbox: Allow lsd.modifydb in GPU v2 sandbox.” Present for ~7 years across all Chrome releases since Chrome 76.

Summary

GPU sandbox escape on macOS via lsd.modifydb > RCE

Custom Questions

Type of crash:

no crash, clean sandbox escape.

Crash state:

No crash reports available as we are working within the GPU sandbox policy (sandbox/policy/mac/gpu.sb line 28). output of ~/Desktop/gpu_escape_poc.txt:

Darwin Macbook.local 25.3.0 Darwin Kernel Version 25.3.0: Wed Jan 28 20:53:31 PST 2026; root:xnu-12377.81.4~5/RELEASE_ARM64_T8122 x86_64
 0:16  up 21 days,  3:17, 18 users, load averages: 1.99 1.71 1.81

Reporter credit:

Mark Blaszczyk

Additional Data

Category: Security
Chrome Channel: Stable
Regression: N/A \

View on issue tracker