NVIDIA SkillSpector – skaner bezpieczeństwa skills agentów AI

Spis treści

  1. Czym jest SkillSpector?
  2. Problem, który rozwiązuje
  3. Jak działa – architektura
  4. 64 wzorce podatności w 16 kategoriach
  5. System scoringu ryzyka
  6. Instalacja i quick start
  7. Formaty wyjścia i integracja CI/CD
  8. Analiza LLM – opcjonalna druga warstwa
  9. Przykład użycia – krok po kroku
  10. Ograniczenia
  11. 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.

 
Sprawdź szczegóły:
 
 
 
 

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:

MetrykaWynik
Skills z co najmniej jedną podatnością26,1%
Skills z oznakami złośliwego zamiaru5,2%
Skills z wykonywalnymi skryptami – ryzyko względne2,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 – wzorzec curl | bash (pobieranie i natychmiastowe wykonanie zdalnego kodu)
  • SC3 – zaciemniony kod (base64/hex) ukrywający faktyczną funkcjonalność
  • SC4 – żywe sprawdzenie CVE przez OSV.dev
  • SC6 – typosquatting: nazwy pakietów podobne do popularnych (np. reqeusts zamiast requests)

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 wykonania
  • RA2 – 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 problemuPunkty
CRITICAL+50
HIGH+25
MEDIUM+10
LOW+5
Wykonywalny skrypt w paczce×1,3 (mnożnik)

Wynik jest mapowany na rekomendację:

ScoreOcenaRekomendacja
0–20LOWSAFE – można instalować
21–50MEDIUMCAUTION – weryfikuj ręcznie
51–80HIGHDO NOT INSTALL
81–100CRITICALDO NOT INSTALL

6. Instalacja i szybki start

Wymagania

  • Python 3.12+
  • uv (zalecane) lub pip

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:

ProviderZmienna środowiskowaDomyślny model
openaiOPENAI_API_KEYgpt-5.4
anthropicANTHROPIC_API_KEYclaude-opus-4-6
nv_buildNVIDIA_INFERENCE_KEYdeepseek-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.dev sprawdzanie 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

 
Sprawdź szczegóły:
 
 
 
 

Promocja na kursy n8n, Terraform i Anisble + AI dla Administratora 800 zł taniej

X