Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cve-2026-28912 — macOS PackageKit のシンボリックリンク追跡バグ(CVE-2026-28912)に関するリバースエンジニアリングノートと動作する PoC。26.6 修正の逆アセンブリ差分付き。 | Kitploit
ツール/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)の独立したリバースエンジニアリング、およびインストール先パス内のディレクトリシンボリックリンクを通じて、攻撃者が制御するファイルを root 権限でインストーラに書き込ませることを実証する動作する PoC を収録しています。

このバグは PKCoreShove のファイル再リンク処理における非同期なパス走査です。悪意のある .pkg は、非特権ディレクトリ内の宛先パスを宣言し、パスコンポーネントの1つに特権的な場所を指すディレクトリシンボリックリンクを配置することで、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 のアドバイザリによる元の発見者

この記事が存在する理由

CVE-2026-28912 に関する Apple のアドバイザリは、影響と修正バージョンを文書化しています。しかし、技術的なメカニズムについては文書化していません:

  • 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

_linkResolutionProhibitted は、呼び出し元プロセスが SIP ファイルを変更できない場合 — ユーザーが開始したインストールの通常のケース — に 0(false)を返します。これにより RENAME_NOFOLLOW_ANY が無効になり、rename が宛先パス内の任意のシンボリックリンクを追跡します。

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 の逆アセンブリ差分
  • 脆弱なフィールドの特定:非 SIP 変更プロセスに対して 0 を返す _linkResolutionProhibitted
  • 修正の特定:PKBundleComponent に追加された _PKSIPOpenPathSafely、コンポーネントごとの 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. $HOME/cve-poc/target/poc.txt にファイルを宣言するペイロードを持つ .pkg をビルドする
    3. sudo installer でインストールする
    4. ファイルが root:wheel 所有権で $HOME/cve-poc/real/poc.txt に配置されたことを検証する

この PoC が実証するもの

  • 非特権ディレクトリの下にファイルを宣言する .pkg ペイロード
  • そのパスにあるディレクトリシンボリックリンクをインストーラが追跡すること
  • 宣言された宛先の外に root 所有のファイルが作成されること
  • fs_usage による書き込みのライブキャプチャ

この PoC が実証しないもの

  • 宛先のファイルレベルのシンボリックリンク。ファイルシンボリックリンクは renamex_np によって置き換えられ、追跡されません — 書き込みはパス内のディレクトリシンボリックリンクを通じて行われる必要があります。
  • コード実行、権限昇格、または被害者上でのシェル
  • 兵器化:PoC はデフォルトで $HOME/cve-poc/real/ を使用し、/etc/sudoers.d/ や /Library/LaunchDaemons/ は使用しません

実証された影響はシンボリックリンク追跡プリミティブです — これは 26.6 の修正が塞ぐ正確な動作です。


要件

ターゲット(被害者)ホスト

  • macOS Tahoe 26.5 以前(脆弱な PackageKit)
  • pkgbuild、installer、fs_usage
  • root(インストーラ用)

別途攻撃者ホストは不要

PoC は完全にターゲット上で実行されます。シンボリックリンクとペイロードは両方ともローカルで作成されます。これにより、ネットワーク設定なしで 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 の2つの詳細は開発中に発見され、同様のツールを構築する他の人が同じ問題に遭遇しないよう、ここに文書化されています:

  1. シンボリックリンクはインストーラが走査するパスコンポーネントに配置する必要があります。宛先リーフのファイルレベルのシンボリックリンクは renamex_np によって置き換えられます。パスの途中にあるディレクトリシンボリックリンクのみが追跡されます。

  2. ペイロードパスは宛先パスをミラーする必要があります。pkgbuild --install-location / では、ペイロードパスは先頭の / を除いた宛先パスです。それらが一致しない場合、インストーラはシンボリックリンクを通じて走査しません。

どちらも docs/ANALYSIS.md に文書化されています。


なぜパスワードが緩和策ではないかについての注記

CVE-2026-28912 は、インストーラを root として実行するためにユーザーのパスワードを必要とします。そのパスワードはインストールのためのものであり、シンボリックリンク書き込みのためのものではありません。ユーザーは $HOME/cve-poc/target/ への書き込みを承認し、脆弱性は書き込みをシンボリックリンクが指す先へリダイレクトします。2つのパスは異なり、ユーザーはその違いを見ることはありません。


クレジット

  • 元の発見: Matej Moravec (@MacejkoMoravec)
  • 独立した分析と PoC: jvidhan
  • 参考: Apple のアドバイザリと修正済みバイナリが、脆弱なバージョンとの比較のベースラインとして機能しました。

免責事項

このリポジトリは、防御的なセキュリティ研究と教育のみを目的として提供されています。

  • これは、あなたが所有する、またはテストする明示的な書面による許可を得ているシステムに対して使用することを意図しています。
  • あなたが所有または管理していないシステムに対してこのツールを使用することは、地域、国内、または国際法に違反する可能性があります。
  • 著者は、このコードによる誤用または損害に対して一切の責任を負いません。
  • PoC はシンボリックリンク追跡書き込みの実証に限定されています。コード実行、権限昇格、またはバイトレベルのメモリリークを達成するものではありません。この PoC からの RCE または完全なメモリ開示の主張は、含まれる分析によって裏付けられていません。
  • PoC はデフォルトで $HOME/cve-poc/real/ を使用し、/etc/、/Library/、またはいかなるシステムパスにも触れません。ターゲットパスの変更はユーザー自身の判断です。
  • Apple、macOS、XNU、PackageKit、およびインストーラは Apple Inc. の商標です。このプロジェクトは Apple と提携しておらず、承認も受けていません。

ライセンス

MIT。LICENSE を参照してください。

ツールをダウンロード