Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-20700 — PoC che dimostra dyld come oracolo di firma PAC tramite fixup concatenati Mach-O creati manualmente su arm64e, ottenendo scritture di puntatori PAC-validi controllate ed esecuzione di callback di dispatch su iOS. | Kitploit
Strumenti/GitHubGitHub/r3n3r0/cve-2026-20700
Analisi delle VulnerabilitàExploitReverse EngineeringShellcodeCTFSicurezza HardwarePaper e RicercaApprendimento e FormazioneSviluppo PayloadBinary ExploitationLab e Pratica
10363 mesi faNon ancora revisionato
GitHub
r3n3r0/cve-2026-20700

CVE-2026-20700

PoC che dimostra dyld come oracolo di firma PAC tramite fixup concatenati Mach-O creati manualmente su arm64e, ottenendo scritture di puntatori PAC-validi controllate ed esecuzione di callback di dispatch su iOS.

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

dyld-signing-oracle-poc

Un'esplorazione controllata del meccanismo di page-in linking e chained fixup di dyld come oracolo di firma PAC, nel contesto di CVE-2026-20700.

Su arm64e, ogni puntatore a funzione è autenticato via hardware. L'obiettivo qui è dimostrare che dyld stesso può essere guidato — tramite un Mach-O realizzato a mano — a produrre puntatori validi per PAC in slot scelti dall'attaccante, usando nient'altro che il suo normale meccanismo di fixup.

Testato su: iPhone 14 (iOS 18.5, arm64e).


Cosa dimostra

  1. Bind controllato tramite chained fixup — dyld accetta una dylib Mach-O realizzata a mano e scrive puntatori a funzione validi per PAC in slot scelti all'interno del proprio __DATA.
  2. Crash deterministico in fixupPage64 — valori malformati di page_start / next spingono dyld fuori dal confine di pagina, dimostrando la raggiungibilità del branch.
  3. Esecuzione tramite event loop di dispatch — il puntatore valido per PAC scritto da dyld viene registrato come handler di timer dispatch_source_t e chiamato naturalmente attraverso l'event loop, senza invocazione diretta dal codice del PoC.

Struttura del repository

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

Output di build (non committati)

FileGenerato da
exports.cgenerators/gen_exports.py + simboli sentinella del Makefile
client.cgenerators/gen_client.py
libmalformed.dylibgenerators/gen_malformed_dylib.py
libexports.dylibclang da exports.c
libclient.dylibclang da client.c
PoCAppclang da src/launcher.c
PoCApp.ipastep package del Makefile

Requisiti

  • macOS con gli strumenti da riga di comando di Xcode
  • SDK iOS (xcrun --sdk iphoneos --show-sdk-path)
  • Python 3
  • Per i test su dispositivo: Sideloadly oppure un certificato sviluppatore + provisioning profile

Compilazione

root@kitploit:~
# Build completo predefinito (arm64, 99k simboli)
make

# Build rapida per iterazione
make SYMBOLS=10000

Preset

root@kitploit:~
# Crash deterministico in fixupPage64 (prova di raggiungibilità del branch)
make stress

# Write-what-where stabile intra-immagine
make exploit

# dyld scrive un puntatore valido per PAC → dispatch lo chiama naturalmente
make chain_close

Strumenti di analisi

root@kitploit:~
# Verifica il layout del blob di chained fixup generato
make verify

# Analizza l'header LC_DYLD_CHAINED_FIXUPS di libmalformed.dylib
make inspect

# Scansiona le sezioni puntatore (GOT/non-lazy) nei binari compilati
make scan

Parametri

VariabileDefaultDescrizione
SYMBOLS99000Numero di bind target in libclient (< 100k per il gate pre-26.3, < 64k per 26.3+)
STACK_KB128Dimensione dello stack dei thread worker in KB
BURN_KB0KB di stack da consumare prima di dlopen (0 = automatico)
MARGIN_KB24Margine per il burn automatico
ARM64E0Usa il formato DYLD_CHAINED_PTR_ARM64E_USERLAND24
MALFORM_PAGEIN0Abilita la catena page-in malformata
MALFORM_TARGET_OFFSET—Offset target all'interno di __DATA (es. 0x10)
CHAIN_CLOSE0Secondo slot → _attacker_hook, abilita la demo dispatch

Installazione sul dispositivo

root@kitploit:~
# Firma ad-hoc (Sideloadly)
make chain_close
# trascina PoCApp.ipa in Sideloadly

# Certificato reale
make resign IDENTITY="iPhone Developer: ..." PROFILE=embedded.mobileprovision

# Monitora i log
idevicesyslog | grep "POC"

Come funziona

Ordine di caricamento a runtime all'interno di PoCApp:

  1. libexports.dylib — caricata per prima (RTLD_GLOBAL), fornisce write_target_value e attacker_hook a qualsiasi successiva dlopen.
  2. libclient.dylib — caricata dal Thread B (stack da 128KB); ~99k bind target mettono sotto stress il gate di page-in linking di dyld.
  3. libmalformed.dylib — caricata dal Thread A; la catena chained-fixup realizzata a mano fa sì che dyld risolva e scriva _write_target_value (e opzionalmente _attacker_hook) in __DATA+0x10 / +0x20.
  4. Il Thread A legge gli slot scritti, valida i canary e chiama il puntatore a funzione scritto da dyld.
  5. In modalità chain_close, il main registra __DATA+0x20 come handler di timer dispatch_source_t — l'event loop lo chiama 1 secondo dopo, senza invocazione diretta dal codice del PoC.

Blog

Analisi tecnica completa in italiano e inglese. Copre: meccaniche hardware del PAC, dyld come produttore di puntatori, codifica dei chained fixup da zero, meccaniche del gate di page-in linking, insidie ingegneristiche del Mach-O (sizeofcmds, numero di sezioni, stride), layout dei dati validato tramite canary, il gate dei 99k simboli, crash come prova di raggiungibilità, primitiva stabile intra-immagine, concetto di oracolo di firma su arm64e, chain-close con timer dispatch.

  • 🇮🇹 Italiano — blog/it/dyld-signing-oracle.md
  • 🇬🇧 English — blog/en/dyld-signing-oracle.md
Scarica lo strumento