CVE-2016-4657
Patch now. It under exploitation confirmed by CISA and has a working public exploit.
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
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.