AppleM2ScalerCSCDriver Shared Scheduler Use-After-Free (CVE-2026-43655)
by Somisomair · 2026-07-05
- Severity
- High
- CVE
- CVE-2026-43655
- Category
- binary
- Affected product
- Apple AppleM2ScalerCSCDriver kext / IOSurfaceAcceleratorClient user-client (iOS, iPadOS, macOS on Apple M2-family scaler hardware)
- Affected versions
- iOS 26.4 and earlier (observed affected); fixed in iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5
- Disclosed
- 2026-07-05
- Patch status
- patched
Tags
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-06 |
| Author / Researcher | Somisomair |
| CVE / Advisory | CVE-2026-43655 |
| Category | binary |
| Severity | High |
| CVSS Score | N/A (Apple advisory does not publish a CVSS score) |
| Status | PoC |
| Tags | use-after-free, ios, ipados, macos, kernel, iokit, iosurface, kext, sandbox-escape-adjacent, memory-corruption |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Apple AppleM2ScalerCSCDriver kext / IOSurfaceAcceleratorClient user-client (iOS, iPadOS, macOS on Apple M2-family scaler hardware) |
| Versions Affected | iOS 26.4 and earlier (observed affected); fixed in iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5 |
| Language / Platform | Objective-C (userspace PoC app) targeting an IOKit kernel driver |
| Authentication Required | No (local, unprivileged app in default sandbox) |
| Network Access Required | No — local device execution only |
Summary
CVE-2026-43655 is a use-after-free in the AppleM2ScalerCSCDriver kernel driver’s shared scaler-operation scheduler, reachable from a default-sandboxed iOS/iPadOS/macOS app with no special entitlements (only get-task-allow, no jailbreak or private entitlements). A process can submit asynchronous scaler operations, close the IOSurfaceAcceleratorClient connection that owns them, and leave stale entries in the driver-global scheduler state; a later scheduler pass then reads/writes through pointers into memory that has since been freed and reused by other (spray) connections. The PoC proves the UAF by planting a distinct marker value on the victim connection (0xDEAD0001), closing it, reallocating the freed slots via 50 “spray” connections tagged 0xBEEF0002, and showing the crash register (x9) later observed the spray marker instead of the victim marker — proof the scheduler dereferenced freed-and-reused kernel memory.
Vulnerability Details
Root Cause
AppleM2ScalerCSCDriver maintains scheduler state shared across all scaler clients. When a client’s IOSurfaceAcceleratorClient connection is closed (IOServiceClose), the per-client operation storage is freed, but the shared scheduler heap is not fully purged of pending entries belonging to that closed client. A later scheduler pass can then read and write through these stale pointers into memory that has since been reallocated to different (unrelated) connections. Specific offsets observed to be touched through the stale pointer include operation + 0xc94 (credit/marker read), operation + 0xc1c (credit accounting write), and operation + 0x1fe4 (scheduler state/flag write).
Attack Vector
- App opens a victim
AppleM2ScalerCSCDriverconnection and creates source/destinationIOSurfaceobjects. - App submits a synchronous baseline scaler operation, then sets a marker value (
0xDEAD0001) via selector 10 on the victim connection. - App submits 50 asynchronous scaler operations on the victim connection.
- App closes the victim connection (
IOServiceClose), freeing the victim’s operation objects while stale scheduler entries referencing them remain. - App opens 50 “spray” connections, sets their marker to
0xBEEF0002, and submits additional async operations so the freed operation-pool slots get reused by the spray connections. - A subsequent scheduler cycle (in practice triggered by SpringBoard/compositor activity, e.g. interacting with the Dynamic Island) processes the stale victim scheduler entry, which now points at memory owned by a spray connection — the observed marker is
0xBEEF0002, not0xDEAD0001, proving the read/write happened after free-and-reuse.
Impact
Kernel-memory read of freed/reused driver memory and kernel writes to fixed offsets within that reused memory during scheduler accounting. Because the scheduler heap is shared across all scaler clients, the bug has cross-connection and cross-process impact — the ultimate trigger can be driven by unrelated system activity after the original PoC process has exited. Per Apple’s advisory, impact is “an app may be able to cause unexpected system termination or read kernel memory” (kernel panic / info leak primitive; a strong building block for further kernel exploitation).
Environment / Lab Setup
Target: iOS 26.4 (or earlier) physical device with AppleM2ScalerCSCDriver
Attacker: Local sideloaded app (get-task-allow entitlement only, no jailbreak)
Build tools: Xcode toolchain / xcrun clang, ldid for ad-hoc signing
Proof of Concept
PoC Script
See
ScalerTeardownUAF.m(source),entitlements.plist(minimalget-task-allowentitlement), andScalerTeardownUAF.ipa(prebuilt IPA) in this folder.
| |
Install the resulting IPA (or the prebuilt one) on an affected device, reboot, launch it, tap “TEARDOWN UAF”, then interact with the Dynamic Island to drive the next scaler scheduler cycle. On vulnerable devices this leads to a kernel panic/reboot; inspecting the panic log should show x9 = 0x00000000BEEF0002, confirming the scheduler dereferenced freed-and-reused memory.
Detection & Indicators of Compromise
Signs of compromise:
- Unexplained device panics/reboots shortly after launching an untrusted sideloaded app.
- Panic logs mentioning
AppleM2ScalerCSCDriverorIOSurfaceAcceleratorin the crashing thread’s backtrace. - Apps requesting only minimal entitlements (
get-task-allow) but performing rapid IOSurfaceAccelerator connection churn.
Remediation
| Action | Detail |
|---|---|
| Primary fix | Update to iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5 or later, where Apple corrected the scheduler teardown lifetime issue |
| Interim mitigation | Avoid installing untrusted sideloaded/enterprise-signed apps on unpatched devices; enforce rapid OS update policies on managed fleets |
References
Notes
Mirrored from https://github.com/Somisomair/CVE-2026-43655-AppleM2ScalerCSCDriver-UAF on 2026-07-05.