Về AI Repo Radar

03 / AI REPO RADAR

NVIDIA/SkillSpector

Skills & prompts

23.548 saoLicense: Apache-2.0Push gần nhất: Lên radar:

Công cụ quét bảo mật cho skill của AI agent: tìm prompt injection, rò rỉ dữ liệu và rủi ro chuỗi cung ứng trước khi cài, có chế độ máy chủ MCP.

SkillSpector là gì và vì sao cần nó

SkillSpector là một công cụ quét bảo mật cho skill của AI agent, do NVIDIA phát hành mã nguồn mở. README mô tả nó dùng để phát hiện lỗ hổng, mẫu độc hại và rủi ro bảo mật trước khi bạn cài một skill vào agent. Câu hỏi mà công cụ muốn trả lời rất rõ ràng: skill này có an toàn để cài không.

Lý do README đưa ra là skill của agent, dùng trong Claude Code, Codex CLI, Gemini CLI và các agent khác, được chạy với niềm tin ngầm định và gần như không được kiểm duyệt. Theo README, trong tập con 31,132 skill được phân tích của bộ dữ liệu nghiên cứu, 26.1% skill chứa lỗ hổng và 5.2% cho thấy dấu hiệu có ý đồ độc hại. Đây là số liệu do tác giả công bố từ bộ dữ liệu nghiên cứu của họ, README trong phần chúng tôi có không mô tả phương pháp đo.

SkillSpector còn là một phần của quy trình NVIDIA Verified Skills, nơi skill được quét, đánh giá và ký trước khi xuất bản. Skill vượt qua quy trình sẽ được đăng lên danh mục skill của NVIDIA. Về metadata, repo có 23548 sao, giấy phép Apache-2.0 và lần đẩy mã gần nhất vào ngày 2026-10-30.

Cách hoạt động: phân tích hai giai đoạn

README mô tả hai giai đoạn phân tích. Giai đoạn đầu là phân tích tĩnh nhanh, giai đoạn sau là đánh giá ngữ nghĩa bằng mô hình ngôn ngữ và là tùy chọn. Cách chia này hợp lý: phân tích tĩnh rẻ, chạy offline được, còn lớp LLM giúp hiểu ý định của văn bản tự nhiên vốn là nơi prompt injection thường ẩn náu.

Công cụ nhận đầu vào đa dạng: kho Git, URL, tệp zip, thư mục hoặc một tệp đơn lẻ. Kết quả có thể xuất ra terminal, JSON, Markdown hoặc SARIF, phù hợp cho cả đọc bằng mắt lẫn đưa vào quy trình CI. Mỗi lần quét cho một điểm rủi ro từ 0 đến 100 kèm nhãn mức độ nghiêm trọng và khuyến nghị rõ ràng.

Một chi tiết đáng chú ý là tra cứu lỗ hổng trực tiếp: mẫu SC4 truy vấn OSV.dev để lấy dữ liệu CVE thời gian thực, và tự động quay về chế độ offline khi không truy cập được. Ngoài ra có cơ chế baseline để chấp nhận các phát hiện đã biết, nhờ đó lần quét sau chỉ hiện những vấn đề mới.

Sơ đồ: đầu vào skill (repo, URL, zip, thư mục hoặc file) qua giai đoạn một là phân tích tĩnh nhanh, chạy được offline, rồi giai đoạn hai là kiểm tra ngữ nghĩa bằng LLM, tùy chọn. Kết quả là điểm rủi ro cùng mức độ nghiêm trọng và khuyến nghị, xuất ra terminal, JSON, Markdown hoặc SARIF.
SkillSpector quét hai giai đoạn: tĩnh trước, LLM tùy chọn sau, theo README.

71 mẫu lỗ hổng trong 17 nhóm

Phần cốt lõi của README là danh mục 71 mẫu lỗ hổng chia thành 17 nhóm. Các nhóm gồm prompt injection, rò rỉ dữ liệu, leo thang đặc quyền, chuỗi cung ứng, quyền tự chủ quá mức, xử lý đầu ra, rò rỉ system prompt, đầu độc bộ nhớ, lạm dụng công cụ, agent nổi loạn, chống từ chối, lạm dụng trigger, mã nguy hiểm theo AST, theo dõi taint, chữ ký YARA, đặc quyền tối thiểu cho MCP và đầu độc công cụ MCP.

Mỗi mẫu có mã định danh, mức độ nghiêm trọng và mô tả. Ví dụ nhóm prompt injection có ghi đè chỉ dẫn, chỉ dẫn ẩn trong chú thích hoặc văn bản vô hình, lệnh đưa dữ liệu ra ngoài và việc chèn khoảng trắng dài để giấu chỉ dẫn. Nhóm chống từ chối bắt các câu kiểu ép agent không bao giờ từ chối hoặc bỏ cảnh báo, và các khung jailbreak vô hiệu hóa rào chắn.

