Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-20700 | Kitploit
أدوات/GitHubGitHub/r3n3r0/cve-2026-20700
تحليل الثغرات الأمنيةالاستغلالالهندسة العكسيةشيل كودCTFأمن الأجهزةالأوراق والأبحاثالتعلم والتعليمتطوير الحمولاتاستغلال الملفات الثنائيةمختبرات وتدريب عملي
103منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
GitHub
r3n3r0/cve-2026-20700

CVE-2026-20700

عرض المستودع

dyld-signing-oracle-poc

استكشاف مُتحكَّم فيه لآليات ربط page-in والتصليح السلسلي (chained fixup) في dyld باعتبارها نبيء توقيع PAC، في سياق CVE-2026-20700.

على arm64e، تكون كل مؤشرات الدوال مُوثَّقة عبر العتاد. الهدف هنا هو إظهار أن dyld نفسه يمكن توجيهه — عبر ملف Mach-O مُصنَّع يدويًا — لإنتاج مؤشرات صالحة لـ PAC في خانات يختارها المهاجم، دون استخدام أي شيء سوى آلية التصليح العادية الخاصة به.

اختُبر على: iPhone 14 (iOS 18.5, arm64e).


ما الذي يبيّنه هذا

  1. ربط تصليح سلسلي مُتحكَّم فيه — يقبل dyld مكتبة dylib بصيغة Mach-O مُصنَّعة يدويًا ويكتب مؤشرات دوال صالحة لـ PAC في خانات مختارة داخل __DATA الخاصة به.
  2. تعطل حتمي في fixupPage64 — قيم page_start / next التالفة تُخرج dyld خارج حدود الصفحة، مما يُثبت قابلية الوصول إلى الفرع.
  3. تنفيذ عبر حلقة أحداث Dispatch — يُسجَّل المؤشر الصالح لـ PAC الذي كتبه dyld كمعالج مؤقّت من نوع dispatch_source_t ويُستدعى طبيعيًا عبر حلقة الأحداث، دون أي استدعاء مباشر من كود PoC.

بنية المستودع

root@kitploit:~
dyld-signing-oracle-poc/
├── Makefile                        ← orchestrates the full pipeline
├── src/
│   └── launcher.c                  ← iOS launcher (2 threads + dispatch chain-close)
├── generators/
│   ├── gen_exports.py              ← generates exports.c  (N dummy symbols)
│   ├── gen_client.py               ← generates client.c  (N imports, dyld gate stress)
│   └── gen_malformed_dylib.py      ← generates libmalformed.dylib (hand-crafted Mach-O)
├── tools/
│   ├── scan_pointers.py            ← classifies Mach-O pointer sections as W/R
│   └── inspect_fixups.py           ← parses LC_DYLD_CHAINED_FIXUPS header
└── blog/
    ├── it/
    │   └── dyld-signing-oracle.md  ← write-up completo in italiano
    └── en/
        └── dyld-signing-oracle.md  ← full write-up in English

مخرجات البناء (غير مُضمَّنة في المستودع)


المتطلبات

  • نظام macOS مزوَّد بأدوات سطر الأوامر الخاصة بـ Xcode
  • حزمة iOS SDK (xcrun --sdk iphoneos --show-sdk-path)
  • Python 3
  • لاختبار الجهاز: Sideloadly أو شهادة مطوّر + ملف توفير (provisioning profile)

البناء

root@kitploit:~
# Default full build (arm64, 99k symbols)
make

# Fast build for iteration
make SYMBOLS=10000

الإعدادات المسبقة

root@kitploit:~
# Deterministic crash in fixupPage64 (branch reachability proof)
make stress

# Stable intra-image write-what-where
make exploit

# dyld writes PAC-valid pointer → dispatch calls it naturally
make chain_close

أدوات التحليل

root@kitploit:~
# Verify generated chained-fixup blob layout
make verify

