
Proteja-se contra pacotes de código aberto maliciosos 🤖
Encontre pacotes maliciosos, vulnerabilidades e workflows de CI arriscados antes que cheguem à produção.
Instalação • Documentação • Comandos • Política • Discord
[!NOTE] Este branch é o vet v2, em alpha. O vet v1 está em
maine continua sendo a versão mais recente. As notas de versão do v2.0.0 mapeiam cada comando e flag do v1 para o v2.
Suas dependências, seus workflows do GitHub Actions e suas configurações de agentes de IA executam código que você não escreveu. O vet encontra o risco neles.
O vet não precisa de conta e não envia código-fonte.
brew install --cask safedep/tap/vet@edge
vet scan
vet scan --fail-on high # exit 1 on a high or critical finding
vet scan --base-ref origin/main --fail-on high # report only what a pull request changes
vet report show --report sarif=vet.sarif # write SARIF from the saved scan, with no new scan
| Canal | Comando |
|---|---|
| Homebrew | brew install --cask safedep/tap/vet@edge |
| mise | mise use -g 'github:safedep/vet[prerelease=true]@2' |
| Go | go install github.com/safedep/vet/v2/cmd/vet@latest |
| Container | docker run --rm -v "$PWD:/src" -w /src ghcr.io/safedep/vet:v2-latest scan |
O mise instala uma versão um dia após sua publicação. O install.md tem o comando para a build mais recente, os binários de release e as atestações de build.
| Alvo | Exemplo |
|---|---|
| Um diretório (o padrão) | vet scan, vet scan ./service |
| Um repositório git | vet scan https://github.com/safedep/vet |
| Uma imagem de container | vet scan oci://alpine:3.20, vet scan image.tar |
| Um SBOM (CycloneDX ou SPDX) | vet scan sbom.cdx.json |
| Um pacote | vet scan pkg:npm/[email protected] |
| As ferramentas nesta máquina | vet endpoint audit |
O vet lê os lockfiles e manifests de npm, PyPI, Go, Maven, Gradle, Cargo, RubyGems, NuGet, Packagist, Pub e mais. Ele também lê os workflows do GitHub Actions e as configurações de agentes de IA do alvo. Ele não instala nem executa nenhum deles. Os controles transformam esses dados em achados. Veja controls.md.
Uma política decide quando um scan falha. Salve este arquivo como vet-policy.yml:
version: 2
rules:
- id: no-malware
description: A malicious or suspicious package fails the build.
when: finding.family == "malware"
action: fail
- id: no-workflow-injection
when: finding.control_id in ["dangerous-trigger", "template-injection"]
action: fail
- id: no-critical-vulnerability
when: finding.control_id == "vulnerability" && finding.severity == "critical"
action: fail
- id: new-dependency-age
description: A pull request cannot add a version that is less than 14 days old.
when: package.change == "ADDED" && has(package.days_since_publish) && package.days_since_publish < 14
action: fail
suppressions:
- purl: pkg:npm/[email protected]
reason: The upgrade to 4.18.1 is in pull request 42.
expires: 2026-12-31
Teste-a no último scan, sem um novo scan. Depois aplique-a a um pull request:
vet report show last --policy vet-policy.yml
vet scan --base-ref origin/main --policy vet-policy.yml
Após sua data de expiração, a supressão deixa de ocultar o achado. Leia policy.md para os campos de regra, mais regras e a Agent Skill que escreve uma política para você.
vet ci init a adiciona a um repositório.--base-ref reporta apenas os pacotes e workflows que uma mudança adiciona.vet endpoint audit lista as ferramentas de IA, servidores MCP, extensões de editor e
pacotes npm globais em uma máquina de desenvolvedor, e os verifica em busca de malware.