O DarkSword marca um novo patamar na exploração do iOS. Ativo desde pelo menos novembro de 2025, esse exploit de cadeia completa encadeia múltiplas vulnerabilidades — várias delas zero-days — para comprometer completamente dispositivos iOS. O grupo de espionagem russo suspeito UNC6353 o distribui por meio de ataques watering hole, injetando tags de script maliciosas em sites legítimos comprometidos. A principal preocupação é a entrega: o ambiente do lado do cliente de um site se torna um vetor para um exploit de estado-nação direcionado aos visitantes.
Como a cadeia de exploits DarkSword funciona
Kits de exploits anteriores para iOS dependiam de componentes binários. O DarkSword adota uma abordagem diferente: toda a cadeia é escrita em JavaScript. Ao permanecer em JavaScript em cada etapa, os atacantes evitam mitigações binárias como a Page Protection Layer (PPL) e o Secure Page Table Monitor (SPTM) da Apple. A cadeia tem como alvo versões do iOS no intervalo 18.4–18.7 e opera em várias etapas que escalam de uma corrupção de memória no navegador até privilégios totais no kernel.
Etapas do exploit
| Etapa do Exploit | Vulnerabilidade | Descrição | Zero-day? |
|---|---|---|---|
| Execução Remota de Código (RCE) | CVE-2025-31277 / CVE-2025-43529 | Corrupção de memória no JavaScriptCore (confusão de tipo JIT e bugs de GC). | CVE-2025-43529 era um zero-day |
| Bypass de PAC | CVE-2026-20700 | Bypass de Pointer Authentication Code em modo de usuário no dyld. | Sim |
| Escape de sandbox do WebContent | CVE-2025-14174 | Corrupção de memória no ANGLE, escapando para o processo de GPU. | Sim |
| Escape de sandbox da GPU | CVE-2025-43510 | Vulnerabilidade de gerenciamento de memória no kernel do iOS, com pivô para mediaplaybackd. | Não |
| Escalada de privilégios | CVE-2025-43520 | Corrupção de memória no kernel do iOS, concedendo privilégios totais no kernel. | Não |
Após obter o comprometimento total, o exploit instala uma de três famílias de malware baseadas em JavaScript: GHOSTBLADE, GHOSTKNIFE ou GHOSTSABER. Elas atuam como mineradores de dados e backdoors, exfiltrando iMessages, dados de carteiras de criptomoedas, histórico de localização e senhas de WiFi salvas.
Exemplo de código de depuração
Código de depuração e comentários deixados nos payloads revelam a intenção dos autores. O GHOSTBLADE inclui funções para fazer hexdump da memória do kernel e tem como alvo específico as credenciais de WiFi:
const TAG = "DarkSword-WIFI-DUMP";
function kdump(where, size, msg = "") {
LOG(`[+] ----------- ${msg} ----------`);
for (let i = 0n; i < size; i += 0x10n) {
LOG(`[+] [${i.hex()}] ${(where + i).hex()}: ${early_kread64(where + i).hex()} ${early_kread64(where + i + 8n).hex()}`);
}
}
Como o DarkSword usa ataques watering hole para infectar dispositivos iOS
O UNC6353 compromete sites legítimos e os transforma em watering holes. Quando um alvo visita um desses sites, o ataque é executado silenciosamente em segundo plano, sem qualquer interação do usuário. O ataque normalmente começa com uma única tag injetada que parece inofensiva no HTML, mas que então carrega JavaScript controlado pelo atacante a partir de um CDN de terceiros.
Exemplo (exibido escapado para evitar a incorporação de uma tag de script real):
<script async src="hxxps://static[.]cdncounter[.]net/widgets[.]js?uhfiu27fajf2948fjfefaa42"></script>
A partir daí, o ataque continua por meio de operações no lado do cliente. O loader pode criar iframes ocultos de 1x1 pixel, usar sessionStorage para rastrear e criar fingerprints das vítimas, e buscar payloads adicionais ofuscados via XHRs síncronos. Como todas as ações utilizam APIs web padrão, elas se misturam à atividade normal do navegador, a menos que o ambiente do lado do cliente seja monitorado.
if (!sessionStorage.getItem("uid") && isTouchScreen) {
sessionStorage.setItem("uid", '1');
const frame = document.createElement("iframe");
frame.src = "frame.html?" + Math.random();
frame.style.height = 0;
frame.style.width = 0;
frame.style.border = "none";
document.body.appendChild(frame);
} else {
top.location.href = "red";
}
function getJS(fname,method = 'GET') {
try {
url = fname;
print(`trying to fetch ${method} from: ${url}`);
let xhr = new XMLHttpRequest();
xhr.open("GET", `${url}` , false);
xhr.send(null);
return xhr.responseText;
} catch(e) {
print("got error in getJS: " + e);
}
}
Por que as defesas de segurança tradicionais não detectam o DarkSword
O DarkSword expõe um ponto cego na maioria das configurações de segurança. Defesas de perímetro, WAFs e muitas ferramentas de detecção de endpoint não enxergam a atividade dentro do navegador. O site comprometido entrega o que parece ser um recurso normal do lado do cliente, enquanto o exploit real é carregado a partir de um domínio de terceiros. Defender-se contra esses ataques exige visibilidade sobre a execução no lado do cliente e a capacidade de detectar comportamentos anômalos do navegador.
Indicadores de comprometimento
- Tags de script inesperadas carregando de domínios desconhecidos ou suspeitos;
- Iframes ocultos com dimensões de 1x1 pixel, opacidade próxima de zero ou posicionamento fora da tela;
- Modificações incomuns em sessionStorage ou localStorage por scripts não autorizados;
- Requisições XHR ou Fetch recuperando payloads JavaScript adicionais ofuscados.
Como se defender contra o DarkSword e ataques watering hole
A Apple corrigiu as vulnerabilidades do DarkSword no iOS 26.3, e os usuários devem atualizar imediatamente. Mas aplicar patches nos endpoints resolve apenas uma camada do problema. Enquanto os atacantes puderem comprometer sites legítimos e usá-los como veículos de entrega, os ataques watering hole continuarão. Os operadores de sites devem fortalecer as cadeias de suprimentos, monitorar injeções não autorizadas e usar monitoramento no lado do cliente para detectar a execução de scripts maliciosos antes que payloads como o DarkSword sejam instalados.






