DEV Community

Ronaldo Modesto
Ronaldo Modesto

Posted on

Safeinstall: Um aliado no combate a ataques de Supply chain

Olá, pessoal!

Se você é desenvolvedor ou, pelo menos, envolvido com a área tech, tenho certeza de que já ouviu falar de ataques de supply chain, ou ataques de cadeia de suprimentos.

Esse tipo de ataque tem se tornado cada vez mais frequente, ainda mais com IAs gerando cada vez mais código sem supervisão. Com isso em mente, criei uma ferramenta que visa impedir que dependências comprometidas sejam instaladas em seu projeto, reduzindo o risco de um ataque bem-sucedido de cadeia de suprimentos.

Chega mais para conhecer! E, claro, todo feedback é super bem-vindo. 🙂

Ha e claro, se quiser saber mais sobre o que é supply chain atack, dá uma conferida aqui O que é Suply Chain Attack

A Crise de Segurança na Cadeia de Suprimentos Open Source

Os ataques de supply chain (cadeia de suprimentos) têm aumentado de forma alarmante nos últimos anos. Dados recentes revelam um cenário preocupante:

  • Malware em código aberto subiu 156% de um ano para outro em 2024, com mais de 704 mil pacotes maliciosos identificados desde 2019.
  • Em 2025, houve um aumento de 73% em pacotes open source maliciosos detectados em comparação com 2024.
  • Entre 2020 e 2023, as ameaças em repositórios open source cresceram 1.300%.
  • O custo global anual projetado de ataques de supply chain deve alcançar US$ 60 bilhões em 2025.
  • No ecossistema npm, a atividade maliciosa mais do que dobrou em 2025, representando quase 90% de todo o malware open source detectado.
  • Terceiros comprometidos passaram a representar 30% de todas as violações de dados em 2025.

Instalar dependências sem verificação tornou-se uma operação de risco. Mesmo pacotes populares podem conter vulnerabilidades conhecidas ou, em cenários mais graves, serem comprometidos por atacantes.


O que é o SafeInstall ✅?

O SafeInstall é um wrapper de segurança para comandos de instalação de pacotes que consulta a API do OSV (Open Source Vulnerabilities) para identificar vulnerabilidades conhecidas antes de permitir que a instalação seja concluída. Assim, ele ajuda a reduzir ataques de supply chain alertando o desenvolvedor sobre pacotes vulneráveis antes que eles entrem no projeto.

Repositório da ferramenta 🚀: Github

Benefícios Principais

  1. Verificação antes da instalação — Nada é instalado sem checagem de vulnerabilidades.
  2. Integração com OSV — Usa dados agregados do GitHub Advisory, PyPI Advisory, CVE/NVD, RustSec, Go Vulnerability Database e outros.
  3. Suporte a múltiplos ecossistemas — npm, pip, Go, Cargo, RubyGems, Packagist, Pub.
  4. Instalações em lote — Protege comandos como npm install e pip install -r requirements.txt.
  5. Controle nas suas mãos — Permite confirmar ou cancelar instalações com risco identificado.

A seguir temos mostro exemplos de como a ferramenta funciona e como ela pode auxiliar na proteção desse tipo de ataque.

  • Bloqueando instalação de biblioteca especificando uma versão

blocking specific version

  • Bloqueando instalação de biblioteca utilizando instalação em massa, por exemplo npm i

blocking batch instalation

  • Permitindo instalação de bibliotecas mesmo com vulnerabilidades(ambientes de CI/CD por exemplo)

allowing vulnerable lib

  • Quando uma versão não é especificada, a ferramenta tenta identificar automaticamente a última versão e então analisa para ver se alguma vulnerabilidade é encontrada

identifying lib version automatically

  • Exemplo golang para instalação vulnerável vs instalação de última versão

example golang vulnerable and not vulnerable lib

  • Exemplo de biblioteca python

python example pip lib manager

  • Exemplo de biblioteca sem vulnerabilidades em lotes

batch isntall with no vulnerability

  • Exemplo de biblioteca sem vulnerabilidade

example of lib with no vulnerability


Como Instalar 💥

Pré-requisitos

  • Go 1.25.7+ — Necessário para compilar o SafeInstall e para o osv-scanner.
  • osv-scanner — Necessário para varreduras em lote. É instalado automaticamente pelos scripts de instalação.

Para instalar o osv-scanner manualmente (se necessário):

go install github.com/google/osv-scanner/v2/cmd/osv-scanner@v2
Enter fullscreen mode Exit fullscreen mode

Garanta que $(go env GOPATH)/bin esteja no seu PATH.

