Skip to main content

Snyk revela vulnerabilidades na segurança da cadeia de suprimentos em extensões do Visual Studio Code

Escrito por

26 de maio de 2021

0 minutos de leitura

Temos observado um crescimento constante de incidentes de segurança da cadeia de suprimentos em todo o mundo. De falhas de segurança em gerenciadores de pacotes de código aberto sendo exploradas a sistemas de integração contínua comprometidos e artefatos de software recebendo backdoors. Agora, esses incidentes começam a chegar ao lugar onde os desenvolvedores passam a maior parte do tempo: o ambiente de desenvolvimento integrado, mais especificamente, a IDE Visual Studio Code.

Neste artigo:

Até pouco tempo atrás, nenhuma vulnerabilidade de segurança havia sido descoberta em extensões do VS Code, o que criava uma falsa sensação de segurança para milhões de desenvolvedores. Mas agora, a Snyk descobriu e divulgou vulnerabilidades que representam uma ameaça real e iminente para quem usa essas extensões e interage com agentes maliciosos. O risco é tão grave que é possível executar código remotamente na máquina de um desenvolvedor simplesmente convencendo-o a clicar em um link.

Essa nova ameaça à segurança da cadeia de suprimentos de extensões do VS Code pode se tornar um novo terreno para ataques e afetar mais de 2.000.000 de desenvolvedores. Vamos analisar o caso em detalhes.

Um Marketplace de extensões do VS Code vulnerável

O Marketplace de extensões do VS Code reúne cerca de 25.000 extensões. Na prática, elas são arquivos compactados com código JavaScript, semelhantes a pacotes npm. Além disso, dependem do ecossistema npm como fonte de dependências de terceiros para ajudar a criar as extensões.

Assim como o registro npm, o Marketplace de extensões do VS Code é um ecossistema aberto: qualquer desenvolvedor pode se cadastrar e enviar extensões. Depois do envio e da confirmação, elas ficam disponíveis para desenvolvedores na IDE do VS Code.

Para que algumas dessas explorações funcionem, é preciso que um desenvolvedor use ativamente a extensão. Veja algumas das extensões vulneráveis identificadas pela Snyk:

  • Open in Default Browser — mais de 520.000 downloads. Permite abrir arquivos em um navegador para inspecioná-los de forma rápida e fácil (algo comum com arquivos HTML).

  • Instant Markdown — mais de 120.000 downloads. Permite analisar a sintaxe Markdown de um arquivo e renderizá-lo como HTML para abrir em um navegador. É semelhante à forma como um arquivo Markdown, como README.md, aparece na página inicial de um repositório do GitHub.

Ao olhar para essas extensões populares, quantas vezes instalamos uma extensão no editor sem nos dar conta de que estamos permitindo a entrada de código escrito por alguém desconhecido? Um código que pode ter acesso — ou até mesmo controle — sobre o ambiente de desenvolvimento? Quantas vezes os desenvolvedores podem ter sido colocados em risco simplesmente por usar uma extensão?

O impacto de extensões vulneráveis do VS Code nos desenvolvedores

À primeira vista, uma extensão pode parecer apenas um recurso adicional da IDE, mas seu potencial de impacto é muito maior. Uma extensão comprometida no laptop de um desenvolvedor significa que, no mínimo, o invasor abriu uma brecha no firewall e obteve acesso às redes corporativas internas. Agora, pense nas informações confidenciais às quais os desenvolvedores têm acesso. Mesmo que o invasor só consiga ler arquivos, como em uma clássica vulnerabilidade de travessia de diretório, isso permite coletar segredos, como arquivos de configuração do ambiente ou chaves SSH do próprio desenvolvedor, o que pode levar à obtenção de acesso de leitura e gravação aos repositórios de código-fonte.

Como você pode ver, um ambiente de desenvolvimento é bastante poderoso e costuma ser considerado uma entidade confiável dentro de uma rede. Por isso, comprometer desenvolvedores é um alvo muito atraente para ataques.

