← back
CVE-2019-11708criticalunder attackCWE-20

CVE-2019-11708

98Vexday Risk Score

Prioritize patching. It under exploitation confirmed by CISA and has a public proof of concept.

ssvc Actcvss 10epss 56%
from disclosure to weapon68 days
Published on NVDJul 23
1st PoC+68d
CISA KEV+1035d
exploitation probability
56%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
6 public exploit(s)
Action required by CISAfederal deadline: 2022-06-13

Apply updates per vendor instructions.

Summary

Falha de sandbox escape no Firefox e Thunderbird: o processo de conteúdo (sandboxed) pode enviar a mensagem IPC Prompt:Open ao processo pai (não sandboxed) com um parâmetro de URI insuficientemente validado, fazendo o pai abrir conteúdo web arbitrário escolhido pelo processo filho já comprometido. O CVSS 10.0 é enganoso: por si só, essa falha não dá execução remota de código — ela só importa depois que um atacante já obteve execução de código dentro do processo de conteúdo sandboxed via outra vulnerabilidade (ex.: um bug de motor JS). Foi usada em ataques reais, reportada pela Coinbase Security, e está no catálogo KEV da CISA.

Technical detail

O bug está no mecanismo de prompts do Firefox (Prompter.jsm), que usa a mensagem IPC 'Prompt:Open' para o processo de conteúdo pedir ao processo pai que abra uma janela de diálogo (ex.: caixas de autenticação HTTP ou seletor de arquivo). O parâmetro 'uri' dessa mensagem deveria assumir apenas dois valores fixos hardcoded no código (as strings dos XULs commonDialog/selectDialog), mas o processo pai não validava que o valor recebido do filho era realmente um desses dois. Isso é uma falha de CWE-20 (validação insuficiente de entrada): o processo pai, que roda sem as restrições do sandbox, confiava em um parâmetro totalmente controlável pelo processo filho já comprometido.

Segundo o report na Bugzilla, o código vulnerável foi introduzido em 2014 (bug 899648), junto com a chegada do e10s (multiprocess Firefox) — ou seja, praticamente toda versão com multiprocesso habilitado desde então trazia esse defeito, mesmo que só tenha sido corrigido em 2019. Um pesquisador demonstrou que bastava executar um script no Browser Content Toolbox simulando o processo de conteúdo para abrir documentos arbitrários no processo pai de forma confiável, incluindo via URIs data: ou blob:.

O que o atacante controla, uma vez com código executando no processo de conteúdo, é o valor do parâmetro 'uri' enviado na mensagem IPC — podendo apontar para qualquer conteúdo web, não apenas os dois diálogos internos esperados. Isso permite que o processo pai (fora do sandbox) carregue e processe esse conteúdo, dando ao atacante uma segunda superfície de ataque fora da caixa de restrições, o que é exatamente a definição de sandbox escape.

How it’s exploited

A exploração exige, como pré-requisito, que o atacante já tenha conseguido executar código arbitrário dentro do processo de conteúdo sandboxed — normalmente via uma vulnerabilidade de corrupção de memória ou confusão de tipos no motor JavaScript, disparada por uma página web maliciosa. Sozinha, CVE-2019-11708 não é um vetor de comprometimento remoto: é o segundo elo de uma cadeia. Com código no processo filho, o atacante usa a API messageManager para enviar a mensagem Prompt:Open com um parâmetro de URI malicioso, fazendo o processo pai — que roda com privilégios do sistema do usuário e fora do sandbox — abrir esse conteúdo. Repetindo o processo de exploração original agora no contexto não-sandboxed, o atacante obtém execução de código fora das restrições do sandbox.

O caso documentado na Bugzilla e no advisory da Mozilla foi reportado pela equipe de segurança da Coinbase, e o próprio time do Mozilla registra que esse bug foi 'usado como o sandbox escape' em uma release de emergência ('chemspill'), indicando exploração real combinada com outra falha (o padrão histórico dessa dupla é uma vulnerabilidade de execução de código no motor JS do Firefox usada em conjunto com este escape). Existe PoC pública referenciada (Packet Storm, 'Mozilla Firefox Windows 64-Bit Chain Exploit'), reforçando que a exploração prática é uma cadeia de exploits, não um bug isolado explorável remotamente sem outra vulnerabilidade.

O impacto final, quando encadeado com sucesso, é execução arbitrária de código no computador do usuário, com os privilégios do processo do navegador — efetivamente comprometendo a máquina a partir de uma visita a página maliciosa, sem interação além de abrir a página.

Versions

Affected
Firefox ESR < 60.7.2; Firefox < 67.0.4; Thunderbird < 60.7.2 (código vulnerável presente desde a introdução do e10s multiprocess em 2014, segundo os desenvolvedores).
Fixed in
Firefox 67.0.4; Firefox ESR 60.7.2; Thunderbird 60.7.2. Builds de distribuições Linux consolidaram a correção em releases posteriores (ex.: pacote firefox/firefox-bin 60.8.0 no Gentoo, que agrupa este e outros CVEs do período).

How to protect

Atualizar para Firefox 67.0.4 ou superior, Firefox ESR 60.7.2 ou superior, e Thunderbird 60.7.2 ou superior corrige a falha na origem: o parâmetro 'uri' deixou de ser aceito do processo de conteúdo, substituído por um identificador do diálogo (nome, não URI). Distribuições como Gentoo empacotaram a correção em builds posteriores (ex.: firefox 60.8.0), que já incorporam esse e outros CVEs do mesmo lote.

Não há paliativo de configuração real: como o problema está na validação de uma mensagem IPC interna do próprio motor multiprocesso, não existe flag ou política que mitigue sem a correção de código. Desabilitar o e10s (multiprocess) não é mitigação válida — isso elimina a separação entre processo de conteúdo e processo pai, ou seja, remove o sandbox por completo, deixando o usuário mais exposto, não menos.

Como essa falha só tem impacto quando encadeada com uma vulnerabilidade de execução de código no processo de conteúdo (histórico documentado envolve bugs do motor JS do mesmo período, como os corrigidos nos mesmos boletins MFSA2019-19/20), manter o navegador atualizado contra todas as CVEs do lote é o controle mais efetivo — corrigir só o sandbox escape sem corrigir a falha de RCE inicial, ou vice-versa, deixa a cadeia intacta em versões antigas não patcheadas.

How to detect

Não há assinatura de rede confiável: a mensagem Prompt:Open é uma comunicação IPC interna entre processos locais do navegador, não tráfego de rede observável. Em ambientes com EDR, o sinal indireto seria comportamento anômalo do processo do navegador (ex.: plugin-container/content process do Firefox/Thunderbird abrindo janelas ou spawnando processos filhos fora do padrão após navegação, ou o processo pai carregando conteúdo web inesperado) combinado com evidência de exploração do motor JS que precedeu o escape. Sem logs de aplicação detalhados do processo de conteúdo, detectar tentativas dessa cadeia especificamente é difícil; a defesa prática é patch, não detecção.

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.
Insufficient vetting of parameters passed with the Prompt:Open IPC message between child and parent processes can result in the non-sandboxed parent process opening web content chosen by a compromised child process. When combined with additional vulnerabilities this could result in executing arbitrary code on the user's computer. This vulnerability affects Firefox ESR < 60.7.2, Firefox < 67.0.4, and Thunderbird < 60.7.2.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.