← voltar
CVE-2019-11707highsob ataqueCWE-843

CVE-2019-11707

85Vexday Risk Score

Priorize a correção. Ela está sob exploração confirmada pelo CISA e tem prova de conceito pública.

ssvc Actcvss 8.8epss 38%
da publicação à arma0 dias
Publicada no NVD23 de jul.
1ª PoC26 de jun.
CISA KEV+1035d
probabilidade de exploração
38%top 2% das CVEs
exploração observada
simCISA + VulnCheck
8 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-06-13

Apply updates per vendor instructions.

Resumo

Falha de type confusion no motor JavaScript SpiderMonkey do Firefox, explorável via página web maliciosa sem interação complexa do usuário além de visitar o site. A Mozilla confirmou exploração ativa e direcionada no momento da divulgação, o que motivou patch de emergência fora do ciclo normal de release e entrada no catálogo KEV da CISA.

Detalhamento técnico

A falha está no compilador JIT IonMonkey, no otimizador de chamadas ao método Array.prototype.pop (bug 1544386, CWE-843 – type confusion). IonMonkey usa inferência de tipos para prever o tipo de retorno de operações e evitar checagens de tipo em runtime ("type barrier"). Para arrays cujos elementos inferidos são sempre objetos, o compilador assume que Array.pop() sempre retornará um JSObject* e gera código que despacha diretamente essa suposição, sem verificação.

O problema é que Array.prototype.pop pode ler um valor a partir do protótipo do array quando o próprio array não possui mais o elemento no índice correspondente (por exemplo, quando o length foi manipulado artificialmente via atribuição direta a um índice alto). Se o atacante troca o protótipo do array por um objeto que expõe, no índice 0, um valor primitivo (um double, no PoC público), a chamada de runtime js::array_pop retorna esse double em vez de um ponteiro para objeto. O código JIT já compilado, que assumiu tipo objeto, trata esse double como se fosse um ponteiro e o desreferencia — resultando em um valor controlado pelo atacante sendo usado como endereço de memória.

O atacante controla o valor numérico (double) colocado no protótipo, e esse valor é literalmente interpretado como endereço de ponteiro pelo código gerado. Isso é uma primitiva clássica de type confusion em engines JS: não é um overflow de buffer, mas uma confusão de tipos causada por inferência de tipo incompleta (o rastreamento de tipos inferidos ignora propriedades herdadas do protótipo, só cobre elementos próprios do array).

Como é explorada

O vetor é uma página web (ou conteúdo renderizado pelo motor Gecko, incluindo e-mail HTML no Thunderbird) contendo JavaScript malicioso. Não há necessidade de autenticação nem de configuração não padrão — o código roda no contexto normal de execução de script da página, exigindo apenas que a vítima abra a página ou o e-mail (interação do usuário = UI:R no vetor CVSS). A engine precisa compilar a função ofensora via JIT (o que ocorre naturalmente após algumas iterações de execução, técnica de warm-up comum em exploits de JS engine).

A Mozilla declarou conhecimento de "ataques direcionados na natureza" abusando da falha antes mesmo da publicação do patch, o que motivou release fora de ciclo (MFSA2019-18, 18 de junho de 2019). O reporter original inclui "Coinbase Security" ao lado do pesquisador do Google Project Zero (Samuel Groß), indicando que o contexto de descoberta envolveu ataques com interesse em usuários ligados a criptoativos — mas isso não está detalhado tecnicamente nos advisories públicos.

Sozinha, a vulnerabilidade produz um crash controlado por type confusion (corrupção de memória), e pesquisadores classificam esse tipo de falha como "geralmente bem explorável" para conseguir execução de código arbitrário no contexto do processo de conteúdo do navegador. Para escapar da sandbox do processo de conteúdo e comprometer o sistema completo, é necessário encadear uma segunda falha de sandbox escape — a própria Mozilla corrigiu, na sequência imediata (dias depois), a CVE-2019-11708, também explorada em conjunto nos mesmos ataques relatados.

Versões

Afetadas
Firefox ESR < 60.7.1; Firefox < 67.0.3; Thunderbird < 60.7.2.
Corrigidas em
Firefox 67.0.3; Firefox ESR 60.7.1; Thunderbird 60.7.2.

Como se proteger

Atualizar para as versões corrigidas é a única mitigação real: não há workaround de configuração, flag ou pref que neutralize a falha sem desabilitar o JIT por completo (o que tem custo severo de performance e não é suportado como mitigação oficial). O GLSA da Gentoo confirma explicitamente: "There is no known workaround at this time."

Ambientes que não puderem atualizar imediatamente devem considerar controles compensatórios genéricos de navegação seguro (isolamento de sessão, bloqueio de execução de JavaScript em contextos não confiáveis, sandboxing de processo adicional via sistema operacional), mas nenhum desses substitui o patch — a falha está no JIT compilation, componente central de qualquer execução de JS na engine.

Dado que a falha foi exploração ativa confirmada e está no catálogo KEV da CISA, organizações sob diretivas de patch de KEV devem tratar esta CVE como remediação obrigatória, ainda que a data de publicação seja de 2019 — instalações legadas de Firefox ESR ou Thunderbird desatualizadas continuam vulneráveis até hoje se nunca foram atualizadas.

Como detectar

Não há assinatura de rede confiável: a exploração ocorre inteiramente client-side, dentro do processo de conteúdo do navegador/cliente de e-mail, via JavaScript que dispara o bug de inferência de tipos no JIT. Não existe padrão de payload de rede distintivo documentado publicamente — os relatos da Mozilla mencionam apenas "ataques direcionados na natureza" sem indicadores de comprometimento publicados.

Em nível de host, sinais possíveis incluem crashes recorrentes do processo de conteúdo do Firefox/Thunderbird com padrões de falha característicos de type confusion (acesso a memória com endereço não mapeado, frequentemente valores que parecem doubles reinterpretados como ponteiros) registrados em relatórios de crash (about:crashes) anteriores à atualização. Isso não é evidência definitiva de exploração maliciosa — crashes de JIT também ocorrem por bugs não relacionados a segurança — mas crashes repetidos e recorrentes por usuário antes da atualização de junho de 2019 merecem investigação retroativa se logs/dumps ainda existirem.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
A type confusion vulnerability can occur when manipulating JavaScript objects due to issues in Array.pop. This can allow for an exploitable crash. We are aware of targeted attacks in the wild abusing this flaw. This vulnerability affects Firefox ESR < 60.7.1, Firefox < 67.0.3, and Thunderbird < 60.7.2.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.