Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/jvidhan/cve-2026-28912
权限提升静态分析漏洞分析漏洞利用逆向工程二进制分析论文与研究学习与教育
GitHubjvidhan/cve-2026-28912

cve-2026-28912

macOS PackageKit 符号链接跟随漏洞(CVE-2026-28912)的逆向工程笔记及可用 PoC,附 26.6 修复版本的反汇编差异。

查看仓库
114天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-28912 — 逆向工程笔记与复现

对 macOS PackageKit 符号链接跟随漏洞(CVE-2026-28912)的独立逆向工程,以及一个可用的 PoC,演示安装器如何通过安装目标路径中的目录符号链接,以 root 身份写入攻击者控制的文件。

该漏洞是 PKCoreShove 的文件重链接逻辑中未同步的路径遍历。一个恶意的 .pkg 可以在非特权目录中声明目标路径,在路径的某个组件处放置一个指向特权位置的目录符号链接,并导致以 root 身份运行的安装器写入符号链接目标。Apple 的 26.6 修复添加了 _PKSIPOpenPathSafely,它使用 O_NOFOLLOW 遍历每个路径组件并拒绝任何符号链接。


CVE 概览

字段值
CVECVE-2026-28912
组件PackageKit (PKCoreShove, PKBundleComponent)
受影响macOS Tahoe 26.5 及更早版本
修复于macOS Tahoe 26.6
公告影响“一个应用可能能够获得 root 权限。”
CVSS v3.17.8 (High)
报告者根据 Apple 公告的原始发现者

为什么存在这份说明

Apple 针对 CVE-2026-28912 的公告记录了影响和修复版本。它没有记录技术机制:

  • PackageKit 中哪个函数跟随了符号链接
  • 为什么安装器遍历目标路径时不检查每个组件
  • 26.6 中添加了哪个函数来修复该漏洞
  • 为什么修复恰好在该点插入 O_NOFOLLOW 遍历
  • 为什么 PoC 必须使用目录符号链接而不是文件符号链接
  • 为什么目标处的文件级符号链接会被替换而不是被跟随

在撰写本文时,未找到公开的技术说明。本仓库通过 26.4 到 26.6 之间 PackageKit 的独立逆向工程分析,以及一个演示该原语实际效果的可用 PoC,填补了这一空白。

这不是发现声明。该 CVE 由原始发现者报告,并由 Apple 修复。这里的贡献是技术分析和复现。


漏洞摘要

macOS 26.4 中的 PKCoreShove _relinkFile:dest: 在创建文件时逐组件遍历目标路径:

; macOS 26.4, PackageKit
1a9fb14f8   _relinkFile:dest:
    ...
    bl   _linkResolutionProhibitted     ; returns 0 in the normal case
    mov  w8, 0x10                       ; RENAME_NOFOLLOW_ANY
    cmp  w0, 0
    csel w22, w8, wzr, ne               ; w22 = 0x10 if prohibited, else 0
    ...
    mov  x2, x22
    bl   _renamex_np                    ; uses w22 as flags

当调用进程无法修改 SIP 文件时,_linkResolutionProhibitted 返回 0(false)——这是用户发起安装的正常情况。这会禁用 RENAME_NOFOLLOW_ANY,因此重命名会跟随目标路径中的任何符号链接。

26.6 修复添加了 _PKSIPOpenPathSafely,由 PKBundleComponent 的 initWithBundleAtPath:relativeToDestination: 调用:

; macOS 26.6, PackageKit
1aa6dfe18   bl   _PKSIPOpenPathSafely    ; walks each component with O_NOFOLLOW

_PKSIPOpenPathSafely:

  1. 使用 O_NOFOLLOW (0x4) 打开每个路径组件
  2. 通过 S_IFLNK(st_mode 中的 0xa000)检测符号链接
  3. 通过 _PKSIPFullyProtected 检查 SIP 保护
  4. 通过 fgetattrlist 读取 SF_RESTRICTED
  5. 在清理时使用 close_drop_np 丢弃沙盒扩展

任何指向预期路径之外的符号链接组件都会被以 EPERM 或 ELOOP 拒绝,安装失败。


本仓库包含的内容

逆向工程

  • 26.4 与 26.6 之间 PKCoreShove _relinkFile:dest: 和 _linkResolutionProhibitted 的反汇编差异
  • 识别易受攻击的字段:_linkResolutionProhibitted 对非 SIP 修改进程返回 0
  • 识别修复:_PKSIPOpenPathSafely 被添加到 PKBundleComponent,逐组件 O_NOFOLLOW 遍历
  • 系统调用分析:安装器仅在调用者可以修改 SIP 文件时使用带 RENAME_NOFOLLOW_ANY = 0x10 的 renamex_np
  • 运行时确认:fs_usage 显示安装器对符号链接目标执行 stat/listxattr,并通过目录符号链接写入

