← back
CVE-2016-4657highunder attackCWE-787

CVE-2016-4657

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 8.8epss 64%
from disclosure to weapon199 days
Published on NVDAug 25
1st PoC+199d
metasploitAug 25
CISA KEV+2098d
exploitation probability
64%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
10 public exploit(s)
Action required by CISAfederal deadline: 2022-06-14

Apply updates per vendor instructions.

Summary

Falha de corrupção de memória (use-after-free) no motor JavaScriptCore do WebKit usado pelo Safari e por qualquer app que renderize HTML via WebKit no iOS. É a terceira peça da cadeia "Trident", usada pelo grupo NSO no spyware Pegasus para comprometer o iPhone de um ativista em 2016 a partir de um único clique em link malicioso — por isso está no catálogo KEV da CISA com exploração confirmada, apesar de a CVE isolada não dar root: ela só entrega execução de código dentro do sandbox do navegador.

Technical detail

A vulnerabilidade está no JavaScriptCore, o interpretador JS do WebKit. O módulo Metasploit público a identifica como um use-after-free relacionado a "not_number defineProperties" — a manipulação de propriedades de objetos JS por Object.defineProperties permite que uma referência a um objeto seja liberada enquanto o engine ainda mantém um ponteiro válido para ela, típico CWE-416 (a CISA classifica a entrada genericamente como CWE-119, corrupção de memória por acesso fora dos limites/uso indevido de buffer). O atacante controla o conteúdo de uma página web (JavaScript arbitrário) e usa isso para forçar o padrão de alocação/liberação que dispara a condição de corrida entre a liberação do objeto e seu reuso.

A Apple descreve a causa raiz apenas como "a memory corruption issue was addressed through improved memory handling", sem detalhar a rotina exata — não há CWE oficial do fornecedor, só o inferido pela CISA e pelo código do exploit. Não há acesso ao código-fonte fechado do WebKit da Apple na época que permita confirmar a linha exata; a análise pública mais próxima vem do próprio módulo Metasploit e de writeups da cadeia Pegasus (Lookout/Citizen Lab), que tratam essa CVE como o estágio de execução de código no contexto do Safari/WebKit, anterior à escalada de privilégios feita pelas outras duas CVEs da cadeia (4655 e 4656) no kernel.

O exploit encontrado publicamente usa técnicas clássicas de exploração de UAF em JS engines: cria pressão de heap com arrays tipados (Uint32Array) para controlar layout de memória, obtém um objeto corrompido para read/write arbitrário de 4 bytes (funções read4/write4 no PoC), localiza o dyld shared cache para achar código nativo executável e desvia a execução para shellcode que sobrescreve uma função JIT com instruções ARM64 cruas. Isso demonstra escrita e leitura arbitrária de memória de processo — o impacto real de "execução de código" da CVE.

How it’s exploited

O vetor é 100% remoto e de zero-clique de configuração: basta a vítima visitar (ou ser redirecionada para) uma página web maliciosa no Safari ou em qualquer app que use WebKit para renderizar conteúdo — não exige autenticação nem configuração não padrão, só que o usuário abra o link (por isso UI:R no vetor CVSS). Na campanha real que motivou a descoberta (Pegasus/NSO, agosto de 2016), a exploração começou com um SMS contendo link, clicado pela vítima; a partir daí a cadeia era automática e silenciosa.

Isoladamente, esta CVE só dá execução de código dentro do processo/sandbox do WebKit — para o comprometimento completo do dispositivo (que foi o caso documentado pela Lookout/Citizen Lab) ela foi encadeada com CVE-2016-4655 (leak de memória de kernel) e CVE-2016-4656 (corrupção de memória de kernel) para escapar do sandbox e obter jailbreak silencioso com persistência. Existe módulo Metasploit público (rank "manual", não automático) e PoC no Exploit-DB que reproduzem o UAF e a técnica de read/write arbitrário, tornando a reprodução técnica acessível para quem tem o código, embora monte a exploração completa exija montar a cadeia de três CVEs para efeito prático em iOS moderno da época.

A presença no catálogo KEV confirma exploração ativa in-the-wild antes da divulgação pública (zero-day usado ofensivamente por um cliente de spyware comercial), não uma exploração massiva e oportunista — o alvo original foi um indivíduo específico (ativista de direitos humanos nos Emirados Árabes).

Versions

Affected
iOS anterior à versão 9.3.5 (dispositivos iPhone 4s e posteriores, iPad 2 e posteriores, iPod touch 5ª geração e posteriores, conforme lista de hardware suportado pela Apple no advisory).
Fixed in
iOS 9.3.5, lançado em 25 de agosto de 2016.

How to protect

A correção definitiva é atualizar para iOS 9.3.5 ou qualquer versão posterior — a Apple corrigiu as três vulnerabilidades da cadeia Trident (CVE-2016-4655, 4656 e 4657) nesse release, lançado em 25 de agosto de 2016. Dado o tempo passado, qualquer dispositivo hoje em produção deveria estar em versões muito mais recentes; a mitigação prática em 2024+ é garantir que nenhum equipamento institucional rode iOS anterior a 9.3.5 — o que geralmente indica hardware obsoleto (iPhone 4s ou modelos incompatíveis com atualizações posteriores) que deveria ser descontinuado, não mantido com controles compensatórios.

Não existe paliativo de configuração que neutralize a falha em versões vulneráveis — é corrupção de memória no motor de renderização, não há flag para desabilitar seletivamente o componente afetado sem desabilitar o WebKit por completo (o que inviabiliza o Safari e qualquer app que dependa de WebView). Bloquear JavaScript reduz a superfície mas não é mitigação garantida, pois a vulnerabilidade está no próprio motor JS. MDM que force atualização automática de iOS é o controle organizacional mais realista para parques de dispositivos móveis.

Não adianta trocar de navegador dentro do iOS: até versões relativamente recentes do sistema, toda WebView no iOS (Chrome, Firefox, etc.) usa o WebKit do sistema por exigência da Apple, então o problema não é contornável na camada de aplicativo — só na camada de sistema operacional.

How to detect

Não há assinatura de rede confiável e específica: o vetor é uma página web com JavaScript ofuscado explorando um UAF, e o tráfego HTTP/HTTPS não difere estruturalmente de navegação legítima até a entrega do payload nativo. Em nível de host, os indicadores documentados pela Lookout/Citizen Lab na campanha Pegasus foram artefatos pós-exploração (processos, arquivos e configurações de persistência do spyware), não da exploração do WebKit em si — a ausência de qualquer log do lado do WebKit sobrevivendo ao processo do navegador dificulta forense retroativa. Em produtos que ainda operam com iOS antigo, o sinal mais direto é a versão do sistema abaixo de 9.3.5, tratado como indicador de exposição, não de exploração ativa.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
WebKit in Apple iOS before 9.3.5 allows remote attackers to execute arbitrary code or cause a denial of service (memory corruption) via a crafted web site.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Affected products
n/a · n/a
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.