🚨 EXPLOIT SAMPLE — FOR SECURITY RESEARCH, VULNERABILITY ANALYSIS AND DEFENSIVE PURPOSES ONLY
🚨 MUESTRA DE EXPLOIT — SOLO PARA INVESTIGACIÓN DE SEGURIDAD, ANÁLISIS DE VULNERABILIDADES Y FINES DEFENSIVOS
This repository contains a real iOS RCE exploit kit preserved for analysis. Do not use against real devices. / Este repositorio contiene un kit de exploits iOS real preservado para análisis. No usar contra dispositivos reales.
DarkSword-RCE es un kit de exploits de Ejecución Remota de Código (RCE) dirigido a Safari/WebKit en iOS 18.4 – 18.6. Logra ejecución de código arbitrario en iPhones a través de una cadena de explotación multi-etapa que atraviesa múltiples capas de seguridad: JavaScriptCore → sandbox WebKit → proceso GPU → nivel de sistema.
El exploit está escrito íntegramente en JavaScript y se distribuye como una página web que el usuario visita sin saberlo (drive-by exploit).
| iOS | Estado | Notas |
|---|---|---|
| 18.4 | ✅ Explotable | Módulos completos (rce_module.js, rce_worker.js, sbx0_main_18.4.js) |
| 18.6 | ✅ Explotable | Módulo extendido (rce_worker_18.6.js — 514 KB, más complejo) |
| 18.6.1 | ✅ Explotable | Mismo módulo que 18.6 |
| 18.6.2 | ✅ Explotable | Mismo módulo que 18.6 |
Dispositivos objetivo: iPhone11 series, iPhone12 series (con tablas de offsets específicos por modelo)
DarkSword-RCE/
├── index.html (689 B) — Punto de entrada (iframe oculto)
├── frame.html (252 B) — Cargador del exploit desde CDN
├── rce_loader.js (7.1 KB) — Orquestador principal
├── rce_module.js (170 KB) — Primitivas de memoria (iOS 18.4)
├── rce_module_18.6.js (85 B) — Stub para iOS 18.6
├── rce_worker.js (43 KB) — Worker de explotación (iOS 18.4)
├── rce_worker_18.6.js (514 KB) — Worker de explotación (iOS 18.6)
├── sbx0_main_18.4.js (415 KB) — Escape de sandbox vía GPU (Etapa 0)
├── sbx1_main.js (311 KB) — Escape de sandbox (Etapa 1)
└── pe_main.js (761 KB) — Escalada de privilegios
Total: ~2.2 MB | 38,652 líneas
[Víctima visita URL maliciosa]
│
▼
index.html → iframe oculto → frame.html
│
▼ (carga desde CDN atacante)
rce_loader.js
├─ Detecta versión iOS (18.4 / 18.6 / 18.6.1 / 18.6.2)
├─ Detecta modelo de iPhone y offsets específicos
└─ Crea Web Worker con módulo correcto
│
▼
[ETAPA 1] rce_module.js — Primitivas de Memoria
├─ Explota internals de JavaScriptCore
├─ Crea funciones read64() y write64() via TypedArray tricks
└─ Localiza estructuras VM en el heap
│
▼
[ETAPA 2] rce_worker.js — Bypass JIT y Framework
├─ Deshabilita JIT allow-list via escrituras en offsets
├─ Manipula estructuras AVFAudio/TextToSpeech
└─ Ejecuta métodos Obj-C via objc_msgSend
│
▼
[ETAPA 3] sbx0_main_18.4.js — Escape Sandbox GPU (Etapa 0)
├─ Rompe el sandbox WebKit usando el proceso GPU
├─ Explota la infraestructura de renderizado gráfico
└─ Establece primitivas en contexto del proceso GPU
│
▼
[ETAPA 4] sbx1_main.js — Escape Sandbox GPU (Etapa 1)
├─ Calcula ASLR slide del shared cache
├─ Configura cadenas de gadgets ROP/JOP
└─ Bypass de PAC (Pointer Authentication Codes)
│
▼
[ETAPA 5] pe_main.js — Escalada de Privilegios
├─ Establece capacidad de llamada a funciones arbitrarias (fcall)
├─ Invoca APIs del kernel Mach (mach_port_allocate, mach_vm_allocate)
├─ Manipula el runtime Objective-C
└─ Logra ejecución de código sin restricciones en el dispositivo
- Detección de versión iOS vía User-Agent
- Lookup de offsets específicos por modelo de dispositivo
- Gestión de Web Workers y paso de mensajes
- Redirige a
404.htmlen caso de error (para evitar detección) - Logging/telemetría hacia servidor del atacante
- Conversiones de tipo BigInt para aritmética de punteros de 64 bits
- Primitivas de memoria:
read64(),write64(),write8(),read32() - Clase
Encoderpara serialización de mensajes IPC - Bypass de JIT allow-list mediante escrituras de offset
- Manipulación del heap para control de layout
- Explotación de ArrayBuffer/TypedArray
- Inicialización de primitivas de memoria
- Workers especializados para carga dinámica de librerías (dlopen)
- Explotación del framework TextToSpeech
- Resolución dinámica de símbolos y funciones
- Cadena de explotación más compleja que la versión 18.4
- Workers con IDs mágicos:
0xfffe000011111111,0xfffe000022222222 - Explotación del contexto gráfico
- Manipulación de NSBundle/frameworks
- Parcheo del mutex atexit
Contiene tablas masivas de offsets para múltiples iPhones:
- iPhone11,2 / iPhone11,8 / iPhone12,1 / iPhone12,3/5 / iPhone12,8
- Cada uno con 100+ offsets de memoria para:
- Clases y funciones del framework AVFAudio
- Offsets del contexto gráfico WebCore
- Estructuras de conexión del proceso GPU
- Cálculo del slide del shared cache
- Primitivas de lectura/escritura vía GPU (
gpuRead64,gpuWrite64) - Gadgets PAC (PACIA, PACIB, XPac)
- Gadgets
tcall(tail call con carga de registros) - Tablas de offsets específicas por modelo de dispositivo
- Wrappers de funciones C:
calloc,malloc,free,memcpy,syscall - APIs Mach:
mach_port_allocate,mach_vm_allocate - Runtime Objective-C:
objc_msgSend,sel_registerName - CoreFoundation: operaciones con CFDictionary, CFString, CFNumber
- Construcción de cadenas JOP para llamadas a funciones arbitrarias
- Invocación de métodos via NSInvocation
- Creación de threads NSThread con código arbitrario
| Tipo | Valor | Propósito |
|---|---|---|
| CDN atacante | static.cdncounter.net |
Distribución del exploit |
| URL loader | https://static.cdncounter.net/assets/rce_loader.js |
Módulo orquestador |
| URL 404 falsa | https://static.cdncounter.net/404.html |
Redirección en caso de error |
/usr/lib/system/libsystem_kernel.dylib
/usr/lib/system/libsystem_platform.dylib
/usr/lib/system/libsystem_pthread.dylib
rule DarkSword_iOS_RCE_Exploit {
meta:
description = "Detects DarkSword iOS RCE exploit kit"
author = "KONDORDEVSECURITYCORP"
date = "2026-03"
severity = "critical"
target = "iOS 18.4-18.6 Safari/WebKit"
strings:
$cdn = "static.cdncounter.net"
$magic1 = "0xfffe000011111111"
$magic2 = "0xfffe000022222222"
$func1 = "gpuRead64"
$func2 = "gpuWrite64"
$func3 = "rce_loader"
$pac = "noPAC"
$sbx = "sbx0_main"
condition:
2 of them
}alert dns $HOME_NET any -> any 53 (msg:"DarkSword CDN DNS Lookup"; dns.query; content:"cdncounter.net"; sid:9000010;)
alert http $HOME_NET any -> any 443 (msg:"DarkSword Exploit Load"; http.host; content:"static.cdncounter.net"; sid:9000011;)
- Actualizar iOS a la versión más reciente (las versiones 18.4-18.6 son vulnerables)
- Bloquear dominio
cdncounter.neten DNS/firewall corporativo - Activar Modo Lockdown (Lockdown Mode) en iOS para objetivos de alto riesgo
- Revisar logs de Safari/WebKit para accesos a dominios sospechosos
- No visitar URLs desconocidas — el exploit es drive-by (no requiere interacción adicional)
DarkSword-RCE is a Remote Code Execution (RCE) exploit kit targeting Safari/WebKit on iOS 18.4 – 18.6. It achieves arbitrary code execution on iPhones through a multi-stage exploitation chain that crosses multiple security boundaries: JavaScriptCore → WebKit sandbox → GPU process → system level.
The exploit is written entirely in JavaScript and delivered as a web page visited by the victim without their knowledge (drive-by exploit).
| iOS | Status | Notes |
|---|---|---|
| 18.4 | ✅ Exploitable | Complete modules (rce_module.js, rce_worker.js, sbx0_main_18.4.js) |
| 18.6 | ✅ Exploitable | Extended module (rce_worker_18.6.js — 514 KB, more complex) |
| 18.6.1 | ✅ Exploitable | Same module as 18.6 |
| 18.6.2 | ✅ Exploitable | Same module as 18.6 |
Target devices: iPhone11 series, iPhone12 series (with per-model hardcoded offsets)
DarkSword-RCE/
├── index.html (689 B) — Entry point (hidden iframe)
├── frame.html (252 B) — Exploit loader from CDN
├── rce_loader.js (7.1 KB) — Main orchestrator
├── rce_module.js (170 KB) — Memory primitives (iOS 18.4)
├── rce_module_18.6.js (85 B) — Stub for iOS 18.6
├── rce_worker.js (43 KB) — Exploitation worker (iOS 18.4)
├── rce_worker_18.6.js (514 KB) — Exploitation worker (iOS 18.6)
├── sbx0_main_18.4.js (415 KB) — GPU sandbox escape (Stage 0)
├── sbx1_main.js (311 KB) — Sandbox escape (Stage 1)
└── pe_main.js (761 KB) — Privilege escalation
Total: ~2.2 MB | 38,652 lines
[Victim visits malicious URL]
│
▼
index.html → hidden iframe → frame.html
│
▼ (loads from attacker CDN)
rce_loader.js
├─ Detects iOS version (18.4 / 18.6 / 18.6.1 / 18.6.2)
├─ Detects iPhone model and specific offsets
└─ Creates Web Worker with correct module
│
▼
[STAGE 1] rce_module.js — Memory Primitives
├─ Exploits JavaScriptCore internals
├─ Creates read64() and write64() via TypedArray tricks
└─ Locates VM structures in heap
│
▼
[STAGE 2] rce_worker.js — JIT Bypass and Framework
├─ Disables JIT allow-list via offset writes
├─ Manipulates AVFAudio/TextToSpeech structures
└─ Executes Obj-C methods via objc_msgSend
│
▼
[STAGE 3] sbx0_main_18.4.js — GPU Sandbox Escape (Stage 0)
├─ Breaks out of WebKit sandbox via GPU process
├─ Exploits graphics rendering infrastructure
└─ Establishes primitives in GPU process context
│
▼
[STAGE 4] sbx1_main.js — GPU Sandbox Escape (Stage 1)
├─ Calculates shared cache ASLR slide
├─ Sets up ROP/JOP gadget chains
└─ Bypasses PAC (Pointer Authentication Codes)
│
▼
[STAGE 5] pe_main.js — Privilege Escalation
├─ Establishes arbitrary function calling (fcall)
├─ Invokes Mach kernel APIs (mach_port_allocate, mach_vm_allocate)
├─ Manipulates Objective-C runtime
└─ Achieves unrestricted code execution on device
| Technique | Description |
|---|---|
| Memory corruption | Exploits JS engine internals for arbitrary memory read/write |
| PAC bypass | Strips Pointer Authentication Codes to forge pointers |
| JIT bypass | Disables JIT allow-list to enable arbitrary JIT code execution |
| ROP/JOP chains | Uses Return/Jump-Oriented Programming gadgets from system libraries |
| GPU process abuse | Exploits GPU rendering context for cross-process primitives |
| Obj-C runtime | Invokes arbitrary Objective-C methods via forged selectors |
| Mach IPC | Direct kernel API calls via Mach ports |
| Dynamic loading | Fetches additional payload modules from CDN at runtime |
| Type | Value | Purpose |
|---|---|---|
| Attacker CDN | static.cdncounter.net |
Exploit distribution |
| Loader URL | https://static.cdncounter.net/assets/rce_loader.js |
Main orchestrator module |
| Fake 404 | https://static.cdncounter.net/404.html |
Error-case redirect |
0xfffe000011111111 — Worker 1 identifier
0xfffe000022222222 — Worker 2 identifier
rule DarkSword_iOS_RCE_Exploit {
meta:
description = "Detects DarkSword iOS RCE exploit kit"
author = "KONDORDEVSECURITYCORP"
date = "2026-03"
severity = "critical"
target = "iOS 18.4-18.6 Safari/WebKit"
strings:
$cdn = "static.cdncounter.net"
$magic1 = "0xfffe000011111111"
$magic2 = "0xfffe000022222222"
$func1 = "gpuRead64"
$func2 = "gpuWrite64"
$func3 = "rce_loader"
$pac = "noPAC"
condition:
2 of them
}alert dns $HOME_NET any -> any 53 (msg:"DarkSword CDN DNS"; dns.query; content:"cdncounter.net"; sid:9000010;)
alert http $HOME_NET any -> any 443 (msg:"DarkSword Exploit"; http.host; content:"static.cdncounter.net"; sid:9000011;)
- Update iOS to the latest version (18.4-18.6 are vulnerable)
- Block domain
cdncounter.netat corporate DNS/firewall - Enable Lockdown Mode in iOS for high-risk targets
- Review Safari/WebKit logs for suspicious domain access
- Do not visit unknown URLs — exploit is drive-by (requires no additional interaction)
EN: This exploit sample is published for security research, vulnerability analysis, threat intelligence, and defensive purposes ONLY. Using this code against real devices is illegal and unethical. Authors assume no liability for misuse.
ES: Esta muestra de exploit se publica únicamente para investigación de seguridad, análisis de vulnerabilidades, inteligencia de amenazas y fines defensivos. Usar este código contra dispositivos reales es ilegal y antiético. Los autores no asumen responsabilidad por el uso indebido.