Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-43655-AppleM2ScalerCSCDriver-UAF — CVE-2026-43655 AppleM2ScalerCSCDriver 释放后使用漏洞的公开披露 | Kitploit
工具/GitHubGitHub/somisomair/cve-2026-43655-applem2scalercscdriver-uaf
iOS安全内存取证漏洞分析漏洞利用移动安全硬件安全二进制利用
GitHubsomisomair/cve-2026-43655-applem2scalercscdriver-uaf

CVE-2026-43655-AppleM2ScalerCSCDriver-UAF

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-43655 AppleM2ScalerCSCDriver 释放后使用漏洞的公开披露

查看仓库
52个月前尚未审核

CVE-2026-43655:AppleM2ScalerCSCDriver 共享调度器释放后使用(use-after-free)

针对 CVE-2026-43655 的公开技术披露,这是一个 AppleM2ScalerCSCDriver / IOSurfaceAccelerator 释放后使用(use-after-free)漏洞,可从默认 iOS 应用沙箱触发,无需任何特殊 entitlements。

Apple 已在 iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5 中修复该问题。本仓库包含 Objective-C 概念验证(PoC)源码、最小化 entitlements、构建好的 IPA,以及理解并在受影响设备上复现该问题所需的技术文档。

概述

该漏洞是缩放器(scaler)调度器中的拆解/生命周期错误。用户进程可以提交异步缩放器操作,关闭拥有这些操作的 IOSurfaceAcceleratorClient 连接,并在驱动程序全局调度器结构中留下过期条目。后续的调度器遍历(pass)可能会处理仍指向已释放并被重用操作存储的条目。

PoC 使用两个不同的标记值来演示该生命周期漏洞:

  • 受害者连接标记:0xDEAD0001
  • 喷射/替换连接标记:0xBEEF0002

受害者连接提交异步操作后即被关闭。随后打开替换连接,并将其自身标记设置为 0xBEEF0002。当下一个缩放器调度周期运行时,故障观察到的是替换标记(x9 = 0x00000000BEEF0002),而非受害者标记。这证明调度器读取了一个已被释放并重新分配给其他连接的操作槽位。

受影响配置

  • 已观察到受影响的系统:iOS 26.4
  • 修复版本:iOS 26.5 / iPadOS 26.5 / macOS Tahoe 26.5
  • Kext(内核扩展):com.apple.driver.AppleM2ScalerCSCDriver
  • 用户客户端路径:IOSurfaceAcceleratorClient
  • PoC 使用的应用 entitlements:仅 get-task-allow
  • 无需越狱,无需平台 entitlement,无需特殊的 Apple 私有 entitlement

根本原因

AppleM2ScalerCSCDriver 在多个缩放器客户端之间共享调度器状态。相关的生命周期不匹配如下:

  1. 客户端提交异步缩放器操作。
  2. 这些操作被插入到调度器拥有的状态中。
  3. 客户端连接通过 IOServiceClose 关闭。
  4. 每个客户端的操作存储被释放。
  5. 共享调度器状态未完全清除属于已关闭客户端的条目。
  6. 后续调度器遍历处理过期的操作指针。

拆解路径不会从共享调度器堆中移除关闭客户端的待处理调度器条目。调度器稍后通过这些过期指针读取和写入字段。

分析过程中观察到的重要字段:

偏移量调度器行为
operation + 0xc94被读取为信用解析路径所使用的信用/标记值
operation + 0xc1c由调度器信用核算路径写入
operation + 0x1fe4由调度器状态/标志更新路径写入

操作分配器的行为使该漏洞可以被观察到:已释放的操作槽位可被来自不同连接的后续操作重用。通过关闭受害者连接并立即喷射新连接,PoC 可以使过期的调度器条目指向现在由喷射连接拥有的内存。

为什么 x9 = 0xBEEF0002 能证明 UAF

PoC 使用受害者/喷射区分:

  1. 受害者连接设置标记 0xDEAD0001。
  2. 受害者提交 50 个异步缩放器操作。
  3. 受害者连接被关闭,释放受害者操作对象。
  4. 喷射连接设置标记 0xBEEF0002。
  5. 喷射操作重用已释放操作池中的槽位。
  6. 调度器稍后处理过期的受害者调度器条目。

如果调度器仍读取活跃的受害者拥有的对象,观察到的值应为 0xDEAD0001。然而,复现出的故障观察到的是 0xBEEF0002,即替换喷射连接写入的值。这是调度器解引用指向已释放并被重用内核内存的过期指针的关键证据。

