Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-20700 — PoC demonstrando o dyld como um oráculo de assinatura PAC por meio de fixups encadeados Mach-O criados manualmente em arm64e, alcançando gravações controladas de ponteiros válidos para PAC e execução de callbacks de despacho no iOS. | Kitploit
Ferramentas/GitHubGitHub/r3n3r0/cve-2026-20700
Análise de VulnerabilidadesExploraçãoEngenharia ReversaShellcodeCTFSegurança de HardwarePapers e PesquisaAprendizado e EducaçãoDesenvolvimento de PayloadsExploração de BináriosLabs e Prática
1036há 3 mesesAinda não revisado
GitHub
r3n3r0/cve-2026-20700

CVE-2026-20700

PoC demonstrando o dyld como um oráculo de assinatura PAC por meio de fixups encadeados Mach-O criados manualmente em arm64e, alcançando gravações controladas de ponteiros válidos para PAC e execução de callbacks de despacho no iOS.

Ver Repositório

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

dyld-signing-oracle-poc

Uma exploração controlada da maquinaria de page-in linking e chained fixup do dyld como um oráculo de assinatura PAC, no contexto do CVE-2026-20700.

No arm64e, todo ponteiro de função é autenticado por hardware. O objetivo aqui é mostrar que o próprio dyld pode ser direcionado — por meio de um Mach-O artesanal — para produzir ponteiros válidos de PAC em slots escolhidos pelo atacante, usando nada além do seu próprio mecanismo normal de fixup.

Testado em: iPhone 14 (iOS 18.5, arm64e).


O que isto demonstra

  1. Bind de chained-fixup controlado — o dyld aceita um dylib Mach-O artesanal e escreve ponteiros de função válidos de PAC em slots escolhidos no seu próprio __DATA.
  2. Crash determinístico em fixupPage64 — valores malformados de page_start / next conduzem o dyld para fora do limite da página, provando a alcançabilidade do branch.
  3. Execução no loop de eventos do Dispatch — o ponteiro válido de PAC escrito pelo dyld é registrado como um handler de timer dispatch_source_t e chamado naturalmente pelo loop de eventos, sem invocação direta do código PoC.

Estrutura do repositório

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

Saídas do build (não commitadas)

ArquivoGerado por
exports.cgenerators/gen_exports.py + símbolos sentinela do Makefile
client.cgenerators/gen_client.py
libmalformed.dylibgenerators/gen_malformed_dylib.py
libexports.dylibclang de exports.c
libclient.dylibclang de client.c
PoCAppclang de src/launcher.c
PoCApp.ipaetapa package do Makefile

Requisitos

  • macOS com as ferramentas de linha de comando do Xcode
  • iOS SDK (xcrun --sdk iphoneos --show-sdk-path)
  • Python 3
  • Para testes em dispositivo: Sideloadly ou um certificado de desenvolvedor + perfil de provisionamento

Compilação

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

# Fast build for iteration
make SYMBOLS=10000

Predefinições

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

Ferramentas de análise

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

Parâmetros ajustáveis

VariávelPadrãoDescrição
SYMBOLS99000Número de alvos de bind no libclient (< 100k para gate pré-26.3, < 64k para 26.3+)
STACK_KB128Tamanho da pilha da thread de trabalho em KB
BURN_KB0KB de pilha a consumir antes de dlopen (0 = automático)
MARGIN_KB24Margem de auto-burn
ARM64E0Usar o formato DYLD_CHAINED_PTR_ARM64E_USERLAND24
MALFORM_PAGEIN0Ativar a cadeia de page-in malformada
MALFORM_TARGET_OFFSET—Offset alvo dentro de __DATA (ex.: 0x10)
CHAIN_CLOSE0Segundo slot → _attacker_hook, habilitar a demo do dispatch

Instalação no dispositivo

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"

Como funciona

Ordem de carregamento em tempo de execução dentro de PoCApp:

  1. libexports.dylib — carregado primeiro (RTLD_GLOBAL), fornece write_target_value e attacker_hook a qualquer dlopen subsequente.
  2. libclient.dylib — carregado pela Thread B (pilha de 128KB); ~99k alvos de bind estressam o gate de page-in linking do dyld.
  3. libmalformed.dylib — carregado pela Thread A; a cadeia de chained-fixup artesanal faz o dyld resolver e escrever _write_target_value (e opcionalmente _attacker_hook) em __DATA+0x10 / +0x20.
  4. A Thread A lê os slots escritos, valida os canários, e chama o ponteiro de função que o dyld escreveu.
  5. No modo chain_close, a main registra __DATA+0x20 como um handler de timer dispatch_source_t — o loop de eventos o chama 1 segundo depois, sem invocação direta do código PoC.

Blog

Artigo técnico completo em italiano e inglês. Abrange: mecânica de hardware do PAC, dyld como produtor de ponteiros, codificação de chained-fixup do zero, mecânica do gate de page-in linking, armadilhas de engenharia de Mach-O (sizeofcmds, contagem de seções, stride), layout de dados validado por canários, o gate de 99k símbolos, prova de alcançabilidade por crash, primitiva intra-imagem estável, conceito de oráculo de assinatura arm64e, chain-close via timer do dispatch.

  • 🇮🇹 Italiano — blog/it/dyld-signing-oracle.md
  • 🇬🇧 Inglês — blog/en/dyld-signing-oracle.md
Baixar ferramenta