TECHDEV · Flagship · Công cụ mã nguồn mở
vetgate
Cổng kiểm tra trước khi chạy, chạy local, xác định, cho phần mềm mà agent sắp cài đặt. Gọi nó thay vì chạy lệnh cài đặt: một lần gọi, một kết luận, mỗi phát hiện đều kèm đúng chuỗi bằng chứng đã khớp.
TypeScript · MCP server + CLI · MIT · Node 20+ · Không cần thư viện runtime ngoài MCP SDK · Không dùng model, không cần tài khoản, không cần API key, không có điểm số kết luận.
Thời điểm mà công cụ chặn
Agent cài đặt một package sẽ chạy hook postinstall trước khi bất kỳ ai đọc output. Kiểm tra sau khi cài đặt, kiểm tra PR và dashboard đều đứng sai phía của thời điểm đó: khi chúng chạy, payload đã kích hoạt. vetgate đứng trước khi chạy: agent gọi nó, đọc kết luận, rồi mới quyết định cài đặt, cài với --ignore-scripts, ghim theo digest, hay hỏi người dùng.
Nếu coding agent của bạn cài package, action hay script thay bạn, mỗi lần cài đều chạy mà không được kiểm tra — vetgate là bước kiểm tra chạy trước.
Công cụ kiểm tra gì
| Công cụ / lệnh | Đầu vào | Việc làm |
|---|---|---|
vet_package / npm:name@version | Tên npm và version chính xác | Tải tarball đã publish, kiểm tra, không bao giờ chạy nó |
vet_action / action:owner/repo@ref | Ref GitHub Action | Chỉ kiểm tra dạng local: đã ghim SHA, tag có thể thay đổi, hay không ghim |
vet_script / url:https://... | URL script | Lấy text (timeout 10s, giới hạn 1MB), quét, không bao giờ chạy nó |
Đường mặc định không gửi gì đi đâu ngoài việc tải chính artifact (vet_package) và lấy text script (vet_script, được ghi rõ trong manifest kết luận). Mọi phân tích đều local. local: là chế độ fixture cho demo offline; không phải tính năng MCP đã ship.
Kết luận
| Kết luận | Ý nghĩa | Mã thoát |
|---|---|---|
| ALLOW | Không có phát hiện. | 0 |
| REVIEW | Có phát hiện nhưng không có phát hiện mức high. Kèm safeAction (cài với --ignore-scripts, ghim theo digest, hoặc hỏi người dùng) — không bao giờ âm thầm ALLOW và không bao giờ DENY chỉ vì tín hiệu yếu. | 1 |
| DENY | Có phát hiện mức high. | 1 |
Mỗi phát hiện đều kèm chuỗi bằng chứng, cắt còn 120 ký tự. Phát hiện không có bằng chứng là bug. Tính xác định: cùng input bytes và cùng rules version cho cùng kết luận, trừ manifest.checkedAt.
Quy tắc (v1)
DENY: install script, file .js/.sh được quét, hoặc text script từ xa vừa đọc credential hoặc biến môi trường VỪA gửi dữ liệu ra mạng trong cùng text; chuỗi tải-và-chạy (curl|sh, curl|bash, wget|sh, wget|bash, curl|node, PowerShell IEX với URL http(s)); dấu hiệu làm rối (eval(atob(, base64 rồi eval, String.fromCharCode từ 10 đối số trở lên, escape hex \x dày đặc) kết hợp với gọi mạng; typosquat — tên package cách đúng 1 ký tự Levenshtein so với tên package phổ biến; ref action là :latest, không tag, hoặc sai dạng.
REVIEW (không bao giờ DENY một mình): có install script; thiếu trường license; ref action là tag có thể thay đổi (v4, main, tag semver), kèm khuyến nghị ghim digest; ký tự zero-width hoặc bidirectional-override trong text script; script từ xa chứa URL ra ngoài nhưng không có mẫu DENY.
Bộ quy tắc đầy đủ, mẫu và fixture kích hoạt: docs/RULES.md trong repo. Danh sách typosquat là mẫu cố định 39 package nổi tiếng, KHÔNG đầy đủ — tên không có trong danh sách chỉ là chưa được kiểm tra typosquat, không bao giờ được tuyên bố là an toàn vì lý do đó.
Cách dùng
# MCP server (xem examples/mcp-config.json trong repo)
{
"mcpServers": {
"vetgate": { "command": "npx", "args": ["-y", "vetgate", "serve"] }
}
}
# hoặc chạy trực tiếp qua stdio:
vetgate serve
# CLI
vetgate check npm:react@18.3.1
vetgate check action:actions/checkout@v4
vetgate check url:https://example.com/install.sh# Build từ source
git clone https://github.com/techdevfun/vetgate.git
cd vetgate
npm ci
npm run build
npm testLệnh và config chép từ README của vetgate (v0.1.0). Cần Node 20 trở lên. CLI in Verdict JSON ra stdout và một dòng tóm tắt ra stderr. Với vet_script, việc lấy text script tự nó là một lần fetch mạng — manifest kết luận ghi rõ điều đó, trong khi mọi phân tích đều local và script không bao giờ được chạy.
Số liệu đã đo (README, bộ fixture)
- Bộ fixture: 15 fixture tự dựng (không malware thật, không fetch gì) — ALLOW 4, DENY 6, REVIEW 5. Mọi fixture mẫu độc hại đều DENY, mọi fixture lành đều ALLOW, mọi fixture tín hiệu yếu đều REVIEW.
- Thăm dò false-positive: 10 nội dung fixture lành — 0 DENY.
- Tính xác định: cùng nội dung package kiểm tra hai lần cho kết luận giống hệt sau khi bỏ
manifest.checkedAt. - Độ trễ trên bộ fixture (3.000 lần kiểm tra có đo giờ, chỉ tính phân tích, không tính thời gian tải mạng): trung vị 0,006 ms, p95 0,075 ms, trung bình 0,026 ms mỗi lần kiểm tra. Chạy lại bằng
scripts/measure-latency.mjs. - Bộ test: 26 test, tất cả đều đạt.
Đây KHÔNG phải gì — và đối thủ hơn chúng ta ở đâu
- Không có trong v1: hệ sinh thái khác (chỉ npm — PyPI, Maven, Go, Ruby, Rust, PHP đều chưa có); kiểm tra skill/config MCP server; kiểm tra layer container image; giám sát, quét lại, fix PR, dashboard, tài khoản, cloud API, ngôn ngữ policy, hay tra cứu enrichment mạng; bất kỳ tuyên bố nào về họ malware ngoài danh sách quy tắc đã nêu.
- SafeDep
vethơn về độ rộng và phát hiện độc hại (nhiều hệ sinh thái, hỗ trợ Docker và SBOM, biểu thức policy, quét cloud chủ động). Socket hơn về độ sâu phát hiện hành vi. Snyk và DeepSource hơn về giám sát và sửa. OpenSSF Scorecard hơn về tín hiệu rủi ro maintainer. OSV và cơ sở dữ liệu advisory hơn về độ rộng CVE đã biết — v1 không có chế độ enrichment nên sẽ bỏ lỡ CVE đã biết mà tra cứu database sẽ bắt được. - Registry firewall hơn về vị trí: chặn ở biên registry sẽ chặn package xấu trước khi tải, trong khi chúng ta kiểm tra sau khi tải và trước khi chạy — theo thiết kế, vì chúng ta là cổng cho agent cài từ bất kỳ đâu, không chỉ một registry. Cách tiếp cận gateway ở registry (ví dụ middleware kiểu DepGate trước proxy) và vetgate trả lời hai thời điểm khác nhau: gateway trước khi tải, vetgate trước khi chạy.
Công cụ liên quan
Các công cụ mã nguồn mở khác của TECHDEV: sessguard, runverdict, gheist-guard, context-diet, ci-failure-detective, agent-seatbelt, devsecops-os, env-doctor, skill-audit, logtrim, testguard, breakcheck, keymap, memgraph, ggufit, leaseguard, factfence, jsonfold
Đóng góp ý kiến
Bình chọn cho công cụ này, đề xuất tính năng, hoặc thảo luận với các vận hành khác trên bảng cộng đồng.