ai-jail
다중 OS 샌드박스로 AI 에이전트를 제한된 환경에서 실행, 완전 안전은 아니지만 충분히 안전
VDB는 단일 OSV 호환 API로 패키지·MCP 서버·AI 모델까지 스캔하는 오픈 취약점 데이터베이스
Open vulnerability database that scans packages + MCP servers + AI models through a single OSV-compatible API. Covers slopsquatting, MCP scope risks, and model artifact issues that CVE/OSV miss.
보안PythonGitHub @0pstech온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기GitHub Action: scan your lockfile or SBOM against VDB and fail the build on exploited or hallucinated dependencies
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Scan your lockfile or SBOM against VDB on every push: known CVEs, slopsquatting, CISA KEV — with copy-pasteable fix commands in the job summary. One step, no install.
# .github/workflows/vdb.yml
name: VDB scan
on: [push, pull_request]
jobs:
vdb:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: 0pstech/vdb-scan-action@v1
with:
api-key: ${{ secrets.VDB_API_KEY }} # free at https://vdb.ai.kr/signup
The dependency file is auto-detected (package-lock.json, yarn.lock,
pnpm-lock.yaml, requirements.txt, go.sum, Cargo.lock, Gemfile.lock,
composer.lock, CycloneDX/SPDX SBOMs, …).
| Input | Default | Meaning |
|---|---|---|
file | (auto-detect) | Path to the SBOM / dependency file |
api-key | — | vdb_… key. Recommended: anonymous calls share the runner IP pool's small lifetime trial |
fail-on | high | Fail at/above this severity: critical / high / medium / low / never |
api-url | https://vdb.ai.kr | Self-hosted VDB origin |
harden | false | Also run call-site hardening on Python code — see below |
harden-manifest | (auto-detect) | Lockfile / SBOM for the hardening graph |
harden-path | . | Source tree (or one file) to analyze |
harden-target | 0.2 | Project risk the fix combination should get under |
harden-fail-on | open | open / incomplete / never |
critical, high, medium, low, kev, components-matched — use them in
later steps:
- uses: 0pstech/vdb-scan-action@v1
id: vdb
with:
api-key: ${{ secrets.VDB_API_KEY }}
fail-on: never # report-only mode
- if: steps.vdb.outputs.kev != '0'
run: echo "::warning::KEV finding — patch before release"
harden: true)The SBOM scan says which packages have advisories. Hardening answers the
question behind it for Python projects: can attacker-controlled data
actually reach a dangerous sink through your dependencies? It runs the
published CLI (uvx --from vdb-mcp vdb harden) on the runner, decides the
taint paths, scores the project, and ranks what to fix first. Your source
never leaves the runner as text — the CLI ships an abstracted IR (call
sites and dataflow, literals masked); vdb harden . --emit-ir prints
exactly what is sent.
# .github/workflows/vdb.yml
name: VDB scan + harden
on: [push, pull_request]
jobs:
vdb:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: 0pstech/vdb-scan-action@v1
with:
api-key: ${{ secrets.VDB_API_KEY }} # optional — see "Keyless" below
harden: true
harden-manifest: uv.lock # omit to auto-detect
harden-target: 0.2
harden-fail-on: open
| Input | Default | Meaning |
|---|---|---|
harden | false | Turn the hardening step on |
harden-manifest | (auto-detect) | The lockfile / SBOM the dependency graph is resolved from. Empty = the first of uv.lock, poetry.lock, requirements.txt, *.cdx.json in the workspace root. A lockfile gives the sharpest answer; a flat requirements.txt works but carries no transitive edges |
harden-path | . | Source tree (or one file) to analyze — set it in a monorepo |
harden-target | 0.2 | Project risk (0–1) the ranked combination of fixes should get under |
harden-fail-on | open | open: fail when a decided dataflow path is open · incomplete: also fail when the analysis could not decide the paths (missing summaries) · never: report only |
What happens on the runner:
uv is set up with astral-sh/setup-uv
(falls back to pip install uv on runners where that step is skipped).uvx --from vdb-mcp vdb harden <path> --manifest <manifest> runs and
its output is printed in full. Its exit code is the verdict:
0 clean, 1 open paths, 2 incomplete (nothing could be decided —
absence is not a safety determination).--remediate --target <target>
fetches the ranking — each candidate (upgrade a package, harden a call
site, remove a package) with its risk reduction, cost, and the paths it
closes, plus the cheapest combination that reaches the target. The
ranking lands in the job summary. A clean run makes one call, not two.harden-fail-on. A refused or unreachable call is
reported as an error (status error), never as a verdict.Outputs: harden-status (clean / open / incomplete / error),
harden-risk (the project score, an interval when incomplete) and
harden-paths (open decided paths):
- uses: 0pstech/vdb-scan-action@v1
id: vdb
with:
harden: true
harden-fail-on: never # report-only
- if: steps.vdb.outputs.harden-status == 'open'
run: echo "::warning::${{ steps.vdb.outputs.harden-paths }} open dataflow path(s), risk ${{ steps.vdb.outputs.harden-risk }}"
Keyless. The hardening endpoints answer without a key on a per-address
allowance: 3 analyses an hour and 10 a day per address, projects up to
200 dependencies, nothing stored, upgrades estimated rather than
re-composed. The step summary says when a run was keyless and how much of
the hour's allowance is left. GitHub-hosted runners share address pools,
so a busy repository will hit the allowance — a free key
(api-key: input, https://vdb.ai.kr/signup) lifts it, keeps the
project so it is re-scored when a package on a path changes, and signs
the verification evidence.
Scope: dataflow into your dependencies, plus your own standard-library calls that run commands, deserialize, decompress or open connections. File paths and regular expressions in your own code are not examined — use a static analyser for those. Python only for now.
npm install [email protected]-style) per finding.python3 + curl (preinstalled on all GitHub-hosted images);
harden: true adds uv, installed by the action itself.fail-on: never.uvx vdb-mcp..github/workflows/test.yml) runs the step's
logic against a fake CLI (tests/test_harden.py) and the whole action
on the example project under tests/fixture/.Elastic License 2.0 — free to use, including inside commercial organizations and CI. The only restrictions: you may not offer this software to third parties as a hosted or managed service, or resell it as a product. Beyond that: [email protected].