这也显示了跨连接影响:调度器条目由一个连接创建,但稍后其访问的内存已被另一个连接回收利用。在复现运行中,最终的调度器活动可能是由正常的 SpringBoard/合成器(compositor)/UI 活动驱动的,而非原始的 PoC 进程。

影响

  • 从已释放/重用的操作内存中进行内核读取。
  • 在调度器核算/状态更新期间,内核向已释放/重用的操作内存中的固定偏移量写入。
  • 跨连接影响,因为调度器堆在缩放器用户之间共享。
  • 跨进程触发行为,因为任何后续驱动缩放器调度的进程都可能导致过期条目被处理。
  • 过期的调度器状态能够在原始 PoC 应用即时执行窗口结束后依然存留,并在后续的调度器周期中触发。

Apple 公开公告将影响描述为:“应用或许能够导致系统意外终止或读取内核内存。”

真机复现步骤

重要的复现细节:点击 TEARDOWN UAF 后,设备不一定会立即 panic。PoC 首先制造过期的调度器状态。该漏洞会在下一个缩放器调度周期触发,实际操作中这发生在 SpringBoard/合成器活动驱动缩放器时。在我的真机复现中,我在 PoC 完成制造过期调度器状态后,通过点击/交互**灵动岛(Dynamic Island)**触发了该调度周期。

步骤:

  1. 运行 PoC 前,先重启受影响的设备。
  2. 安装并启动 ScalerTeardownUAF.ipa。
  3. 点击 TEARDOWN UAF。
  4. PoC 打开一个受害者 AppleM2ScalerCSCDriver 连接。
  5. PoC 创建源/目标 IOSurface 对象。
  6. PoC 提交一个同步基线缩放器操作。
  7. PoC 在受害者连接上将选择器 10 的信用/标记数据设置为 0xDEAD0001。
  8. PoC 在受害者连接上提交 50 个异步操作。
  9. PoC 使用 IOServiceClose 关闭受害者连接,释放受害者拥有的操作对象,同时保留过期的调度器条目。
  10. PoC 打开 50 个喷射连接。
  11. 每个喷射连接将选择器 10 的信用/标记数据设置为 0xBEEF0002。
  12. PoC 在喷射连接上提交额外的异步操作,以重用已释放的操作槽位并维持调度器压力。
  13. 当应用提示触发时,点击/交互灵动岛以产生 SpringBoard/合成器活动并驱动缩放器调度器。
  14. 当过期调度器条目被处理时,设备 panic/重启。
  15. 重启后,验证 panic 寄存器状态包含 x9 = 0x00000000BEEF0002。

预期证明条件:

  • x9 = 0x00000000BEEF0002 表示调度器从原本属于已释放受害者操作的内存中读取到了喷射标记。
  • 0xBEEF0002 不是受害者标记;它是替换连接的标记。
  • 因此,观察到的调度器读取发生在释放和重用之后。

PoC 行为

包含的源码执行以下序列:

root@kitploit:~
open victim connection
create IOSurface source/destination pair
submit sync baseline scaler request
set victim marker = 0xDEAD0001 through selector 10
submit 50 async scaler operations
close victim connection
open 50 spray connections
set spray marker = 0xBEEF0002 through selector 10
submit repeated async scaler operations on spray connections
wait for SpringBoard/compositor scheduler trigger

相关源码文件为 ScalerTeardownUAF.m。

构建

root@kitploit:~
xcrun -sdk iphoneos clang -framework Foundation -framework UIKit -framework IOKit \
  -framework IOSurface -isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
  -arch arm64 -arch arm64e -miphoneos-version-min=16.0 -fobjc-arc \
  -o iPhoneProbe.app/iPhoneProbe ScalerTeardownUAF.m
ldid -S entitlements.plist iPhoneProbe.app/iPhoneProbe
mkdir -p /tmp/pkg/Payload
cp -r iPhoneProbe.app /tmp/pkg/Payload/
cd /tmp/pkg && zip -qr ScalerTeardownUAF.ipa Payload

仓库文件

时间线

  • 在测试 AppleM2ScalerCSCDriver 行为时首次发现崩溃。
  • 通过受害者/喷射标记区分证明了 UAF:受害者 0xDEAD0001,喷射 0xBEEF0002。
  • 通过灵动岛 / SpringBoard 合成器活动触发下一个缩放器调度周期,确认了真机复现。
  • Apple 在 26.5 版本系列中修复了该问题,并分配了 CVE-2026-43655。
下载工具
文件描述
ScalerTeardownUAF.m实现受害者关闭 + 喷射重用序列的 Objective-C PoC 源码。
ScalerTeardownUAF.ipa构建好的 IPA 复现产物。
entitlements.plist包含 get-task-allow 的最小化 entitlement 文件。