kfd 是 kernel file descriptor 的缩写,是一个在 Apple 设备上读取和写入内核内存的项目。
速速声明:我并无意为其他设备和 iOS 版本添加偏移量。
kfd 是一个项目,用于在 Apple 设备上读取和写入内核内存。它利用了可以被利用的各种漏洞,从而获取悬浮 PTE,将其称为 PUAF 原语,意为"物理使用后释放"。然后,它重新分配这些物理页面内的某些内核对象,并通过悬浮 PTE 从用户空间直接操作这些对象,以实现 KRKW 原语,意为"内核读/写"。漏洞代码完全包含在一个库中,libkfd,但该项目还包含适用于 iOS 和 macOS 的简单可执行包装程序。libkfd 的公共 API 非常小巧且直观:
enum puaf_method {
puaf_physpuppet,
puaf_smith,
puaf_landa,
};
enum kread_method {
kread_kqueue_workloop_ctl,
kread_sem_open,
};
enum kwrite_method {
kwrite_dup,
kwrite_sem_open,
};
u64 kopen(u64 puaf_pages, u64 puaf_method, u64 kread_method, u64 kwrite_method);
void kread(u64 kfd, u64 kaddr, void* uaddr, u64 size);
void kwrite(u64 kfd, void* uaddr, u64 kaddr, u64 size);
void kclose(u64 kfd);
``` `kopen()` 从概念上来讲是打开一个"内核文件描述符"。它接受以下 4 个参数:
- `puaf_pages`: 目标数量的物理页面中有悬浮的 PTE。 - `puaf_method`: 用于获取 PUAF 原语的方法,有以下选项: - `puaf_physpuppet`: 此方法利用了 [CVE-2023-23536][1]。 - 已在 iOS 16.4 和 macOS 13.3 中修复。 - 可从 App Sandbox 访问,但不能从 WebContent sandbox 访问。 - Apple Security Bounty 奖励为 52,500 美元。 - `puaf_smith`: 此方法利用了 [CVE-2023-32434][2]。 - 已在 iOS 16.5.1 和 macOS 13.4.1 中修复。 - 可从 WebContent sandbox 访问,并且可能已被主动利用。 - `puaf_landa`: 此方法利用了 [CVE-2023-41974][3]。 - 已在 iOS 17.0 和 macOS 14.0 中修复。 - 可从 App Sandbox 访问,但不能从 WebContent sandbox 访问。 - Apple Security Bounty 奖励为 70,000 美元。暂无开放 Issues,或尚未同步最近议题。