Instalação por plataforma

Windows (PowerShell):

.\scripts\install.ps1
Enter fullscreen mode Exit fullscreen mode

Windows (Prompt de Comando):

scripts\install.bat
Enter fullscreen mode Exit fullscreen mode

Linux / macOS:

chmod +x scripts/install.sh
./scripts/install.sh
Enter fullscreen mode Exit fullscreen mode

Compilação manual:

go build -o safeinstall .
Enter fullscreen mode Exit fullscreen mode

Comandos e Uso

Sintaxe básica

Sintaxe nova (recomendada):

safeinstall [-y|--yes] <ecosistema> "<pacote>"
Enter fullscreen mode Exit fullscreen mode

Sintaxe legada (comando completo):

safeinstall [-y|--yes] "<comando de instalação>"
Enter fullscreen mode Exit fullscreen mode

Instalação de pacote único

Ao especificar um pacote com versão, o SafeInstall:

  1. Consulta a API do OSV em busca de vulnerabilidades conhecidas
  2. Aplica o algoritmo IsVulnerable para saber se sua versão exata é afetada
  3. Se houver vulnerabilidade: exibe CVE/GHSA em vermelho e pede confirmação
  4. Se estiver seguro: exibe mensagem em verde e prossegue automaticamente

Exemplos (sintaxe nova):

safeinstall npm "express"
safeinstall npm "express@4.17.1"
safeinstall pip "requests==2.25.1"
safeinstall pip "jinja2"
safeinstall go "golang.org/x/crypto@v0.1.0"
Enter fullscreen mode Exit fullscreen mode

Exemplos (sintaxe legada):

safeinstall "npm i express"
safeinstall "pip install -r requirements.txt"
Enter fullscreen mode Exit fullscreen mode

Instalação em lote (npm i, pip install -r, etc.)

Para comandos que não especificam um único pacote (ex.: npm install, npm ci, pip install -r requirements.txt):

  1. O osv-scanner roda antes da instalação, analisando manifests e lockfiles
  2. Se forem encontradas vulnerabilidades e você não passou -y/--yes, o SafeInstall pede confirmação
  3. Se você recusar, a instalação é cancelada — pacotes vulneráveis não são instalados
  4. Se não houver vulnerabilidades (ou você aceitar o risco), o comando de instalação é executado
  5. Após a instalação, o osv-scanner roda novamente para verificar as dependências instaladas

Exemplos:

safeinstall "npm install"
safeinstall "npm ci"
safeinstall "pip install -r requirements.txt"
Enter fullscreen mode Exit fullscreen mode

Modo CI/CD

Use -y ou --yes para aceitar automaticamente os riscos em ambientes automatizados:

safeinstall -y "npm install express@4.17.1"
Enter fullscreen mode Exit fullscreen mode

Desinstalação

Para remover o SafeInstall por completo:

safeinstall --uninstall
# ou
safeinstall -u
# ou
safeinstall uninstall
Enter fullscreen mode Exit fullscreen mode

Ou use os scripts de desinstalação:

  • Windows (PowerShell): .\scripts\uninstall.ps1
  • Windows (CMD): scripts\uninstall.bat
  • Linux/macOS: ./scripts/uninstall.sh

Ecossistemas Suportados

Ecossistema Gerenciador de Pacotes Exemplo
npm npm, yarn, pnpm safeinstall npm "express@4.17.1"
PyPI pip, pip3, poetry safeinstall pip "requests==2.25.1"
Go go get safeinstall go "golang.org/x/crypto@v0.1.0"
crates.io cargo safeinstall "cargo add serde@1.0"
RubyGems gem safeinstall "gem install rails:7.0"
Packagist composer Pacotes PHP
Pub pub Pacotes Dart

Como o SafeInstall Reduz o Risco de Supply Chain

  1. Bloqueio proativo — Evita instalações de pacotes conhecidamente vulneráveis ou maliciosos.
  2. Uso de dados confiáveis — OSV agrega bases como GitHub Advisory, PYSEC, CVE e RustSec.
  3. Avaliação precisa — Usa o algoritmo oficial do OSV (IncludedInVersions, IncludedInRanges, BeforeLimits).
  4. Dupla verificação em lote — Analisa antes e depois da instalação em cenários como npm install e pip install -r.
  5. Decisão consciente — O desenvolvedor escolhe se aceita o risco em casos específicos.
  6. Integração simples — Substitui chamadas diretas aos gerenciadores de pacotes com um comando único.

Requisitos

  • Conexão com a internet para consultas à API

- Go e osv-scanner no PATH (para instalações em lote)


Fontes:

Top comments (0)