SkillSpector: quét AI agent skill trước khi đưa vào môi trường nội bộ
Skill AI có thể mang theo prompt injection, rò rỉ dữ liệu hoặc rủi ro chuỗi cung ứng. SkillSpector của NVIDIA quét repo, URL, ZIP, thư mục và tệp để hỗ trợ kiểm tra trước khi cài đặt.
Một skill cho Claude Code, Codex CLI hay Gemini CLI có thể chỉ gồm SKILL.md, cấu hình và vài script. Nhưng khi được cài, nó có thể ảnh hưởng đến cách agent đọc tệp, gọi công cụ và xử lý dữ liệu nội bộ.
Vì vậy, “cài skill” không chỉ là lựa chọn tiện dụng của developer. Với SOC, security engineering và đội risk & compliance, đây là một điểm kiểm soát chuỗi cung ứng cần được quét, ghi nhận và phê duyệt trước khi skill đi vào máy lập trình viên, CI/CD hoặc agent dùng chung.
SkillSpector là công cụ mã nguồn mở của NVIDIA để hỗ trợ kiểm tra AI agent skill trước khi cài đặt. Dự án hướng tới các skill dùng với Claude Code, Codex CLI, Gemini CLI và các tình huống liên quan đến MCP.
Vì sao cần quét skill trước khi cài?
Skill có thể gồm hướng dẫn, cấu hình hoặc mã nhằm mở rộng năng lực của agent. Những nội dung này có thể định hình cách agent dùng công cụ, xử lý đầu vào và tạo phản hồi. Vì thế, skill nên được xem như một thành phần bên thứ ba cần đánh giá.
Theo README của dự án, trong tập con nghiên cứu gồm 31.132 skill được phân tích:
26,1% có lỗ hổng.
5,2% có dấu hiệu về ý đồ có khả năng là độc hại.
Đây không phải tỷ lệ đại diện cho mọi skill trên Internet. Tuy nhiên, các số liệu cho thấy quy trình “thấy hữu ích là cài” không phù hợp với môi trường doanh nghiệp.
SkillSpector phát hiện những gì?
SkillSpector có 71 mẫu phát hiện thuộc 17 nhóm rủi ro:
Prompt injection
Data exfiltration
Privilege escalation
Rủi ro chuỗi cung ứng
Excessive agency
Output handling
System prompt leakage
Memory poisoning
Tool misuse
Rogue agent
Anti-refusal
Trigger abuse
Dangerous code qua phân tích AST
Taint tracking
YARA signatures
MCP least privilege
MCP tool poisoning
Với SOC, các nhóm nên được ưu tiên triage gồm:
Prompt injection: nội dung tìm cách điều hướng agent làm việc ngoài ý định hợp lệ.
Data exfiltration: dấu hiệu thu thập hoặc đưa dữ liệu ra ngoài.
Privilege escalation và excessive agency: yêu cầu hành động hoặc quyền vượt quá nhu cầu cần thiết.
Supply chain: phụ thuộc, nguồn tải hoặc thành phần bên thứ ba cần được đánh giá.
MCP tool poisoning, tool misuse, memory poisoning: rủi ro liên quan đến công cụ, ngữ cảnh và cách agent bị điều hướng.
Công cụ không thay thế quyết định của analyst. Giá trị chính là tạo bằng chứng cho bước kiểm soát: phát hiện nào xuất hiện, mức rủi ro ra sao và trường hợp nào cần review thủ công.
Quét skill theo luồng kiểm duyệt
SkillSpector nhận Git repository, URL, ZIP, thư mục hoặc tệp đơn lẻ. Công cụ có hai tầng phân tích:
Phân tích tĩnh nhanh.
Đánh giá ngữ nghĩa bằng LLM, tùy chọn.
Ở bước xét duyệt ban đầu, đội an ninh có thể ưu tiên quét tĩnh trong môi trường được kiểm soát.
1. Cài đặt trong môi trường được quản trị
README yêu cầu Python 3.12 trở lên. Có thể cài CLI bằng uv:
bash
uv tool install git+https://github.com/NVIDIA/skillspector.git
README cũng lưu ý quá trình cài đặt có thể tải và cài thêm phần mềm mã nguồn mở của bên thứ ba. Vì vậy, bản thân SkillSpector nên đi qua quy trình quản trị phụ thuộc: xác minh nguồn, đánh giá giấy phép và lựa chọn môi trường chạy phù hợp trước khi đưa vào runner CI hoặc máy quản trị.
Dự án cũng cung cấp Dockerfile để build image cục bộ:
bash
make docker-build
2. Quét tĩnh trước
Ví dụ, đội AppSec nhận một thư mục skill để xét duyệt:
bash
skillspector scan ./my-skill/ --no-llm
Hoặc quét bằng container, mount thư mục hiện tại vào /scan:
bash
docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm
Báo cáo mặc định hiển thị trên terminal. SkillSpector cung cấp điểm rủi ro từ 0 đến 100, nhãn mức độ nghiêm trọng và khuyến nghị.
Điểm rủi ro là tín hiệu để bắt đầu triage, không phải phán quyết tự động. Analyst cần đối chiếu phát hiện với quyền thực tế của skill: agent sẽ truy cập dữ liệu gì, gọi công cụ nào và có đường kết nối ra ngoài hay không.
3. Chỉ bật LLM khi luồng dữ liệu đã được phê duyệt
Đánh giá LLM là tùy chọn, nhưng có thể kéo theo việc gửi nội dung skill và dữ liệu liên quan tới nhà cung cấp mô hình. Chỉ nên bật bước này sau khi tổ chức đã phê duyệt nhà cung cấp, luồng dữ liệu, phạm vi nội dung được gửi và cách quản lý thông tin xác thực.
README của batch scanner nêu cấu hình mặc định hướng tới DeepSeek như một lựa chọn công khai chi phí thấp. Tài liệu này cũng lưu ý DeepSeek-Chat dự kiến ngừng hoạt động, đồng thời backend chưa được kiểm thử với mô hình cục bộ. Trước khi quét LLM ở quy mô lớn, đội triển khai cần tự xác nhận cấu hình và giới hạn tài khoản phù hợp.
4. Đưa kết quả vào CI/CD và điều tra
SkillSpector hỗ trợ đầu ra terminal, JSON, Markdown và SARIF. JSON và SARIF phù hợp để lưu bằng chứng, xử lý tự động hoặc tích hợp vào pipeline.
Xuất JSON:
bash
skillspector scan ./my-skill/ --no-llm --format json --output report.json
Xuất SARIF:
bash
skillspector scan ./my-skill/ --no-llm --format sarif --output report.sarif
Một luồng triage có thể gồm:
Pipeline quét skill và đính kèm report.json vào ticket phê duyệt.
Phát hiện liên quan đến data exfiltration, prompt injection hoặc MCP tool poisoning được chuyển sang review thủ công.
Analyst kiểm tra quyền, dữ liệu có thể bị tác động và phạm vi sử dụng dự kiến.
Kết quả được ghi nhận là chặn, cho phép trong phạm vi hẹp hoặc chấp nhận rủi ro có thời hạn.
Cách làm này giúp việc cài skill trở thành sự kiện có thể truy vết, thay vì một thay đổi không được quản lý.
Quét repo, ZIP và so sánh snapshot MCP registry
SkillSpector hỗ trợ quét trực tiếp Git repository và ZIP:
bash
skillspector scan https://github.com/user/my-skill
bash
skillspector scan ./my-skill.zip
Công cụ cũng hỗ trợ so sánh hai snapshot MCP registry. Quy trình này có thể giúp đội platform nhận biết server được thêm, gỡ hoặc thay đổi các trường đã chuẩn hóa:
bash
skillspector scan registry-before.json --mcp-registry --format json --output previous.json
skillspector scan registry-after.json --mcp-registry --format json \
--mcp-registry-compare previous.json --output compared.json
Theo README, danh tính server được xác định bằng tên và phiên bản. Nếu phiên bản mới xuất hiện còn phiên bản cũ không còn trong snapshot sau, công cụ sẽ thể hiện chúng lần lượt là mục được thêm và mục bị loại bỏ.
Checklist kiểm soát skill cho đội security
SkillSpector phù hợp hơn khi được đặt trong luồng phê duyệt bắt buộc, thay vì chỉ là CLI để developer tự chạy khi cần.
Checklist tham khảo:
Quét trước khi cài skill lấy từ repo, URL, ZIP hoặc MCP registry ngoài danh mục đã phê duyệt.
Mặc định dùng quét tĩnh không LLM; chỉ dùng đánh giá ngữ nghĩa khi việc gửi dữ liệu đã được phê duyệt.
Yêu cầu review thủ công với phát hiện về prompt injection, data exfiltration, leo thang đặc quyền, tool poisoning và chuỗi cung ứng.
Lưu báo cáo JSON hoặc SARIF cùng ticket phê duyệt để phục vụ audit và điều tra.
So sánh snapshot MCP registry khi cập nhật catalog, không chỉ ở lần tiếp nhận đầu tiên.
Dùng baseline cho false positive đã được chấp nhận có kiểm soát. SkillSpector hỗ trợ suppression theo glob rule hoặc fingerprint để các lần quét sau làm nổi bật phát hiện mới.
Tái quét khi skill đổi phiên bản, thêm công cụ, thêm phụ thuộc hoặc thay đổi phạm vi truy cập dữ liệu.
Một mẫu policy ngắn có thể là: chặn các phát hiện nghiêm trọng; review thủ công với phát hiện mức trung bình; chỉ thêm vào baseline khi có chủ sở hữu rõ ràng và thời hạn hiệu lực.
Các giới hạn cần hiểu rõ
SkillSpector áp dụng giới hạn tài nguyên với đầu vào từ xa và file nén để giới hạn tác động của tải xuống quá lớn hoặc ZIP bomb:
Giới hạn ingest: INGESTMAXBYTES là 100 MiB, áp dụng cho URL tải theo luồng, tổng dung lượng không nén của ZIP và dung lượng đĩa sau khi clone Git repository.
Giới hạn số thành viên trong ZIP: INGESTMAXZIPMEMBERS là 10.000.
Giới hạn MAXFILEBYTES là 1 MB cho mỗi tệp mà từng analyzer đọc sau khi ingest. Đây là giới hạn phân tích ở bước sau, tách biệt với trần ingest 100 MiB.
README cho biết khi vượt giới hạn ingest, công cụ sẽ fail closed: dừng xử lý thay vì tiếp tục trong trạng thái không chắc chắn.
Các giới hạn này là lớp bảo vệ hữu ích, nhưng không thay thế sandbox, kiểm soát egress và nguyên tắc đặc quyền tối thiểu. Một skill không bị phát hiện ở bước quét vẫn có thể có hành vi chỉ lộ ra khi chạy hoặc trong một ngữ cảnh cụ thể.
Kết luận
SkillSpector không thay thế review chuyên sâu hay kiểm thử trong môi trường kiểm soát. Nhưng công cụ giúp đưa các hoạt động đó đến đúng thời điểm: trước khi một skill được tin cậy và cài đặt.
Với SOC và security engineering, giá trị thực tế nằm ở việc biến một thay đổi tưởng như nhỏ — “cài một skill tiện dụng” — thành sự kiện có thể quét, ghi log, phê duyệt và truy vết.