

在当今数字化时代,智能手机的安全性已经成为我们生活中不可或缺的一部分。苹果公司一直以其严格的安全机制著称,但最近一个名为CVE-2025-24200的漏洞却引发了广泛关注。接下来以一篇深度文章[1],带你深入了解这个漏洞的细节,以及苹果是如何修复它的。

苹果公司近日发布了iOS18.3.1版本(构建号22D72),用于修复由CitizenLab报告、涉及辅助功能框架的漏洞。相关的漏洞公告可在此处[2]查阅。以下是直接从苹果官网摘录的概述:
辅助功能漏洞影响设备:iPhoneXS及后续机型;13英寸iPadPro;第三代及后续12.9英寸iPadPro;第一代及后续11英寸iPadPro;第三代及后续iPadAir;第七代及后续iPad;第五代及后续iPadmini。 漏洞影响:物理攻击可能导致锁定设备的USB限制模式被禁用。苹果已获悉一份报道称,该漏洞可能已被利用于针对特定目标的极其复杂的攻击中。 漏洞描述:通过改进状态管理机制解决了授权问题。 CVE-2025-24200:多伦多大学蒙克学院CitizenLab的BillMarczak

在深入分析补丁之前,笔者先简要回顾USB限制模式的功能及其重要性。
当iPhone启用USB限制模式后,若设备处于锁定状态超过1小时,其端口的数据传输功能将被自动禁用。用户必须解锁设备并明确授权,外部配件才能建立连接:

在找到实际补丁之前,第一步是下载修复前后的iOS构建版本:
# pre-patch
ipsw download ipsw --device iPhone14,4 --build 22D63
# post-patch
ipsw download ipsw --device iPhone14,4 --build 22D72
接着,可以从两个版本中提取所有二进制文件和库以调查变更。

笔者首先查看了由Blacktop为每个iOS版本生成并发布的ipsw diff
差异报告。
import binaryninja
binaryninja.disable_default_log()
def build_table(bv: binaryninja.BinaryView):
"""Builds a table of function names to their basic block count."""
table = {}
for f in bv.functions:
if not f.name.startswith('sub_'):
table[f.name] = [len(f.basic_blocks)]
return table
def diff_tables(original, patched):
"""Compares two basic block tables and prints changes."""
for fn in original.keys() & patched.keys():
if original[fn] != patched[fn]:
print(f'{fn}: {original[fn]} -> {patched[fn]}')
t1 = build_table(binaryninja.load("/path/to/original"))
t2 = build_table(binaryninja.load("/path/to/patched"))
diff_tables(t1, t2)

在该框架中,以下函数似乎新增了4个基础块:
-[AXSpringBoardServerHelper _handleDisallowUSBRestrictedModeSCInformativeOnly:]
进一步检查发现,苹果在函数的最开头添加了一个校验,确保设备在显示弹窗前已解锁。该弹窗的标题为本地化字符串sc.disallow.usb.restricted.mode.alert.title
,并仅包含一个可点击的OK
操作。
顾名思义,此函数仅用于信息提示,即仅影响用户界面。我们仍需找到弹窗显示后实际禁用USB限制模式的位置。