完整说明见 docs/ANALYSIS.md,地址和日志样本见 docs/ARTIFACTS.md。

复现

  • link.sh — 一个单文件、自包含的 PoC:

    1. 在 $HOME/cve-poc/target → $HOME/cve-poc/real 创建目录符号链接
    2. 构建一个 .pkg,其 payload 在 $HOME/cve-poc/target/poc.txt 声明一个文件
    3. 使用 sudo installer 安装它
    4. 验证文件落在 $HOME/cve-poc/real/poc.txt —— 且属主为 root:wheel

此 PoC 演示了什么

  • 一个 .pkg payload 在非特权目录下声明文件
  • 安装器跟随该路径处的目录符号链接
  • 在声明的目标之外创建了一个 root 拥有的文件
  • 通过 fs_usage 实时捕获写入

此 PoC 未演示什么

  • 目标处的文件级符号链接。文件符号链接会被 renamex_np 替换,而不是被跟随——写入必须通过路径中的目录符号链接。
  • 代码执行、权限提升或受害者上的 shell
  • 武器化:PoC 默认使用 $HOME/cve-poc/real/,而不是 /etc/sudoers.d/ 或 /Library/LaunchDaemons/

演示的影响是符号链接跟随原语——正是 26.6 修复所关闭的行为。


要求

目标(受害者)主机

  • macOS Tahoe 26.5 或更早版本(易受攻击的 PackageKit)
  • pkgbuild、installer、fs_usage
  • Root(用于安装器)

不需要单独的攻击者主机

PoC 完全在目标上运行。符号链接和 payload 都在本地创建。这使 PoC 保持自包含且可复现,无需任何网络配置。


用法

chmod +x link.sh
./link.sh

通过环境变量进行可选调整:

sudo CONTENT="test content" ./link.sh

CONTENT 设置通过符号链接写入的内容。默认是 hello。

预期输出

[*] System information:
ProductName:        macOS
ProductVersion:     26.4
BuildVersion:       25E246

[*] Setup...
    Symlink:  /Users/nerd/cve-poc/target → /Users/nerd/cve-poc/real

[*] Build .pkg...
    Payload:  /Users/nerd/cve-poc/payload/Users/nerd/cve-poc/target/poc.txt
    Package:  /Users/nerd/cve-poc/poc.pkg

[*] Install (password prompt expected)...
installer: Package name is poc
installer: Installing at base path /
installer: The install was successful.

[✓] VULNERABILITY CONFIRMED
    Landed at /Users/nerd/cve-poc/real/poc.txt
    Owner:   root:wheel
    Content: hello

CVE-2026-28912 trigger SUCCESSFUL

补丁验证

在已修补的系统(26.6)上,相同的 PoC 会失败:

[✗] Not triggered
No file was created in /Users/nerd/cve-poc/real/

反汇编比较见 docs/PATCH_DIFF.md。


.pkg 注意事项(用于复现)

PoC 中的两个细节是在开发过程中发现的,记录在此,以便构建类似工具的人不会遇到它们:

  1. 符号链接必须位于安装器遍历的路径组件处。目标叶子处的文件级符号链接会被 renamex_np 替换;只有路径中间的目录符号链接会被跟随。

  2. payload 路径必须镜像目标路径。使用 pkgbuild --install-location / 时,payload 路径是目标路径去掉开头的 /。如果它们不匹配,安装器永远不会遍历符号链接。

两者都记录在 docs/ANALYSIS.md 中。


关于为什么密码不是缓解措施的说明

CVE-2026-28912 需要用户密码才能以 root 运行安装器。该密码用于安装,而不是用于符号链接写入。用户授权写入 $HOME/cve-poc/target/,而漏洞将写入重定向到符号链接指向的任何位置。这两个路径不同,用户永远不会看到差异。


致谢

  • 原始发现: Matej Moravec (@MacejkoMoravec)
  • 独立分析与 PoC: jvidhan
  • 参考: Apple 的公告和已修补的二进制文件作为与易受攻击版本比较的基线。

免责声明

本仓库仅供防御性安全研究和教育使用。

  • 它旨在用于您拥有或已获得明确书面许可测试的系统。
  • 对您不拥有或控制的系统使用此工具可能违反当地、国家或国际法律。
  • 作者对由此代码造成的任何误用或损害不承担任何责任或义务。
  • PoC 仅限于演示符号链接跟随写入。它不实现代码执行、权限提升或字节级内存泄漏。任何关于此 PoC 可实现 RCE 或完整内存泄露的说法均不受所包含分析的支持。
  • PoC 默认使用 $HOME/cve-poc/real/,绝不触碰 /etc/、/Library/ 或任何系统路径。对目标路径的任何修改都是用户自己的决定。
  • Apple、macOS、XNU、PackageKit 和 installers 是 Apple Inc. 的商标。本项目与 Apple 无关联,也未得到 Apple 的认可。

许可证

MIT。见 LICENSE。

下载工具