Vulnerabilidade em isolated-vm permite corrupção de memória e escape de sandbox

Autor: Publicada 6 min de lectura 5 leituras

As imagens deste artigo foram geradas com inteligência artificial. Como publicamos

Pesquisadores de segurança revelaram uma vulnerabilidade crítica na biblioteca open source isolated-vm - um binding de Node.js para executar JavaScript não confiável em instâncias isoladas do motor V8 - que permite a código conteúdo na sandbox corromper memória do processo anfitrião e mesmo, em cenários comprovados, escapar da própria caixa de isolamento. O falha, divulgado sob o identificador do GitHub Security Advisory GHSA-864f-rcv7-6rh4, afeta todas as versões até 7.0.0 incluídas e foi corrigido nas versões 6.2.0 e 7.0.1 publicadas recentemente. A descoberta é atribuída a Cristian-Alexandru Staicu de Endor Labs e a correção figura no repositório do projeto no GitHub.

Em termos técnicos confirmados, a isolated-vm cria múltiplos V8 Isolates - instalações separadas do motor V8 com heaps e estados independentes - para que aplicações Node.js possam executar código não confiável sem compartilhar objetos JavaScript diretamente entre o processo principal e os isolados. Para mover dados entre esses limites emprega-se uma camada de "pegamento" em C++ que serializa e deserializa valores; nessa camada a biblioteca expõe a classe ExternalCopy, projetado para copiar de forma segura objetos do host para o convidado e vice-versa. Endor Labs documenta que a falha é uma confusão de tipos (type confusion) no manejo da opção transferList de ExternalCopy, que permite a um convidado manipular estruturas internas e provocar corrupção de memória no processo anfitrião.

Vulnerabilidade em isolated-vm permite corrupção de memória e escape de sandbox
Imagem gerada com IA.

Os efeitos técnicos reproduzidos pelos pesquisadores incluem, no mínimo, uma falha controlada que provoca um SIGSEGV ( recusa de serviço do processo host) e, no pior caso demonstrado, a Controlo do fluxo de execução do anfitrião, o que abre a via para execução remota de código no processo que aloja a sandbox. O mantenedor do projeto, Marcel Laverdet, confirmou que o impacto mínimo é um crash reprodutível por qualquer convidado que receba um ivm.Reference – a forma padrão de outorgar capacidades à sandbox – e que o impacto máximo demonstrado foi um sequestro do controle de fluxo do host.

É importante separar o que está confirmado do que ainda é incerto. Confirmado: a vulnerabilidade existe, tem sido relatada publicamente e corrigida em versões específicas; o vetor implica ExternalCopy e transferList; o potencial de corrupção de memória e sandbox escape foi demonstrado pelos pesquisadores e descrito pelos responsáveis do projeto. Incertidumes: não há, até onde foi relatado publicamente, provas de exploração em massa em ambientes de produção; nem há ainda um identificador CVE público atribuído à falha; e os detalhes completos da exploração foram retidos pelos descubridores para evitar facilitar ataques.

O alcance prático do problema depende de como se utiliza isolated-vm em cada projeto. A livraria é popular no ecossistema Node.js — o seu pacote em npm registrou cerca de um milhão de downloads na última semana, segundo métricas públicas — e é utilizado tanto em serviços que permitem execução remota de scripts de usuários, como em ambientes de testes e ferramentas de desenvolvimento. Aqueles que corram instâncias de isolated-vm que aceitem código não confiável ou que concedam ivm.Reference a convidados estão em maior risco, porque a capacidade mínima necessária para explorar a falha é precisamente dispor dessa referência dentro do isolado.

As consequências reais podem variar desde indisponibilidades localizadas (processos que se estrelam) até compromissos mais graves do servidor ou do serviço que hospeda a sandbox se uma exploração conseguir executar código no host. Além disso, a violação do limite de confiança entre hospedeiro e anfitrião prejudica o principal propósito de usar isolates: executar código potencialmente perigoso sem colocar em risco o resto do ambiente.

Recomendações práticas e verificáveis para administradores e desenvolvedores afetados: em primeiro lugar, Actualizar isolated-vm a uma versão alterada o mais rapidamente possível; as fixes estão disponíveis no repositório oficial e no npm. Você pode verificar e instalar a versão alterada com comandos comonpm ls isolated- vm -- allpara localizar dependências, seguido denpm install isolated- vm@ 7.0.1(ou a versão mínima segura que a sua cadeia de abastecimento exija) e executarnpm rebuildSe o seu ambiente precisa de recompilar módulos nativos. Veja a página oficial do projeto no GitHub para a nota de segurança: GitHub Security Advisory e a entrada do npm: isolated-vm em npm.

Se não puder actualizar imediatamente, aplique atenuações temporárias: evite entregar ivm.Reference a código de origem não confiável; minimize os privilégios do processo que executa as sandbox; encapsule cada sandbox em processos separados com limites de recursos e políticas de sistema operacional (por exemplo, usuários sem privilégios, cgroups, seccomp, namespaces) para reduzir o impacto de um crash ou uma execução arbitrária; e monitorize sinais de exploração (crashes reiterados do processo, comportamentos anormais, logs fora do comum). Além disso, faça auditoria de dependências transitórias com ferramentas como Dependabot, Snyk ou npm audit para identificar bibliotecas que arrastem isolated-vm.

Vulnerabilidade em isolated-vm permite corrupção de memória e escape de sandbox
Imagem gerada com IA.

Do ponto de vista de design de software, este incidente lembra que a segurança de uma sandbox não depende apenas do isolamento de V8 – os Isolates mantiveram a fronteira segundo os pesquisadores – mas também da correta implementação do código nativo que faz de ponte entre limites de memória. Como refere Endor Labs, uma "primitiva sólida" (o limite de isolate de V8) pode ser comprometida por erros na camada de binding em C++.

Finalmente, ações recomendadas a curto prazo para equipamentos de segurança: priorizar o adesivo em implantaçãos expostos, rever a política de concessão de capacidades a sandboxes (evitar referências quando não forem estritamente necessárias), configurar alertas por quedas de processos e realizar uma revisão forense de incidentes se detectarem sinais de exploração. A médio prazo, convém reavaliar o modelo de execução de código não confiável - por exemplo, mover cargas a processos totalmente isolados a nível do sistema ou utilizar tecnologias de separação de privilégios mais robustas - e manter um canal de atualização automatizado para dependências críticas. Para entender como funcionam as Isolates a nível de motor e por que a camada de marshalling é tão sensível, você pode consultar a documentação de V8: V8 Isolates — v8.dev.

Em resumo: existe uma falha verificada em isolated-vm que permite corrupção de memória desde sandboxes e foi corrigida; a ação imediata é atualizar e revisar a concessão de capacidades a convidados, enquanto a incerteza sobre uso em ataques reais requer vigilância e auditoria contínua.

Cobertura

Relacionadas

Mas notícias do mesmo assunto.