Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-20700 | Kitploit
Herramientas/GitHubGitHub/r3n3r0/cve-2026-20700
Análisis de VulnerabilidadesExplotaciónIngeniería InversaShellcodeCTFSeguridad de HardwarePapers e InvestigaciónAprendizaje y EducaciónDesarrollo de PayloadsExplotación de BinariosLabs y Práctica
103hace 2 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHub
r3n3r0/cve-2026-20700

CVE-2026-20700

Ver Repositorio

dyld-signing-oracle-poc

Una exploración controlada del mecanismo de vinculación durante el page-in de dyld y de los chained fixups como oráculo de firma PAC, en el contexto de CVE-2026-20700.

En arm64e, cada puntero a función está autenticado por hardware. El objetivo aquí es demostrar que se puede dirigir al propio dyld — mediante un Mach-O manipulado artesanalmente — para que produzca punteros válidos para PAC en ranuras elegidas por el atacante, usando únicamente su propio mecanismo normal de fixup.

Probado en: iPhone 14 (iOS 18.5, arm64e).


Qué demuestra esto

  1. Bind controlado mediante chained fixups — dyld acepta un dylib Mach-O manipulado artesanalmente y escribe punteros a función válidos para PAC en ranuras elegidas dentro de su propio __DATA.
  2. Bloqueo determinista en fixupPage64 — los valores malformados de page_start / next sacan a dyld de los límites de la página, demostrando la alcanzabilidad de la rama.
  3. Ejecución del bucle de eventos de dispatch — el puntero válido para PAC escrito por dyld se registra como manejador de temporizador dispatch_source_t y el bucle de eventos lo invoca de forma natural, sin que el código del PoC lo llame directamente.

Estructura del repositorio

root@kitploit:~
dyld-signing-oracle-poc/
├── Makefile                        ← orquesta el pipeline completo
├── src/
│   └── launcher.c                  ← lanzador para iOS (2 hilos + cierre de cadena de *dispatch*)
├── generators/
│   ├── gen_exports.py              ← genera exports.c  (N símbolos dummy)
│   ├── gen_client.py               ← genera client.c  (N importaciones, estrés en la compuerta de dyld)
│   └── gen_malformed_dylib.py      ← genera libmalformed.dylib (Mach-O manipulado artesanalmente)
├── tools/
│   ├── scan_pointers.py            ← clasifica las secciones de punteros del Mach-O como W/R
│   └── inspect_fixups.py           ← analiza el encabezado de LC_DYLD_CHAINED_FIXUPS
└── blog/
    ├── it/
    │   └── dyld-signing-oracle.md  ← write-up completo in italiano
    └── en/
        └── dyld-signing-oracle.md  ← write-up completo en inglés

Salidas de compilación (no incluidas en el repositorio)


Requisitos

  • macOS con las herramientas de línea de comandos de Xcode
  • SDK de iOS (xcrun --sdk iphoneos --show-sdk-path)
  • Python 3
  • Para probar en dispositivo: Sideloadly o un certificado de desarrollador + perfil de aprovisionamiento

Compilación

root@kitploit:~
# Compilación completa predeterminada (arm64, 99k símbolos)
make

# Compilación rápida para iterar
make SYMBOLS=10000

Modos predefinidos

root@kitploit:~
# Bloqueo determinista en fixupPage64 (prueba de alcanzabilidad de la rama)
make stress

# Escritura estable write-what-where dentro de la misma imagen
make exploit

# dyld escribe un puntero válido para PAC → dispatch lo invoca de forma natural
make chain_close

Herramientas de análisis

root@kitploit:~
# Verificar el diseño del blob de chained fixups generado
make verify

# Analizar el encabezado LC_DYLD_CHAINED_FIXUPS de libmalformed.dylib
make inspect

# Escanear secciones de punteros (GOT/no perezosas) en los binarios compilados
make scan

Parámetros ajustables


Instalación en el dispositivo

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

# Con certificado real
make resign IDENTITY="iPhone Developer: ..." PROFILE=embedded.mobileprovision

# Supervisar registros
idevicesyslog | grep "POC"

Cómo funciona

Orden de carga en tiempo de ejecución dentro de PoCApp:

  1. libexports.dylib — se carga primero (RTLD_GLOBAL), proporciona write_target_value y attacker_hook a cualquier dlopen posterior.
  2. libclient.dylib — lo carga el Hilo B (pila de 128KB); ~99k objetivos de bind someten a estrés la compuerta de vinculación por page-in de dyld.
  3. libmalformed.dylib — lo carga el Hilo A; la cadena de chained fixups manipulada artesanalmente hace que dyld resuelva y escriba _write_target_value (y opcionalmente _attacker_hook) en __DATA+0x10 / +0x20.
  4. El Hilo A lee las ranuras escritas, valida los canarios y llama al puntero a función que escribió dyld.
  5. En el modo chain_close, el hilo principal registra __DATA+0x20 como manejador de temporizador — el bucle de eventos lo invoca 1 segundo después sin que el código del PoC lo llame directamente.

Blog

Artículo técnico completo en italiano e inglés. Cubre: mecánica del hardware PAC, dyld como productor de punteros, codificación de chained fixups desde cero, mecánica de la compuerta de vinculación por page-in, dificultades de ingeniería del Mach-O (sizeofcmds, número de secciones, stride), diseño de datos validado con canarios, la compuerta de los 99k símbolos, prueba de bloqueo y alcanzabilidad, primitiva estable dentro de la misma imagen, concepto de oráculo de firma en arm64e y cierre de la cadena con temporizador de dispatch.

  • 🇮🇹 Italiano — blog/it/dyld-signing-oracle.md
  • 🇬🇧 English — blog/en/dyld-signing-oracle.md
Descargar herramienta
ArchivoGenerado por
exports.cgenerators/gen_exports.py + símbolos centinela del Makefile
client.cgenerators/gen_client.py
libmalformed.dylibgenerators/gen_malformed_dylib.py
libexports.dylibclang desde exports.c
libclient.dylibclang desde client.c
PoCAppclang desde src/launcher.c
PoCApp.ipapaso package del Makefile
VariableValor por defectoDescripción
SYMBOLS99000Número de objetivos de bind en libclient (< 100k para la compuerta anterior a 26.3, < 64k para 26.3+)
STACK_KB128Tamaño de pila del hilo de trabajo en KB
BURN_KB0KB de pila a consumir antes de dlopen (0 = automático)
MARGIN_KB24Margen de consumo automático de pila
ARM64E0Usar el formato DYLD_CHAINED_PTR_ARM64E_USERLAND24
MALFORM_PAGEIN0Habilitar cadena de page-in malformada
MALFORM_TARGET_OFFSET—Desplazamiento objetivo dentro de __DATA (p. ej. 0x10)
CHAIN_CLOSE0Segunda ranura → _attacker_hook, habilitar la demo de dispatch
dispatch_source_t