Nhóm rò rỉ dữ liệu bao gồm gửi dữ liệu tới URL bên ngoài, thu gom biến môi trường để lấy bí mật, quét thư mục tìm tệp nhạy cảm và chuyển ngữ cảnh hội thoại ra ngoài. Nhóm đặc quyền gồm yêu cầu quyền vượt quá chức năng đã nêu, chạy sudo hoặc root và đọc khóa SSH, token, mật khẩu.

Chuỗi cung ứng và quyền tự chủ của agent

Nhóm chuỗi cung ứng có hơn mười mẫu. README liệt kê phụ thuộc không ghim phiên bản, tải script từ bên ngoài rồi chạy kiểu curl pipe bash, mã bị làm rối bằng base64 hoặc hex, phụ thuộc có CVE đã biết, phụ thuộc bị bỏ rơi, typosquatting, bytecode Python được đóng gói kèm, tệp thực thi giấu trong tệp tài liệu và việc chuyển hướng nguồn của trình quản lý gói.

Nhóm quyền tự chủ quá mức xét việc cấp cho agent quyền dùng công cụ không giới hạn, ra quyết định tác động lớn mà không có người duyệt, mở rộng phạm vi so với mục đích đã nêu và truy cập tài nguyên không có giới hạn tốc độ hay hạn ngạch. Danh sách trong phần README chúng tôi có bị cắt ở giữa nhóm này, nên chúng tôi không thể mô tả đầy đủ các nhóm còn lại.

Điểm mạnh của cách tổ chức này là nó chạm cả hai mặt: mã trong skill, như script có thể chạy, và văn bản trong skill, như hướng dẫn gửi cho mô hình. Với skill, ranh giới giữa hai thứ đó mờ, và một tệp Markdown có thể là vector tấn công không kém một tệp Python.

Cài đặt và cách dùng

README hướng dẫn tạo và kích hoạt môi trường ảo trước, vì các mục tiêu trong Makefile đều giả định môi trường đang bật. Bạn có thể dùng uv hoặc pip, Makefile dùng uv nếu có. Có cài đặt nhanh chỉ cho CLI, và cài từ mã nguồn. Muốn chạy chế độ MCP thì cài thêm phần mở rộng MCP lúc cài đặt. Lệnh cụ thể nằm trong README gốc nên bài này không chép lại.

README còn cảnh báo rằng dự án sẽ tải và cài thêm phần mềm mã nguồn mở của bên thứ ba, và bạn nên xem giấy phép của chúng trước khi dùng. Với một công cụ bảo mật, đây là lưu ý đáng để ý.

Nếu không muốn cài Python, có thể tự dựng một ảnh Docker từ Dockerfile đi kèm, dựa trên ảnh Python 3.12 slim bookworm. Bạn gắn thư mục hiện tại vào thư mục quét của container để quét thư mục cục bộ, truyền thông tin xác thực qua tệp env để quét có LLM, và ghi báo cáo ra thư mục được gắn.

Có thêm chế độ quét đệ quy: tùy chọn recursive quét từng thư mục con có SKILL.md như một skill độc lập, với giới hạn tổng mặc định là 32 skill. Bạn có thể chỉnh giới hạn bằng max-skills, nhưng số 0 không có nghĩa là không giới hạn, và các ngân sách khác về khám phá, byte, thời gian vẫn áp dụng. README cũng cung cấp thư mục contrib với bộ quét hàng loạt chạy song song.

Giới hạn tài nguyên và nguyên tắc từ chối an toàn

README nhấn mạnh thiết kế đóng khi vượt giới hạn. Với đầu vào từ xa và lưu trữ nén, có hai giới hạn độc lập: mỗi lần nhận dữ liệu tối đa 100 MiB, áp dụng cho tải URL, tổng dung lượng giải nén của zip và dung lượng đĩa sau khi clone Git; và số mục tối đa trong một zip là 10,000. Vi phạm một trong hai sẽ gây lỗi đóng thay vì bỏ qua âm thầm, nhằm chống zip bomb.

Ngoài ra, mỗi tệp được phân tích tối đa 1 MB, đây là giới hạn riêng ở khâu sau. Khi quét đệ quy mà đạt giới hạn số skill, báo cáo tổng hợp vẫn ghi rõ skill nào bị bỏ sót và độ phủ được xem là chưa đầy đủ. Tùy chọn fail-on-incomplete cho phép CI thất bại khi độ phủ chưa đủ, còn mặc định chính sách mã thoát không đổi.

Một tình huống thú vị là phạm vi quét tường minh: bạn có thể lặp lại tùy chọn exclude để loại một số tệp trước khi phân tích. Tệp bị loại vẫn nằm trong mẫu số độ phủ như hoàn toàn chưa được kiểm tra, và báo cáo sẽ không được phép đưa ra khuyến nghị an toàn khi có loại trừ. Đây là cách làm thận trọng, tránh để một lần quét một phần bị hiểu nhầm là sạch.

Phân tích LLM và nhà cung cấp mô hình

