
악성 오픈소스 패키지로부터 보호 🤖
악성 패키지, 취약점, 위험한 CI 워크플로를 프로덕션에 도달하기 전에 찾아냅니다.
[!NOTE] 이 브랜치는 알파 단계의 vet v2입니다. vet v1은
main에 있으며 최신 릴리스로 유지됩니다. v2.0.0 릴리스 노트에서 각 v1 명령어와 플래그가 v2에서 어떻게 대응되는지 확인할 수 있습니다.
여러분의 의존성, GitHub Actions 워크플로, AI 에이전트 설정은 여러분이 작성하지 않은 코드를 실행합니다. vet은 그 안에서 위험을 찾아냅니다.
vet은 계정이 필요 없고 소스 코드를 전송하지 않습니다.
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
| 채널 | 명령어 |
|---|---|
| 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 |
| 컨테이너 | docker run --rm -v "$PWD:/src" -w /src ghcr.io/safedep/vet:v2-latest scan |
mise는 릴리스가 게시된 다음 날 설치합니다. 최신 빌드 명령어, 릴리스 바이너리, 빌드 증명은 install.md에서 확인할 수 있습니다.
| 대상 | 예시 |
|---|---|
| 디렉터리 (기본값) | vet scan, vet scan ./service |
| git 저장소 | vet scan https://github.com/safedep/vet |
| 컨테이너 이미지 | vet scan oci://alpine:3.20, vet scan image.tar |
| SBOM (CycloneDX 또는 SPDX) | vet scan sbom.cdx.json |
| 단일 패키지 | vet scan pkg:npm/[email protected] |
| 이 머신의 도구들 | vet endpoint audit |
vet은 npm, PyPI, Go, Maven, Gradle, Cargo, RubyGems, NuGet, Packagist, Pub 등의 락파일과 매니페스트를 읽습니다. 또한 대상의 GitHub Actions 워크플로와 AI 에이전트 설정도 읽습니다. 이들을 설치하거나 실행하지는 않습니다. 컨트롤이 이 데이터를 파인딩으로 변환합니다. controls.md를 참고하세요.
정책은 스캔이 실패하는 시점을 결정합니다. 다음 파일을 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
새 스캔 없이 마지막 스캔에 대해 테스트해 보세요. 그런 다음 풀 리퀘스트에 적용하세요:
vet report show last --policy vet-policy.yml
vet scan --base-ref origin/main --policy vet-policy.yml
만료일이 지나면 해당 억제는 더 이상 파인딩을 숨기지 않습니다. 규칙 필드, 더 많은 규칙, 그리고 정책을 대신 작성해 주는 Agent Skill에 대해서는 policy.md를 읽어보세요.
vet ci init이 저장소에 이를 추가합니다.--base-ref는 변경이 추가한 패키지와 워크플로만 보고합니다.vet endpoint audit은 개발자 머신의 AI 도구, MCP 서버, 에디터 확장,
전역 npm 패키지를 나열하고 악성 여부를 검사합니다.| 페이지 | 읽어야 할 이유 |
|---|---|
| 설치 | 모든 채널과 릴리스 검증 방법 |
| 명령어 | 모든 명령어, 플래그, 종료 코드 |
| 컨트롤 | 컨트롤과 그 옵션 |
| 정책 | 규칙, 억제, 게이트 |
| 출력 | 리포트 형식, 저장된 스캔, 구성 |
| CI 및 AI 에이전트 | GitHub Actions, GitLab, Bitbucket, 에이전트 모드 |
| 인벤토리 | 코드 사용, AI 및 암호화, xBOM 및 CBOM |
vet은 각 패키지의 식별 정보(생태계, 이름, 버전)를 SafeDep에 전송하여 해당 패키지에 대한 데이터를 받습니다. vet은 소스 코드와 파일 내용을 전송하지 않습니다.
vet은 클라우드에서도 실행됩니다. SafeDep Cloud는 관리할 인프라 없이 여러분의 저장소에서 vet을 실행합니다.