Na verdade, uma vulnerabilidade de segurança semelhante afetava o runtime do Node.js em novembro de 2018. Identificada como CVE-2018-12120, ela colocava os desenvolvedores em uma situação potencialmente perigosa porque a porta do depurador do runtime escutava em todas as interfaces de rede disponíveis. Imagine depurar um aplicativo Node.js ou JavaScript executando node --debug em uma rede pública e insegura, como a de uma cafeteria. Isso poderia permitir que invasores se conectassem à interface de depuração e executassem código JavaScript arbitrário no ambiente de desenvolvimento.

Se você acha que o exemplo acima é um caso extremo, saiba que a Rapid7 transformou em arma uma exploração que tem como alvo específico essa vulnerabilidade de injeção de comandos no depurador do Node.js, criando um módulo para o framework de exploração Metasploit.

Atacando extensões do VS Code

Vamos analisar em detalhes uma das extensões vulneráveis e ver como um invasor pode explorá-la em benefício próprio.

Na demonstração a seguir, vamos explorar uma vulnerabilidade de código na extensão Instant Markdown. Depois de instalá-la pelo Marketplace, você verá como é comum visualizar arquivos Markdown:

Página da extensão Instant Markdown para Visual Studio Code, mostrando o código Markdown no editor e a prévia no navegador.

Quando você visualiza um arquivo Markdown, como o README.md de um repositório, a extensão inicia um servidor web que escuta em localhost na porta 8090. Você nem precisa abrir o painel de visualização da extensão no VS Code. Ela é iniciada automaticamente em segundo plano.

Se você abrir um arquivo README.md no editor do VS Code e acessar http://localhost:8090, verá o conteúdo do README.md como um arquivo HTML.

O problema é que a extensão Instant Markdown tem uma vulnerabilidade de travessia de diretório. Isso significa que qualquer pessoa com acesso ao servidor localhost pode solicitar e receber qualquer arquivo do ambiente em que o VS Code está sendo executado — basicamente, a máquina do desenvolvedor.

Por exemplo, se eu estivesse usando essa extensão e tivesse um arquivo com o logotipo da Snyk na pasta de downloads, como ~/Downloads/snyk-dog.svg, ao executar o comando curl abaixo no terminal, receberia o conteúdo desse arquivo:

curl "http://localhost:8090/foo/?/../../../../../Downloads/snyk-dog.svg"

Talvez você esteja se perguntando como alguém poderia acessar um arquivo servido por um servidor web local. E se essa pessoa convencesse você a visitar um site? Basta abrir no navegador um site controlado pelo invasor.

Veja o fluxograma a seguir, que explica como contornar problemas relacionados a CORS:

Diagrama de sequência que mostra uma URL maliciosa levando do navegador da vítima, por um iframe e uma extensão do VS Code, até um invasor, expondo arquivos locais secretos.

O vetor de ataque descrito acima combina a vulnerabilidade de travessia de diretório com falsificação de solicitação do lado do servidor e alguns truques engenhosos de JavaScript, como forçar um download no ambiente do usuário e usar um iframe e a API Window.postMessage do navegador para comunicar os dados necessários.

Neste vídeo, você pode ver todo o fluxo em ação. Kirill Efimov, pesquisador de segurança da Snyk, inicia um servidor web sob seu controle, disponibiliza-o pela ngrok para simular um site HTTP acessível pela internet e acaba roubando as chaves SSH de um desenvolvedor que usa o VS Code e uma extensão vulnerável:

Snyk divulga descobertas de pesquisa sobre a segurança da cadeia de suprimentos do VS Code

Este é apenas um exemplo de como os invasores procuram formas de explorar extensões do VS Code e esse vetor da cadeia de suprimentos para atingir desenvolvedores. Na verdade, encontramos outras extensões vulneráveis a vetores de ataque semelhantes, como a LaTeX Workshop, com mais de 1.200.000 downloads.

Antes de compartilhar esses resultados com o público, a Snyk seguiu um processo de divulgação responsável e notificou os mantenedores relevantes sobre os problemas identificados para coordenar uma correção.