Để có kết quả tốt nhất, README khuyên cấu hình một endpoint LLM tương thích OpenAI cho phần phân tích ngữ nghĩa. Nhà cung cấp được chọn qua biến SKILLSPECTOR_PROVIDER. Bảng trong README liệt kê openai, anthropic, anthropic_proxy, bedrock, nv_build, gemini, ollama, azure_openai, openai_compatible và các nhà cung cấp chạy qua CLI cục bộ như claude_cli, gemini_cli và opencode_cli. Riêng codex_cli đang bị vô hiệu hóa vì chế độ sandbox chỉ đọc của nó cho phép đọc tệp trên máy chủ.

SkillSpector cũng chạy được với máy chủ tương thích OpenAI cục bộ như Ollama, vLLM, llama.cpp và các cổng suy luận được quản lý. README dành khá nhiều dòng để giải thích cách xử lý đầu ra có cấu trúc giữa các nhà cung cấp, vì một số mô hình từ chối buộc gọi công cụ. Đây là chi tiết vận hành hơn là khái niệm, và chỉ quan trọng khi bạn tự cấu hình endpoint.

Một lưu ý trung thực trong README: cấu hình mặc định nhắm tới DeepSeek vì là lựa chọn công khai rẻ nhất, và README ghi chú rằng DeepSeek-Chat dự kiến sẽ ngừng hoạt động, người đóng góp cũng không có phần cứng để thử với mô hình cục bộ. README mời đóng góp một backend phổ quát hơn. Nghĩa là chất lượng của lớp LLM phụ thuộc nhiều vào mô hình bạn chọn, và chất lượng đó README không đo.

Chạy như một máy chủ MCP để chặn cài đặt

SkillSpector có thể chạy như một máy chủ Model Context Protocol để các agent cục bộ như Claude Code, Codex CLI và Gemini CLI gọi quét như một công cụ và dùng kết quả để chặn việc cài skill hoặc MCP. README mô tả đây là biến SkillSpector từ một bước kiểm toán rời rạc thành một rào chắn lúc chạy.

Máy chủ chỉ lộ một công cụ là scan_skill, nhận mục tiêu là URL Git, URL tệp, tệp zip, tệp Markdown hoặc thư mục, và trả về phán quyết có cấu trúc gồm điểm rủi ro từ 0 đến 100, mức nghiêm trọng, khuyến nghị, cờ an toàn để cài và danh sách phát hiện. Kết quả cũng cho biết có dùng LLM hay không, để điểm thấp từ một lần quét chỉ tĩnh không bị nhầm là một lần quét đầy đủ sạch sẽ.

Về bảo mật, README cảnh báo kênh truyền HTTP không có xác thực, và chỉ cho phép gắn vào địa chỉ loopback. Với truy cập từ xa, bạn phải đặt một reverse proxy có xác thực phía trước. Đường dẫn cục bộ và URL tệp bị từ chối qua HTTP để người gọi chưa xác thực không đọc được tệp tùy ý, và chỉ nhận URL Git hoặc zip từ xa không kèm thông tin xác thực. README cũng ghi nhận một sự cố treo lúc khởi tạo với kênh stdio vẫn còn áp dụng.

Giới hạn và điều cần lưu ý

Dù tập trung vào bảo mật, SkillSpector không phải là bảo chứng tuyệt đối. Điểm số là ước lượng dựa trên mẫu và LLM, nên nó có thể bỏ sót hoặc báo nhầm. README đưa ra cơ chế baseline chính là vì có dương tính giả. Mọi quét một phần, ví dụ khi dùng loại trừ hoặc chạm giới hạn, đều không được coi là an toàn hoàn toàn.

Lớp LLM gửi nội dung skill tới nhà cung cấp mô hình mà bạn chọn, nên cần cân nhắc dữ liệu có rời máy hay không. README cũng dặn xem biến cấu hình chứa khóa cổng như một bí mật. Đây là phần liên quan đến vận hành an toàn của chính công cụ.

Cuối cùng, vì phần README tới tay chúng tôi bị cắt ngắn, các nhóm mẫu về sau, hướng dẫn CI chi tiết và mọi lệnh cụ thể không có trong bài này. Hãy đọc README gốc cho các phần đó thay vì dựa vào bản tóm tắt.

Khi nào nên và không nên dùng

SkillSpector đặc biệt hợp nếu bạn hay cài skill hoặc MCP server từ bên thứ ba, nếu nhóm bạn quản lý một kho skill nội bộ, hoặc nếu bạn muốn đặt một cổng kiểm tra trước khi skill được xuất bản. Dùng như bước trong CI với đầu ra SARIF hoặc như máy chủ MCP chặn cài đặt đều là kịch bản README nhắm tới.

Nó ít cần thiết nếu bạn chỉ dùng skill do chính mình viết và không nhận mã từ ngoài. Nó cũng không thay thế việc tự đọc skill đáng ngờ và áp dụng quyền tối thiểu cho agent. Với 23548 sao và giấy phép Apache-2.0, đây là một lớp phòng thủ nhẹ, đáng thử trước khi bạn cho agent chạy mã bạn chưa đọc.

Bài do AI viết tự động từ README và dữ liệu GitHub API của repo, có kiểm tra tự động nhưng không có người duyệt từng câu. Báo sai sót qua email.