主要观点:
- 发现 XNU 内核中的“SUSCTL”(CVE-2024-54507)存在问题,在 macOS 15.0 中运行特定命令会导致地址 sanitizer 报告无效加载。
- 介绍了 sysctl 的相关知识,包括其是用户空间可调整的内核变量,以及不同类型的 sysctl 处理方式。
- 指出“sysctl_udp_log_port”函数中的 bug,即加载 oidp->oid_arg1 时将其视为整数指针导致越界读取,可导致 2 字节内核内存泄漏。
- 提供了泄漏 2 字节内核内存的代码示例,以及不同内核环境下泄漏内容的差异。
- 给出了修复该 bug 的补丁代码,即在加载 oidp->oid_arg1 时将其视为 uint16_t 指针。
- 介绍了该 bug 的发现时间、报告时间以及修复时间等时间线信息。
- 总结了该 bug 的教训,强调内核编程的难度以及对内存访问的谨慎性。
关键信息:
- 相关函数及宏:sysctl_udp_log_port、SYSCTL_PROC、sysctl_handle_int 等。
- 漏洞影响的 sysctl:net.inet.udp.log.local_port_included 等四个 sysctl。
- 漏洞导致的后果:导致 2 字节内核内存泄漏,可通过特定代码读取。
- 修复补丁:将加载 oidp->oid_arg1 的类型改为 uint16_t。
重要细节:
- 在 macOS 15.0 运行 KASAN 时,执行“sysctl -a”会导致崩溃,显示 KASan 无效加载错误。
- 漏洞函数“sysctl_udp_log_port”在处理用户对特定 sysctl 的读写请求时出现问题,先将 oidp->oid_arg1 视为整数指针导致越界读取,然后将数据传递给用户空间。
- 不同 XNU 平台的链接器行为不同,导致泄漏的内容也不同,可能是其他 sysctl 或未使用的填充字节。
- 报告 bug 时间为秋季 2024 年,macOS 15.2 和 iOS 18.2 于 2024 年 12 月 11 日发布修复该 bug。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。