
Schutz vor bösartigen Open-Source-Paketen 🤖
Finde bösartige Pakete, Schwachstellen und riskante CI-Workflows, bevor sie die Produktion erreichen.
Installation • Dokumentation • Befehle • Policy • Discord
[!NOTE] Dieser Branch ist vet v2, in der Alpha-Phase. vet v1 befindet sich auf
mainund bleibt die neueste Version. Die v2.0.0 Versionshinweise ordnen jeden v1-Befehl und jedes Flag v2 zu.
Deine Abhängigkeiten, deine GitHub-Actions-Workflows und deine KI-Agent-Konfigurationen führen Code aus, den du nicht geschrieben hast. vet findet das Risiko darin.
vet benötigt kein Konto und sendet keinen Quellcode.
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
| Kanal | Befehl |
|---|---|
| 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 installiert eine Version einen Tag nach ihrer Veröffentlichung. install.md enthält den Befehl für den neuesten Build, die Release-Binärdateien und die Build-Attestierungen.
| Ziel | Beispiel |
|---|---|
| Ein Verzeichnis (der Standard) | vet scan, vet scan ./service |
| Ein Git-Repository | vet scan https://github.com/safedep/vet |
| Ein Container-Image | vet scan oci://alpine:3.20, vet scan image.tar |
| Ein SBOM (CycloneDX oder SPDX) | vet scan sbom.cdx.json |
| Ein Paket | vet scan pkg:npm/[email protected] |
| Die Tools auf dieser Maschine | vet endpoint audit |
vet liest die Lockfiles und Manifeste von npm, PyPI, Go, Maven, Gradle, Cargo, RubyGems, NuGet, Packagist, Pub und mehr. Es liest auch die GitHub-Actions-Workflows und die KI-Agent-Konfigurationen des Ziels. Es installiert oder führt keines davon aus. Controls verwandeln diese Daten in Findings. Siehe controls.md.
Eine Policy entscheidet, wann ein Scan fehlschlägt. Speichere diese Datei als 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 sie am letzten Scan, ohne einen neuen Scan. Wende sie dann auf einen Pull Request an:
vet report show last --policy vet-policy.yml
vet scan --base-ref origin/main --policy vet-policy.yml
Nach ihrem Ablaufdatum verbirgt die Unterdrückung das Finding nicht mehr. Lies policy.md für die Regelfelder, weitere Regeln und den Agent Skill, der eine Policy für dich schreibt.
vet ci init fügt sie einem Repository hinzu.--base-ref meldet nur die Pakete und Workflows, die eine Änderung hinzufügt.vet endpoint audit listet die KI-Tools, MCP-Server, Editor-Erweiterungen und
globalen npm-Pakete auf einer Entwicklermaschine auf und prüft sie auf Malware.