NetCatTest

Anonimato & OPSEC

Mullvad Browser: CVE-2025-2857 e fuga de sandbox no Windows

Entenda a fuga de sandbox de 2025 no Mullvad Browser: IPC, handles, autoridade mínima e um laboratório de capacidades locais.

Por Daniel Felipe 6 min leitura

Um navegador de privacidade continua dependendo de isolamento de processos e do sistema operacional. A CVE-2025-2857 mostrou um problema nessa fronteira no Windows: um processo filho comprometido podia receber uma referência com poderes indevidos sobre outro processo. Mullvad Browser publicou uma atualização de segurança específica para esse contexto em março de 2025.

O que aconteceu no Windows

O MFSA 2025-19 da Mozilla descreve uma fuga de sandbox relacionada ao tratamento de handles em IPC. A correção entrou no Firefox ESR 128.8.1. A versão 14.0.8 do Mullvad Browser incorporou a atualização emergencial para Windows.

A pré-condição é essencial: o processo filho já está comprometido. A falha não representa, sozinha, um link que automaticamente execute código no sistema. É uma possível etapa de uma cadeia que começa com um comprometimento anterior e tenta atravessar a sandbox.

Pergunta Resposta sustentada pelo aviso
Plataforma desta falha Windows
Fronteira IPC e referências a processos
Pré-condição Processo filho comprometido
Consequência Fuga da sandbox
Correção citada Marco histórico, não versão atual recomendada

Handles são autoridade, não apenas números

Um handle identifica um objeto ao qual determinado processo possui acesso. O conjunto de direitos associado a ele importa tanto quanto o objeto. Uma referência destinada apenas a consultar um estado não deveria permitir alterar memória ou controlar execução.

Em um desenho com broker, o processo de maior privilégio atende solicitações do processo restrito. Isso economiza permissões no filho, mas torna o broker uma fronteira crítica. Ele precisa verificar identidade, operação, objeto e direitos efetivamente necessários. Confiar em uma solicitação apenas porque veio de um processo conhecido é insuficiente quando esse processo é justamente o elemento que pode estar comprometido.

Uma classe de erro aparece quando uma API cria ou duplica uma referência com acesso mais amplo do que o contrato da mensagem prevê. O consumidor passa a possuir uma capacidade que não deveria receber. O problema não está na estética do identificador, mas na autoridade que o sistema permite exercer com ele.

Confused deputy e minimização de poderes

O broker pode se tornar um confused deputy: ele usa seus próprios privilégios em benefício de uma solicitação que não deveria autorizar. A análise deve seguir a informação do chamador até a operação final. Toda conversão entre nome, identificador e objeto precisa manter o vínculo com a política.

Uma permissão para consultar um processo não autoriza consultar qualquer processo. O objetivo também deve ser vinculado ao contexto correto. Reutilização de identificadores, encerramento concorrente e troca do objeto entre verificação e uso são casos importantes para um teste de regressão.

Este raciocínio é uma orientação de auditoria. O aviso público não expõe todo o código de exploração nem todos os detalhes da implementação afetada. Não se deve inventar uma mensagem IPC específica e anunciá-la como payload real da CVE.

Laboratório: contrato de capacidade limitado

O exemplo local define operações aceitas e verifica o vínculo entre solicitante e objeto. Cinco casos demonstram acesso permitido, operação indevida, solicitante errado e objeto errado. Ele não cria handles do Windows e não interage com o navegador.

import json

permitidos = {'consultar_estado'}

def autorizar(identidade, objeto, direitos):
    if identidade != 'processo-lab' or objeto != 'tarefa-lab':
        return False
    return bool(direitos) and set(direitos) <= permitidos

casos = [('processo-lab',
    'tarefa-lab',
    ['consultar_estado'],
    True),
    ('processo-lab',
    'tarefa-lab',
    ['consultar_estado',
    'alterar_memoria'],
    False),
    ('outro',
    'tarefa-lab',
    ['consultar_estado'],
    False),
    ('processo-lab',
    'outro',
    ['consultar_estado'],
    False),
    ('processo-lab',
    'tarefa-lab',
    [],
    False)]
for identidade, objeto, direitos, esperado in casos:
    assert autorizar(identidade, objeto, direitos) is esperado
print(json.dumps({'casos': len(casos),
    'aprovados': True,
    'handles_windows_reais': False},
    ensure_ascii=False))

O ponto central é validar a tupla completa, em vez de testar apenas se a operação existe. Acrescentar alterar_memoria ao conjunto solicitado deve produzir recusa. Da mesma forma, uma capacidade correta emprestada a outra identidade não deve autorizar a ação.

Um sistema real precisa aplicar essa decisão ao direito efetivamente entregue pelo kernel. Uma lista de operações no nível de aplicação perde valor se, depois dela, a implementação retornar um handle com acesso irrestrito. O teste deve observar os poderes finais, incluindo caminhos de erro e duplicação.

Plano de auditoria e reteste

Comece com o grafo de processos e mensagens: quem solicita, quem valida, quem cria o objeto e quem o usa. Para cada operação, descreva direitos mínimos, tempo de vida e condições de revogação. Atribua uma expectativa explícita às mensagens malformadas: recusa sem efeitos laterais.

Caso Resultado esperado
Operação de consulta aprovada Somente consulta
Solicitação de direitos extras Recusa
Identidade diferente Recusa
Objeto encerrado ou substituído Recusa ou resolução segura
Falha intermediária Recursos liberados sem ampliação de autoridade

Em laboratório, registre versão exata e arquitetura do Windows, build do navegador e configuração de sandbox. Não misture testes de Windows com resultados de Linux para concluir que a CVE é universal. O fato de os produtos compartilharem código não elimina condicionais e diferenças de API por plataforma.

Uma validação forte observa a operação final, não apenas a resposta textual do broker. Se uma mensagem retorna “negado”, mas deixa uma referência utilizável, a política continua falhando. Esse princípio também vale para extensões, serviços de integração e agentes locais de administração.

Privacidade do Mullvad Browser e transporte de rede

O Mullvad Browser foi desenvolvido com foco em reduzir rastreamento e fingerprinting. Isso não significa que ele use automaticamente a rede Tor. Navegador, VPN e rede de anonimato exercem funções diferentes, e uma avaliação deve registrar a configuração realmente utilizada.

Uma VPN não corrige um handle excessivamente poderoso dentro do sistema. Da mesma forma, uma sandbox corrigida não garante que um usuário não revele sua identidade ao entrar em uma conta pessoal. Separar essas camadas ajuda a construir recomendações que respondem à falha concreta.

Perguntas frequentes

A CVE prova exploração ativa de Mullvad Browser? O aviso descreve a falha e sua relação com pesquisas de sandbox. Não há base aqui para afirmar uma campanha comprovada contra usuários do Mullvad Browser.

É uma falha de VPN? Não. O componente discutido é a sandbox do navegador no Windows.

Qual atualização utilizar agora? A versão atual compatível e fornecida oficialmente. A 14.0.8 serve para identificar quando essa correção histórica chegou ao produto.

O caso demonstra que IPC seguro exige validar não só o conteúdo da mensagem, mas os poderes que ela produz. Uma fronteira profissional se mantém forte quando cada referência entregue corresponde exatamente à autorização pretendida.

Escrito por

Daniel Felipe é criador do NetCatTest e produz conteúdos sobre cibersegurança, privacidade digital, OSINT, laboratórios autorizados e ferramentas para estudo técnico responsável.

Compartilhar

Enviar este artigo