Chrome’s Mac sandbox let a graphics process type on the desktop

A macOS-only Chrome escape turned the browser's GPU helper into a way to press keys and launch apps outside the sandbox.

AppleThreat Staff
2 Min Read

Chrome’s renderer and GPU processes were meant to be disposable. On the Mac, not quite.

A sandbox escape patched in Google’s browser let code inside the graphics helper type on a user’s desktop and start applications for them. The flaw, tracked as CVE-2026-106378, scored 8.3 and applied only to Chrome on the Mac.

The exception that started it

Under Seatbelt, Apple’s rule-based sandbox, the GPU process may look up WindowServer, the service that draws the screen. Rendering needs it. Seatbelt decides whether the connection exists, not what the process does with it, and WindowServer also handles keyboard and mouse input.

The pwn.ai team combed Apple’s SDK stubs, catalogs of private functions Apple leaves undocumented, and located calls that post events in CoreGraphics and SkyLight. From inside the sandbox they sent synthetic keys: Command-Space, then Return. The app launched.

The sandbox held. A shell spawned from the GPU process failed, and Calculator opened as a separate process started by launchd. It worked because macOS accepts synthetic input from processes holding Accessibility permission, which the child inherited from whatever launched Chrome.

Half a chain, not a whole one

The proof of concept assumed code already running in the GPU process, simulated by patching Chromium itself. A real intrusion would still need memory corruption in the renderer, ANGLE or Skia first.

Google fixed it in Chrome 155 on October 6 by making the GPU child disclaim the inherited permission, behind a feature flag. Rendering still needs it, so the lookup stayed. No exploitation has been reported and the CVE is absent from CISA’s known exploited list.

Chrome 156 for Mac shipped October 27. Check chrome://settings/help and relaunch, since the change only applies after a restart. pwn.ai says other sandboxed Mac apps whose child processes keep the WindowServer lookup should audit the same handoff.

Share This Article