Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-20700 | Kitploit
Tools/GitHubGitHub/r3n3r0/cve-2026-20700
SchwachstellenanalyseExploitationReverse EngineeringShellcodeCTFHardware-SicherheitPapers & ForschungLernen & BildungPayload-EntwicklungBinary-ExploitationLabs & Praxis
103vor 2 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHub
r3n3r0/cve-2026-20700

CVE-2026-20700

Repository anzeigen

dyld-signing-oracle-poc

Eine kontrollierte Untersuchung der Page-in-Linking- und Chained-Fixup-Mechanik von dyld als PAC-Signing-Orakel im Kontext von CVE-2026-20700.

Auf arm64e ist jeder Funktionszeiger hardware-authentifiziert. Das Ziel hier ist zu zeigen, dass dyld selbst — durch ein handgefertigtes Mach-O — dazu gebracht werden kann, PAC-gültige Zeiger in vom Angreifer gewählte Slots zu erzeugen, und zwar nur mit seinem eigenen normalen Fixup-Mechanismus.

Getestet auf: iPhone 14 (iOS 18.5, arm64e).


Was dies demonstriert

  1. Kontrollierter Chained-Fixup-Bind — dyld akzeptiert ein handgefertigtes Mach-O-Dylib und schreibt PAC-gültige Funktionszeiger in gewählte Slots im eigenen __DATA.
  2. Deterministischer Absturz in fixupPage64 — fehlerhafte page_start-/next-Werte treiben dyld über die Seitengrenze hinaus, was die Branch-Erreichbarkeit beweist.
  3. Dispatch-Event-Loop-Ausführung — der von dyld geschriebene PAC-gültige Zeiger wird als dispatch_source_t-Timer-Handler registriert und auf natürliche Weise über die Event-Loop aufgerufen, ohne direkten Aufruf aus dem PoC-Code.

Repository-Struktur

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

Build-Ausgaben (nicht committet)


Voraussetzungen

  • macOS mit Xcode-Command-Line-Tools
  • iOS SDK (xcrun --sdk iphoneos --show-sdk-path)
  • Python 3
  • Für Gerätetests: Sideloadly oder ein Entwicklerzertifikat + Provisioning-Profil

Build

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

# Fast build for iteration
make SYMBOLS=10000

Voreinstellungen

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

Analysetools

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

Einstellbare Parameter


Installation auf dem Gerät

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"

So funktioniert es

Ladereihenfolge zur Laufzeit innerhalb von PoCApp:

  1. libexports.dylib — wird zuerst geladen (RTLD_GLOBAL) und stellt write_target_value und attacker_hook für jedes spätere dlopen bereit.
  2. libclient.dylib — wird von Thread B (128-KB-Stack) geladen; ~99k Bind-Ziele belasten das Page-in-Linking-Gate von dyld.
  3. libmalformed.dylib — wird von Thread A geladen; eine handgefertigte Chained-Fixup-Kette veranlasst dyld, _write_target_value (und optional _attacker_hook) in __DATA+0x10 / +0x20 aufzulösen und zu schreiben.
  4. Thread A liest die geschriebenen Slots, validiert die Canaries und ruft den Funktionszeiger auf, den dyld geschrieben hat.
  5. Im chain_close-Modus registriert main als -Timer-Handler — die Event-Loop ruft ihn 1 Sekunde später auf, ohne direkten Aufruf aus dem PoC-Code.

Blog

Vollständiger technischer Artikel auf Italienisch und Englisch. Behandelt: PAC-Hardware-Mechanik, dyld als Zeiger-Produzent, Chained-Fixup-Kodierung von Grund auf, Mechanik des Page-in-Linking-Gates, Mach-O-Engineering-Fallstricke (sizeofcmds, Sektionsanzahl, Stride), Canary-validiertes Datenlayout, das 99k-Symbol-Gate, Absturzbeweis der Erreichbarkeit, stabile Intra-Image-Primitive, das arm64e-Signing-Orakel-Konzept, Dispatch-Timer-Chain-Close.

  • 🇮🇹 Italiano — blog/it/dyld-signing-oracle.md
  • 🇬🇧 English — blog/en/dyld-signing-oracle.md
Tool herunterladen
DateiErzeugt durch
exports.cgenerators/gen_exports.py + Makefile-Sentinel-Symbole
client.cgenerators/gen_client.py
libmalformed.dylibgenerators/gen_malformed_dylib.py
libexports.dylibclang aus exports.c
libclient.dylibclang aus client.c
PoCAppclang aus src/launcher.c
PoCApp.ipaMakefile-package-Schritt
VariableStandardBeschreibung
SYMBOLS99000Anzahl der Bind-Ziele in libclient (< 100k für Pre-26.3-Gate, < 64k für 26.3+)
STACK_KB128Stackgröße des Worker-Threads in KB
BURN_KB0Zu verbrauchende Stack-KB vor dlopen (0 = automatisch)
MARGIN_KB24Marge für den automatischen Burn
ARM64E0DYLD_CHAINED_PTR_ARM64E_USERLAND24-Format verwenden
MALFORM_PAGEIN0Fehlerhafte Page-in-Kette aktivieren
MALFORM_TARGET_OFFSET—Ziel-Offset innerhalb __DATA (z. B. 0x10)
CHAIN_CLOSE0Zweiter Slot → _attacker_hook, Dispatch-Demo aktivieren
__DATA+0x20
dispatch_source_t