
Protégez-vous contre les packages open source malveillants 🤖
Détectez les paquets malveillants, les vulnérabilités et les workflows CI à risque avant qu'ils n'atteignent la production.
[!NOTE] Cette branche est vet v2, en alpha. vet v1 est sur
mainet reste la dernière version publiée. Les notes de version v2.0.0 font correspondre chaque commande et option de v1 à v2.
Vos dépendances, vos workflows GitHub Actions et vos configurations d'agents IA exécutent du code que vous n'avez pas écrit. vet y détecte les risques.
vet ne nécessite aucun compte et n'envoie aucun code source.
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 | Commande |
|---|---|
| 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 |
| Conteneur | docker run --rm -v "$PWD:/src" -w /src ghcr.io/safedep/vet:v2-latest scan |
mise installe une version un jour après sa publication. install.md contient la commande pour la version la plus récente, les binaires de version et les attestations de build.
| Cible | Exemple |
|---|---|
| Un répertoire (par défaut) | vet scan, vet scan ./service |
| Un dépôt git | vet scan https://github.com/safedep/vet |
| Une image de conteneur | vet scan oci://alpine:3.20, vet scan image.tar |
| Un SBOM (CycloneDX ou SPDX) | vet scan sbom.cdx.json |
| Un paquet | vet scan pkg:npm/[email protected] |
| Les outils sur cette machine | vet endpoint audit |
vet lit les lockfiles et les manifestes de npm, PyPI, Go, Maven, Gradle, Cargo, RubyGems, NuGet, Packagist, Pub et plus encore. Il lit également les workflows GitHub Actions et les configurations d'agents IA de la cible. Il n'en installe ni n'en exécute aucun. Les contrôles transforment ces données en findings. Voir controls.md.
Une politique décide quand un scan échoue. Enregistrez ce fichier sous 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
Testez-la sur le dernier scan, sans nouveau scan. Puis appliquez-la à une pull request :
vet report show last --policy vet-policy.yml
vet scan --base-ref origin/main --policy vet-policy.yml
Après sa date d'expiration, la suppression ne masque plus le finding. Lisez policy.md pour les champs de règle, plus de règles et l' Agent Skill qui écrit une politique pour vous.
vet ci init l'ajoute à un dépôt.--base-ref ne rapporte que les paquets et workflows qu'un changement ajoute.vet endpoint audit liste les outils IA, les serveurs MCP, les extensions d'éditeur et
les paquets npm globaux sur une machine de développeur, et les vérifie pour détecter des malwares.