No pacote NPM pac-resolver, que tem mais de 3 milhões de downloads por semana, foi identificada uma vulnerabilidade (CVE-2021-23406) que permite que um código JavaScript próprio seja executado no contexto da aplicação ao enviar solicitações HTTP a partir de projetos Node.js que suportam a função de auto-configuração do servidor proxy.
O pacote pac-resolver faz a análise de arquivos PAC, que incluem um script de auto-configuração de servidor proxy. O arquivo PAC contém código JavaScript comum com a função FindProxyForURL, que define a lógica de escolha do proxy com base no host e na URL solicitada. A essência da vulnerabilidade é que o código JavaScript era executado no pac-resolver utilizando a API VM fornecida pelo Node.js, que permite a execução do código JavaScript em outro contexto do motor V8.
Essa API é explicitamente marcada na documentação como inadequada para a execução de código não confiável, pois não fornece isolamento completo do código executado e permite o acesso ao contexto original. O problema foi corrigido na versão pac-resolver 5.0.0, que passou a utilizar a biblioteca vm2, oferecendo um nível mais alto de isolamento, apropriado para a execução de código não confiável.

Ao usar a versão vulnerável do pac-resolver, um atacante, ao transmitir um arquivo PAC especialmente formatado, pode conseguir executar seu código JavaScript no contexto do código do projeto que utiliza Node.js, se esse projeto utilizar bibliotecas que têm dependências com o pac-resolver. A biblioteca mais popular entre as problemáticas é o Proxy-Agent, que está listada como dependência em 360 projetos, incluindo urllib, aws-cdk, mailgun.js e firebase-tools, totalizando mais de três milhões de downloads por semana.
Se um aplicativo relacionado por dependências ao pac-resolver carrega um arquivo PAC fornecido por um sistema que suporta o protocolo de auto-configuração de proxy WPAD, então, para inserir arquivos PAC maliciosos, criminosos com acesso à rede local podem explorar a disseminação das configurações de proxy via DHCP.
Fonte: opennet.ru