# Parse LC_DYLD_CHAINED_FIXUPS header of libmalformed.dylib
make inspect

# Scan pointer sections (GOT/non-lazy) across compiled binaries
make scan

المعاملات القابلة للضبط


التثبيت على الجهاز

root@kitploit:~
# Ad-hoc signed (Sideloadly)
make chain_close
# drag PoCApp.ipa into Sideloadly

# Real certificate
make resign IDENTITY="iPhone Developer: ..." PROFILE=embedded.mobileprovision

# Monitor logs
idevicesyslog | grep "POC"

كيف يعمل

ترتيب التحميل أثناء التشغيل داخل PoCApp:

  1. libexports.dylib — يُحمَّل أولًا (RTLD_GLOBAL)، ويوفّر write_target_value وattacker_hook لأي dlopen لاحق.
  2. libclient.dylib — يُحمَّل بواسطة الخيط B (مكدس 128KB)؛ نحو 99 ألف هدف ربط يضغطون على بوابة ربط page-in في dyld.
  3. libmalformed.dylib — يُحمَّل بواسطة الخيط A؛ سلسلة تصليح سلسلية مُصنَّعة يدويًا تجعل dyld يحل _write_target_value ويكتبه (واختياريًا _attacker_hook) في __DATA+0x10 / +0x20.
  4. يقرأ الخيط A الخانات المكتوبة، ويتحقق من قيم canary، ثم يستدعي مؤشر الدالة الذي كتبه dyld.
  5. في وضع chain_close، يسجّل الخيط الرئيسي __DATA+0x20 كمعالج مؤقّت من نوع — وتستدعيه حلقة الأحداث بعد ثانية واحدة دون أي استدعاء مباشر من كود PoC.

المدوّنة

شرح تقني كامل باللغتين الإيطالية والإنجليزية. يغطي: آليات عتاد PAC، وdyld بوصفه منتِجًا للمؤشرات، وترميز التصليح السلسلي من الصفر، وآليات بوابة ربط page-in، ومزالق هندسة Mach-O (sizeofcmds، عدد المقاطع، والخطوة stride)، وتخطيط بيانات مُتحقق منه عبر canary، وبوابة 99 ألف رمز، وإثبات الوصولية من خلال التعطل، وبدائية مستقرة داخل الصورة نفسها، ومفهوم نبيء التوقيع على arm64e، وإغلاق سلسلة مؤقّت dispatch.

  • 🇮🇹 Italiano — blog/it/dyld-signing-oracle.md
  • 🇬🇧 English — blog/en/dyld-signing-oracle.md
تنزيل الأداة
الملفمُولَّد بواسطة
exports.cgenerators/gen_exports.py + رموز Makefile الحارسة
client.cgenerators/gen_client.py
libmalformed.dylibgenerators/gen_malformed_dylib.py
libexports.dylibclang من exports.c
libclient.dylibclang من client.c
PoCAppclang من src/launcher.c
PoCApp.ipaخطوة package في Makefile
المتغيرالافتراضيالوصف
SYMBOLS99000عدد أهداف الربط في libclient (أقل من 100k لبوابة ما قبل 26.3، وأقل من 64k للإصدار 26.3+)
STACK_KB128حجم مكدس خيط العامل بالكيلوبايت
BURN_KB0كمية المكدس بالكيلوبايت التي يجب استهلاكها قبل dlopen (0 = تلقائي)
MARGIN_KB24هامش الاستهلاك التلقائي
ARM64E0استخدام تنسيق DYLD_CHAINED_PTR_ARM64E_USERLAND24
MALFORM_PAGEIN0تفعيل سلسلة page-in التالفة
MALFORM_TARGET_OFFSET—الإزاحة المستهدفة داخل __DATA (مثل 0x10)
CHAIN_CLOSE0الخانة الثانية ← _attacker_hook، تفعيل عرض dispatch التوضيحي
dispatch_source_t