Convido você a ler mais sobre os detalhes técnicos do caso da cadeia de suprimentos do VS Code, pesquisado por Raul Onitza-Klugman e Kirill Efimov, pesquisadores de segurança da Snyk. Eles realizaram a pesquisa, criaram provas de conceito e colaboraram com os mantenedores das extensões para corrigir o problema e manter nosso ecossistema seguro.

Como reduzir os riscos de segurança das extensões do VS Code

Se você desenvolve essas extensões ou programa em JavaScript, TypeScript ou Java, pode e deve usar uma ferramenta que ajude a encontrar falhas de segurança enquanto você programa na IDE. Não estou falando de um linter comum, mas do Snyk Code — uma ferramenta de análise estática de segurança de aplicações (SAST) recém-anunciada, que você pode usar diretamente na IDE. Você também pode executá-la pela CLI da Snyk: $ snyk code test.

Veja uma captura de tela do Snyk Code identificando essa vulnerabilidade de travessia de diretório na extensão Instant Markdown para VS Code:

IDE exibindo código TypeScript sinalizado pelo Snyk por uma vulnerabilidade de travessia de diretório de alta gravidade (CWE-23).

Outra forma de encontrar problemas de segurança no código por meio de análise estática em vários repositórios de projetos é importar seus repositórios do GitHub para a Snyk. A plataforma identificará possíveis vulnerabilidades. Veja a mesma vulnerabilidade de travessia de diretório, desta vez destacada no aplicativo web da Snyk:

Painel de análise de código que mostra uma vulnerabilidade grave de Path Traversal em código TypeScript, com a chamada vulnerável a sendFile destacada

Se você usa a IDE do VS Code, deve prestar mais atenção às extensões que instala. Infelizmente, o Marketplace ainda não tem ferramentas integradas para verificar a segurança das extensões. Mas, quando se trata das bibliotecas de código aberto do seu projeto, estejam elas no npm ou em outro lugar, você pode usar a Snyk (é grátis!) para encontrar e corrigir vulnerabilidades de segurança nesses pacotes.

Resumo

Os riscos à segurança da cadeia de suprimentos vão se tornar cada vez maiores, mais profundos e mais direcionados ao ecossistema de desenvolvimento. Esperamos que a leitura dos resultados desta pesquisa ajude você a se conscientizar ainda mais dos possíveis riscos e impactos à segurança.

Se quiser assistir a uma demonstração ao vivo do ataque às extensões do Visual Studio Code, recomendo que acompanhe esta sessão no dia 8 de junho, às 15h UTC, com Liran Tal, diretor de Developer Advocacy na Snyk, e Kirill Efimov, pesquisador de segurança na Snyk:

https://www.youtube.com/watch?v=pkvywMhd30c

I can use VS Code to hack into your development environment

Confira outros estudos de caso muito recomendados sobre o tema:

Leia mais

blog feature snyk container custom base recommendations
Blog

Conheça o Evo Agentic AppSec: segurança que acompanha o ritmo do desenvolvimento com IA

O desenvolvimento impulsionado por IA está avançando mais rápido do que os fluxos de trabalho de segurança tradicionais. O AppSec agentivo da Snyk usa agentes de segurança para encontrar, corrigir e verificar vulnerabilidades continuamente, enquanto as pessoas definem os critérios.

blog feature ai violet
Blog

VulnBump: agentes de IA conseguem corrigir dependências vulneráveis sem quebrar o build?

O VulnBump testa agentes de IA em 307 atualizações reais de dependências. Uma correção só é considerada válida se eliminar a vulnerabilidade e mantiver o build e os testes funcionando.

Blog

Modelos de ponta encontraram as vulnerabilidades. Só o atacante encontrou as cadeias.

A análise estática encontrou as falhas, mas só os testes de ataque em aplicações ativas provaram como elas poderiam ser encadeadas para causar invasões. Uma comparação entre Evo COS, Claude Security e Claude Code Security.