
Proteggiti da pacchetti open source dannosi 🤖
Trova pacchetti malevoli, vulnerabilità e workflow CI rischiosi prima che raggiungano la produzione.
[!NOTE] Questo branch è vet v2, in alpha. vet v1 è su
maine rimane l'ultima release. Le note di rilascio v2.0.0 mappano ogni comando e flag di v1 su v2.
Le tue dipendenze, i tuoi workflow GitHub Actions e le configurazioni dei tuoi agenti AI eseguono codice che non hai scritto. vet trova il rischio in essi.
vet non richiede alcun account e non invia codice sorgente.
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
| Canale | 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 |
mise installa una release un giorno dopo la sua pubblicazione. install.md contiene il comando per la build più recente, i binari di release e le attestazioni di build.
| Target | Esempio |
|---|---|
| Una directory (il default) | vet scan, vet scan ./service |
| Un repository git | vet scan https://github.com/safedep/vet |
| Un'immagine container | vet scan oci://alpine:3.20, vet scan image.tar |
| Un SBOM (CycloneDX o SPDX) | vet scan sbom.cdx.json |
| Un pacchetto | vet scan pkg:npm/[email protected] |
| Gli strumenti su questa macchina | vet endpoint audit |
vet legge i lockfile e i manifest di npm, PyPI, Go, Maven, Gradle, Cargo, RubyGems, NuGet, Packagist, Pub e altri. Legge anche i workflow GitHub Actions e le configurazioni degli agenti AI del target. Non ne installa né esegue alcuno. I controlli trasformano questi dati in risultati. Vedi controls.md.
Una policy decide quando una scansione fallisce. Salva questo file come 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
Testala sull'ultima scansione, senza una nuova scansione. Poi applicala a una pull request:
vet report show last --policy vet-policy.yml
vet scan --base-ref origin/main --policy vet-policy.yml
Dopo la sua data di scadenza, la soppressione non nasconde più il risultato. Leggi policy.md per i campi delle regole, altre regole e la Agent Skill che scrive una policy per te.
vet ci init la aggiunge a un repository.--base-ref segnala solo i pacchetti e i workflow che una modifica aggiunge.vet endpoint audit elenca gli strumenti AI, i server MCP, le estensioni dell'editor e
i pacchetti npm globali su una macchina di sviluppo, e li verifica alla ricerca di malware.