Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
dtrace-memaccess_cve-2020-27949 — 针对CVE-2020-27949的概念验证利用程序,演示了通过DTrace fasttrap ioctl在没有提升权限的情况下对macOS进程进行任意内存读写。 | Kitploit
工具/GitHubGitHub/seemoo-lab/
dtrace-memaccess_cve-2020-27949
权限提升内存取证漏洞分析漏洞利用红队二进制利用
GitHubseemoo-lab/dtrace-memaccess_cve-2020-27949

dtrace-memaccess_cve-2020-27949

针对CVE-2020-27949的概念验证利用程序,演示了通过DTrace fasttrap ioctl在没有提升权限的情况下对macOS进程进行任意内存读写。

查看仓库
3395年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

使用 fasttrap 读写其他进程的内存

用于在用户态进程中为 pid 和 objc 提供方创建陷阱节点的 /dev/fasttrap 设备具有权限 666。与同样是 666 的 /dev/dtrace 不同,fasttrap 缺少权限检查。这使得任何进程都可以发起 FASTTRAPIOC_MAKEPROBE 或 FASTTRAPIOC_GETINSTR ioctl 调用。
攻击者可以利用 FASTTRAPIOC_MAKEPROBE 在任何其他进程中的任意内存位置创建探针。当这些探针被激活时,指定内存位置的值会被替换为陷阱指令(在 x86 上是 0xCC),而原始值则被存放在影子内存中。通过 FASTTRAPIOC_GETINSTR ioctl 可以恢复原始值。这允许攻击者通过放置多个陷阱来读取另一个进程的任意内存。

此漏洞被追踪为 CVE-2020-27949,在 macOS Big Sur 11.1、Security Update 2020-001 Catalina、Security Update 2020-007 Mojave 中已修复。

披露时间线

  • 2020-07-07 -> 首次向 Apple 产品安全团队披露。
  • 2020-07-08 <- 确认正在调查。
  • 2020-10-28 -> 请求状态更新。
  • 2020-12-07 <- 收到即将发布修复更新的通知。
  • 2020-12-14 <- 更新已发布。

需求

  • 攻击者能够以普通用户权限(非提权)执行代码
  • 目标进程中的探针必须被启用(即目标进程必须在 DTrace 下运行)

已测试的系统配置

  • SIP 已开启(无例外)
  • iMac Late 2012 上的 10.15.5
  • MacBook Pro 2020 上的 10.15.5

影响

  • 攻击者可以在无需提权的情况下读取其他在 DTrace 下执行的进程的内存。甚至可以读取以 root 身份运行的进程的内存。
  • 攻击者可以在无需提权的情况下,将陷阱指令值(在 x86 上是 0xCC)写入其他在 DTrace 下执行的进程的任意内存位置。甚至可以写入以 root 身份运行的进程的内存。通过修改其他指令或跳转地址,可以改变目标进程的控制流,从而实现权限提升。

预期

作为用户,我期望启用 DTrace 只允许拥有 root 权限的进程对其他进程进行跟踪、检测或修改。DTrace 是用于管理任务的宝贵工具,提供诸如 dtruss、iotop 等实用程序。

漏洞利用细节

我们的目标(target)是一个以 root 身份运行的可执行文件。攻击者(memaccess)是一个以普通用户权限运行的可执行文件。追踪脚本 libc_monitor.d 记录对 libsystem_c.dylib 共享对象中函数的调用次数(这只是一个简单的示例,演示机器所有者可能会运行的管理脚本)。

  1. 目标进程被运行
  2. 攻击者使用目标的 PID 和感兴趣的内存位置创建一个探针。
  3. 攻击者等待 DTrace 追踪目标进程。这可能会在管理员操作(例如机器所有者想追踪目标进程中的函数时,如 libc_monitor.d)中发生。
  4. 当 DTrace 开始追踪目标时,之前创建的探针将被启用,从而替换原始内存值。
  5. 攻击者使用 FASTTRAPIOC_GETINSTR 读取创建的探针的内存值。

第 4 步会用陷阱指令值替换目标进程中的内存。根据应用程序的不同,攻击者可以利用此操作将已知值写入关键内存位置。例如,攻击者可能控制随机数生成器的种子或替换进程中的加密密钥。

注意:攻击者始终不需要提权或 root 权限。
注意2:不需要自写的 DTrace 脚本。例如,dapptrace 也使用 pid 提供方来追踪任意函数。

建议修复

在 /dev/fasttrap 中实现权限检查,如同 /dev/dtrace 一样,或者移除全局可写权限。

注意:我们未检查已发布的修复。

操作说明

  1. 确保 DTrace 可用且正常工作
  2. 运行 target 并按照屏幕上的提示操作
下载工具