profiled是iOS中一个重要的守护进程,负责处理多项功能,包括辅助功能、远程设备管理(MDM)等,在此次更新中,以下函数被修补并新增了6个基础块:
-[MCProfileServicer setParametersForSettingsByType:configurationUUID:toSystem:user:passcode:credentialSet:completion:]
通过逆向工程两个版本,笔者还原了补丁内容如下:
diff --git a/original.m b/patched.m
index cd2b537..7fe1bd4 100644
--- a/original.m
+++ b/patched.m
@@ -8,6 +8,13 @@ BOOL has_ent = [self
if (has_some_entitlement == NO) {
// Unchanged
} else {
+ NSDict *rb = [settingsByType objectForKeyedSubscript: @"RestrictedBool"];
+ BOOL is_device_locked [[MCDependencyManager sharedManager] isDeviceLocked];
+ BOOL restricted_mode_allowed = [
+ rb objectForKeyedSubscript: @"FeatureUSBRestrictedModeAllowed"
+ ]
+
+ if (restricted_mode_allowed == NO || is_device_locked == NO) {
[[[MCProfileServiceServer sharedServer]]
setParametersForSettingsByType: type
sender: [self remoteProcessBundleID]
completion: completion
]
+
+ } else {
+ NSError *error = [
+ MCErrorWithDomain: _MCSettingsErrorDomain
+ code: 0x6d66
+ descriptionArray: _MCErrorArray
+ errorType: _MCErrorTypeFatal
+ ];
+
+ if (completion) {
+ completion.completionHandler(completion, error);
+ }
+ }
}
setParametersForSettingsByType
内部方法前,函数会校验设备是否已解锁。这似乎是实际修复CVE-2025-24200的补丁。
assistivetouchd
守护进程包含通过以下函数禁用USB限制模式的代码:-[SCATScannerManager _setUSBRMPreferenceDisabled]
AX[...]
类,暗示其可能与前面讨论的第一部分补丁(弹窗提示)相关。这促使我们更仔细地研究该守护进程。
assistivetouchd
守护进程位于iOS设备的以下路径:System/Library/CoreServices/AssistiveTouch.app/assistivetouchd

assistivetouchd
的交叉引用,我们发现_setUSBRMPreferenceDisabled
可能由以下函数调用:-[SCATScannerManager handleUSBMFiDeviceConnected]
@implementation SCATScannerManager
- (void)handleUSBMFiDeviceConnected {
AXSettings btm = [SCATBluetoothManager sharedInstance];
bool did_read_rm_alert = [btm switchControlUserDidReadUSBRestrictedModeAlert];
bool has_disabled_rm = [self userHasDisabledUSBRM];
bool should_disallow_rm = [btm switchControlShouldDisallowUSBRestrictedMode];
if (!did_read_rm_alert && !has_disabled_rm && should_disallow_rm) {
[btm setSwitchControlShouldDisallowUSBRestrictedMode:NO];
// Forwards a call to the AXSettings framework that is responsible
// for showing the alert discussed earlier in the patch section
// The -[SCATScannerManager _setUSBRMPreferenceDisabled] function that
// disables USB restricted mode is passed as the callback handler for
// this alert.
}
}
@end

handleUSBMFiDeviceConnected
方法。assistivetouchd
二进制文件:frida-pull -U /System/Library/CoreServices/AssistiveTouch.app/assistivetouchd
-[HNDRocker _shakePressed]
方法,是因为可在设备锁定时通过AssistiveTouch菜单触发。onEnter处理如下:onEnter(log, args, state) {
// Following addresses need to be adapted for each build
shakePressedBaseAddr = 0x100042858;
handleUSBMFiDeviceConnectedBaseAddr = 0x1000ad1c8;
off = handleUSBMFiDeviceConnectedBaseAddr - shakePressedBaseAddr
shakePressedAddr = this.context.pc;
log('ShakePressed:', shakePressedAddr)
handleUSBMFiDeviceConnectedAddr = shakePressedAddr.add(off)
log('handleUSBMFiDeviceConnected:', handleUSBMFiDeviceConnectedAddr)
handle = new NativeFunction(handleUSBMFiDeviceConnectedAddr, 'long', []);
handle()
},
追踪命令:
frida-trace -U assistivetouchd -m '-[HNDRocker _shakePressed]'
最终,通过点击“Shake”选项触发了追踪函数。借助钩子,成功调用了handleUSBMFiDeviceConnected
函数并显示弹窗:


-[SCATScannerManager handleUSBMFiDeviceConnected]
方法触发弹窗,但尚不清楚其在真实场景中的自然调用方式。assistivetouchd
守护进程的辅助功能。另一相关功能是切换控制(SwitchControl)。SC
开头(可能代表SwitchControl)推断,插入通过MFi认证的切换控制设备是合法触发途径。调研市面上的切换控制设备发现,多数通过蓝牙连接。但我们发现曾有一款通过Lightning接口操作的设备。

尽管上述推测逻辑可行,但我们目前缺乏硬件设备进行实际验证。需注意,USB限制模式并非防御物理外设攻击的唯一机制,实际漏洞利用可能更为复杂。
此外,本文仅探讨了该漏洞的一种潜在攻击向量,其他利用方式可能仍存在。强烈建议用户及时更新设备至最新系统版本,即使未启用辅助功能。

[1]https://blog.quarkslab.com/first-analysis-of-apples-usb-restricted-mode-bypass-cve-2025-24200.html.
[2]https://support.apple.com/en-ca/122174.
[3]https://x.com/zerozenxlabs/status/1889612599727096140.
[4]Activating data connections securely – Apple Support (UK),https://support.apple.com/en-gb/guide/security/sec5044aad1b/1/web/1.
[5]About the security content of iOS 18.3.1 and iPadOS 18.3.1 - Apple Support (CA),https://support.apple.com/en-ca/122174.
[6]Important info about the Blue2 and Hook+ switch interfaces (updated 4/8/24) | OMazing Kids AAC Consulting,https://omazingkidsllc.com/2022/06/30/important-info-about-the-blue2-and-hook-switch-interfaces/.
[7]stacksmashing - Hithackers guide to Apple Lightning and JTAG hacking - V02,https://media.defcon.org/DEF CON 30/DEF CON 30 presentations/stacksmashing - The hitchhackers guide to iPhone Lightning JTAG hacking.pdf.

