- Дата публикации
SkillSpector: сканер безопасности для навыков AI-агентов от NVIDIA
Что нового
SkillSpector — это новый open source‑сканер безопасности для «скиллов» AI‑агентов (Claude Code, Codex CLI, Gemini CLI и другие). Он отвечает на простой вопрос: безопасно ли ставить этот навык.
Ключевые факты и цифры:
- Анализирует навыки до установки и ищет 64 типа уязвимостей в 16 категориях: от prompt‑инъекций и утечки данных до supply chain‑рисков и вредоносного кода.
- Работает с разными источниками кода: Git‑репозитории, URL, zip‑архивы, директории, отдельные файлы.
- Использует двухэтапный анализ:
- быстрый статический сканер (регулярные выражения + AST);
- опциональный семантический разбор через LLM.
- Поддерживает онлайн‑проверку зависимостей по базе OSV.dev с автоматическим офлайн‑фолбэком.
- Считает риск‑скор от 0 до 100 с ярлыками серьёзности (LOW / MEDIUM / HIGH / CRITICAL) и прямой рекомендацией: ставить или «DO NOT INSTALL».
- Выдаёт отчёты в форматах terminal, JSON, Markdown, SARIF — удобно и для людей, и для CI/CD.
- Работает с LLM‑провайдерами через OpenAI‑совместимый API: GPT‑5, Claude Opus 4.6, NVIDIA build.nvidia.com, DeepSeek, а также локальные серверы (Ollama, vLLM, llama.cpp).
- Исходит из реального ресёрча: по данным Liu et al. (2026), 26,1% навыков содержат уязвимости, 5,2% — признаки злонамеренного поведения, а навыки с исполняемыми скриптами уязвимы в 2,12 раза чаще.
SkillSpector можно использовать как CLI‑утилиту, как Python‑библиотеку и как часть пайплайна безопасности в CI/CD.
Как это работает
SkillSpector строится вокруг двухэтапного пайплайна анализа.
Этап 1: статический анализ
Статический слой работает быстро и даёт высокий охват потенциальных проблем:
- 11 статических анализаторов на регулярных выражениях и шаблонах.
- AST‑анализ Python‑кода для поиска опасных конструкций:
exec(),eval(),compile();subprocess,os.systemи другие exec‑семейства;- динамические импорты (
__import__) иgetattrс нелитералами.
- Проверка зависимостей через OSV.dev (SC4):
- один batсh‑запрос на все зависимости;
- кэширование результатов в памяти на 1 час;
- если сеть недоступна, используется небольшой встроенный список известных CVE.
- Сканер проходит по всем файлам навыка и ищет 64 паттерна:
- prompt‑инъекции и утечки контекста;
- сбор и отправку env‑переменных;
- привилегированные операции (
sudo, доступ к SSH‑ключам и токенам); - рискованные практики supply chain (unpinned зависимости,
curl | bash, обфускация, typosquatting); - злоупотребление инструментами и ресурсами;
- сигнатуры малвари через YARA и цепочки «taint tracking» (откуда данные и куда они утекают).
Этот этап даёт высокий recall — то есть находит большинство потенциальных проблем, но может давать ложные срабатывания.
Этап 2: семантический анализ через LLM (опционально)
Второй слой — это LLM, который смотрит на контекст и намерения кода:
- анализирует найденные паттерны в контексте всего навыка;
- отбрасывает ложные срабатывания;
- формирует человеческие объяснения, почему фрагмент опасен;
- повышает точность до около 87%.
SkillSpector умеет работать с несколькими провайдерами через переменную SKILLSPECTOR_PROVIDER:
openai— GPT‑5.4 (по умолчанию для этого провайдера);anthropic— Claude Opus 4.6;nv_build— build.nvidia.com (по умолчанию модельdeepseek-ai/deepseek-v4-flash).
Можно подключить и локальные OpenAI‑совместимые серверы:
- Ollama;
- vLLM;
- llama.cpp;
- любые управляемые шлюзы инференса.
Параметры доступа задаются через переменные окружения (OPENAI_API_KEY, ANTHROPIC_API_KEY, NVIDIA_INFERENCE_KEY, OPENAI_BASE_URL).
Если нужен только статический анализ, LLM легко отключить флагом --no-llm.
Система оценок риска
SkillSpector присваивает каждому навыку интегральный балл риска от 0 до 100.
Формула:
- CRITICAL: +50 баллов за каждую проблему;
- HIGH: +25 баллов;
- MEDIUM: +10 баллов;
- LOW: +5 баллов;
- если в навыке есть исполняемые скрипты — итоговый балл умножается на 1,3.
Интерпретация:
- 0–20 — LOW / SAFE;
- 21–50 — MEDIUM / CAUTION;
- 51–80 — HIGH / DO NOT INSTALL;
- 81–100 — CRITICAL / DO NOT INSTALL.
SkillSpector не просто выдаёт цифру, а даёт явную рекомендацию: можно ли ставить навык.
Категории уязвимостей
Инструмент закрывает 16 категорий угроз. Краткий обзор:
- Prompt Injection (5 паттернов) — попытки переписать системные инструкции, обойти ограничения, вынести контекст наружу или спровоцировать вредные действия.
- Data Exfiltration (4) — отправка данных на внешние URL, сбор env‑переменных, обход по файловой системе в поисках чувствительных файлов, утечка контекста диалога.
- Privilege Escalation (3) — запрос лишних прав, запуск с
sudo/root, доступ к SSH‑ключам и паролям. - Supply Chain (6) — неприжаты версии зависимостей,
curl | bash, обфускация, CVE в зависимостях (через OSV.dev), заброшенные библиотеки, typosquatting. - Excessive Agency (4) — слишком широкие полномочия инструмента, автономные решения без человека, расширение функциональности за пределы заявленного, отсутствие лимитов использования ресурсов.
- Output Handling (3) — небезопасное использование вывода модели без валидации, пересечение зон доверия, отсутствие лимитов на размер/скорость вывода.
- System Prompt Leakage (3) — прямой и косвенный слив системного промпта, включая через файлы и сеть.
- Memory Poisoning (3) — попытки записать вредный контент в долговременную память агента, выдавить из контекста safety‑правила, изменить хранимое состояние.
- Tool Misuse (3) — опасные параметры (
shell=True,--force), цепочки инструментов, обходящие проверки, слишком мягкие настройки по умолчанию (нет TLS, нет аутентификации). - Rogue Agent (2) — сам модифицирующийся код и несанкционированная персистентность (cron, автозапуск).
- Trigger Abuse (3) — триггеры, которые срабатывают слишком часто, маскируются под системные команды или провоцируют максимально частую активацию.
- Behavioral AST (8) — опасные конструкции в AST:
exec,eval, динамические импорты,subprocess,os.system,compile, динамическийgetattr, комбинации «сетевой ввод/закодированные данные → exec/eval`. - Taint Tracking (5) — отслеживание пути данных: от внешнего ввода или файлов к сети, кода‑исполнению и утечке секретов.
- YARA Signatures (4) — совпадения с сигнатурами малвари, вебшеллов, криптомайнеров и эксплойтов.
- MCP Least Privilege (4) — нарушения принципа наименьших привилегий в MCP‑инструментах.
- MCP Tool Poisoning (4) — скрытые инструкции и обман в метаданных инструментов: невидимые символы, base64, подмена описаний и параметров.
Что это значит для вас
Кому это нужно
SkillSpector полезен, если вы:
- разрабатываете или интегрируете AI‑агентов и ставите навыки из маркетплейсов;
- собираете внутренний каталог навыков для сотрудников и хотите минимизировать риск утечек и компрометаций;
- отвечаете за безопасность и соответствие требованиям (security, compliance) в компании, где активно используют LLM‑агентов;
- строите платформу вокруг MCP/CLI‑агентов и хотите автоматический security‑гейт в CI/CD.
Ресёрч Liu et al. показывает неприятную картину: каждый четвёртый навык уязвим, а более 5% выглядят откровенно злонамеренными. Это не те цифры, с которыми хочется жить без автоматического сканера.
Как использовать на практике
Несколько типичных сценариев:
-
Перед установкой навыка из GitHub или маркетплейса:
- прогоняете
skillspector scan <url или путь>; - смотрите итоговый скор и список проблем;
- если результат HIGH/CRITICAL и рекомендация «DO NOT INSTALL» — не ставите навык в прод.
- прогоняете
-
Встроить в CI/CD для своих навыков:
- добавляете шаг со
skillspector scanи выводом в SARIF; - подключаете к IDE/Code Scanning, чтобы разработчики видели проблемы до ревью;
- ставите порог по скору, выше которого билд падает.
- добавляете шаг со
-
Проверять внешние вклады (pull‑requests) в ваш каталог навыков:
- при каждом PR прогоняете SkillSpector;
- если новый навык тянет риск на HIGH/CRITICAL — PR блокируется до исправлений.
-
Аудит существующего каталога:
- раз в квартал прогоняете все репозитории/директории с навыками;
- собираете JSON‑отчёты и строите карту рисков.
Где инструмент помогает, а где нет
Сильные стороны:
- хорошо выявляет структурные проблемы: утечки, небезопасные вызовы, подозрительные зависимости;
- даёт понятные объяснения по каждому фрагменту кода (при включённом LLM);
- покрывает не только код, но и метаданные MCP‑инструментов, где часто прячут скрытые инструкции;
- удобен для автоматизации: CLI, JSON/SARIF, Python API.
Ограничения, о которых лучше знать заранее:
- Не работает с картинками: текст в изображениях он не видит.
- Не разбирает зашифрованный или бинарный код: только исходники.
- Не делает динамический анализ: это статический сканер, он не запускает код.
- Хуже ловит неанглоязычные паттерны: на других языках часть уязвимостей может пройти мимо.
- Для полноценных проверок зависимостей по OSV.dev нужен исходящий HTTPS к api.osv.dev. Без него вы получите только статический fallback‑список CVE.
Доступность из России
SkillSpector — это репозиторий на GitHub и локальная утилита. Сам по себе он не заблокирован. Но важные моменты:
- для LLM‑анализа через GPT‑5 или Claude Opus 4.6 может потребоваться обход региональных ограничений и работающий платёжный аккаунт;
- доступ к build.nvidia.com и другим провайдерам тоже зависит от вашей сети и политики компании;
- для OSV.dev нужен доступ к
https://api.osv.dev.
Если вы работаете в изолированной сети, можно:
- использовать только статический анализ (
--no-llm); - положиться на офлайн‑fallback для CVE;
- поднять локальный OpenAI‑совместимый сервер (Ollama, vLLM) и подключить его через
OPENAI_BASE_URL.
Место на рынке
Сегмент сканеров для AI‑агентов только формируется. Есть несколько направлений:
- классические SAST/DAST‑инструменты для кода;
- линтеры для prompt‑инъекций;
- аудит конфигураций LLM‑платформ.
SkillSpector занимает нишу специализированного сканера именно для «скиллов» агентов и MCP‑инструментов.
Отличительные особенности по фактам из проекта:
- Фокус не на общем коде, а на структуре навыка агента: SKILL‑описания, MCP‑права, триггеры, метаданные.
- Большой каталог 64 конкретных паттернов с привязкой к реальным атакам: от
curl | bashдо YARA‑сигнатур криптомайнеров. - Жёсткая числовая оценка риска с простым месседжем «SAFE / DO NOT INSTALL».
- Поддержка SARIF‑отчётов, что делает его естественным кандидатом для интеграции в существующие security‑пайплайны.
- Опора на исследование 42 447 навыков с конкретными процентами уязвимостей и злонамеренных скиллов.
Пока нет публичных сравнительных бенчмарков SkillSpector против других сканеров AI‑навыков. Но по объёму описанных категорий и глубине AST/taint‑анализа это уже серьёзный инструмент для тех, кто строит инфраструктуру вокруг агентов.
Установка
SkillSpector распространяется как Python‑пакет. Рекомендуемый сценарий — отдельное виртуальное окружение.
# Клонируем репозиторий
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
# Создаём и активируем виртуальное окружение
uv venv .venv && source .venv/bin/activate
# или:
python3 -m venv .venv && source .venv/bin/activate
# Установка для продакшн-использования
make install
# Установка с dev-зависимостями
make install-dev
Как запустить
Базовое использование CLI
# Скан локальной директории с навыком
skillspector scan ./my-skill/
# Скан одного файла SKILL.md
skillspector scan ./SKILL.md
# Скан Git-репозитория
skillspector scan https://github.com/user/my-skill
# Скан zip-архива
skillspector scan ./my-skill.zip
Форматы вывода
# Вывод в терминал (по умолчанию) — красиво отформатированный отчёт
skillspector scan ./my-skill/
# JSON — для машинной обработки
skillspector scan ./my-skill/ --format json --output report.json
# Markdown — удобно прикладывать к документации
skillspector scan ./my-skill/ --format markdown --output report.md
# SARIF — для CI/CD и интеграции с IDE
skillspector scan ./my-skill/ --format sarif --output report.sarif
Подключение LLM‑анализа
SkillSpector использует переменную SKILLSPECTOR_PROVIDER для выбора провайдера и соответствующий API‑ключ.
Таблица провайдеров:
openaiOPENAI_API_KEY(+ опциональноOPENAI_BASE_URL)- endpoint:
api.openai.comили любой OpenAI‑совместимый URL - модель по умолчанию:
gpt-5.4
anthropicANTHROPIC_API_KEY- endpoint:
api.anthropic.com - модель по умолчанию:
claude-opus-4-6
nv_buildNVIDIA_INFERENCE_KEY- endpoint:
build.nvidia.com - модель по умолчанию:
deepseek-ai/deepseek-v4-flash
Примеры настройки:
# Стандартный OpenAI (GPT-5.4)
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=sk-...
skillspector scan ./my-skill/
# Anthropic (Claude Opus 4.6)
export SKILLSPECTOR_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...
skillspector scan ./my-skill/
# NVIDIA build.nvidia.com
export SKILLSPECTOR_PROVIDER=nv_build
export NVIDIA_INFERENCE_KEY=nvapi-...
skillspector scan ./my-skill/
# Локальный Ollama или другой OpenAI-совместимый endpoint
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/
# Переопределить модель провайдера
export SKILLSPECTOR_MODEL=gpt-5.2
skillspector scan ./my-skill/
# Отключить LLM-анализ (только статический, быстрее)
skillspector scan ./my-skill/ --no-llm
Пример отчёта в терминале
SkillSpector Security Report v2.0.0
Skill: suspicious-skill
Source: ./suspicious-skill/
Scanned: 2026-01-29 10:30:00 UTC
Risk Assessment
Metric Value
Score 78/100
Severity HIGH
Recommendation DO NOT INSTALL
Components (3)
File Type Lines Executable
SKILL.md markdown 142 No
scripts/sync.py python 87 Yes
requirements.txt text 3 No
Issues (2)
HIGH: Env Variable Harvesting (E2)
Location: scripts/sync.py:23
Finding: for key, val in os.environ.items():...
Confidence: 94%
Explanation: This code collects environment variables containing API keys and secrets, then sends them to an external server.
HIGH: External Transmission (E1)
Location: scripts/sync.py:45
Finding: requests.post("https://api.skill.io/env"...
Confidence: 89%
Explanation: Data is being sent to an external server. Combined with env harvesting above, this indicates credential exfiltration.
Переменные окружения и CLI‑опции
Основные переменные окружения
SKILLSPECTOR_PROVIDER— активный LLM‑провайдер:openai,anthropicилиnv_build. По умолчаниюnv_build.NVIDIA_INFERENCE_KEY— ключ дляnv_build(build.nvidia.com). Нужен для LLM‑анализа.OPENAI_API_KEY— ключ дляopenai. Также используется как второй уровень в «водопаде» учётных данных, если активный провайдер не вернул ключ.OPENAI_BASE_URL— переопределение endpoint’а OpenAI (например, на Ollama).ANTHROPIC_API_KEY— ключ дляanthropic.SKILLSPECTOR_MODEL— переопределяет модель по умолчанию для активного провайдера.SKILLSPECTOR_MODEL_REGISTRY— путь к кастомному YAML‑реестру моделей вместо встроенного (src/skillspector/providers/<provider>.yaml).SKILLSPECTOR_LOG_LEVEL— уровень логов:DEBUG,INFO,WARNING,ERROR(по умолчаниюWARNING).
CLI‑опции
skillspector scan --help
Options:
-f, --format [terminal | json | markdown | sarif] Output format [default: terminal]
-o, --output PATH Output file path
--no-llm Skip LLM analysis (static only)
-V, --verbose Show detailed progress
--help Show this message and exit
Интеграция с Python
SkillSpector можно вызывать напрямую из Python‑кода, например из собственного пайплайна безопасности или платформы агентов.
from skillspector import graph
# Invoke the LangGraph workflow
result = graph.invoke({
"input_path": "/path/to/skill",
"output_format": "json", # terminal, json, markdown, or sarif
"use_llm": True, # False for static-only analysis
})
# Access results
print(f"Risk Score: {result['risk_score']} /100")
print(f"Severity: {result['risk_severity']}")
print(f"Recommendation: {result['risk_recommendation']}")
for finding in result["filtered_findings"]:
print(f"[{finding['severity']}] {finding['rule_id']}: {finding['message']}")
Как устроена разработка
Для разработки достаточно стандартного Python‑стека с make.
# Клон, venv, активация, установка dev-зависимостей
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
uv venv .venv && source .venv/bin/activate
# или:
python3 -m venv .venv && source .venv/bin/activate
make install-dev
# Запуск тестов
make test
# Тесты с покрытием
make test-cov
# Линтинг
make lint
# Форматирование кода
make format
Лицензия — Apache 2.0, проект открыт для pull‑request’ов.
Ограничения и исследовательский бэкграунд
SkillSpector честно обозначает ограничения:
- хуже работает с контентом не на английском языке;
- не анализирует текст в изображениях;
- не разбирает зашифрованный или бинарный код;
- не выполняет код, только статический анализ;
- без доступа к
api.osv.devпроверка CVE ограничена встроенным списком.
Инструмент опирается на исследование "Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale" (Liu et al., 2026):
- датасет — 42 447 навыков из крупных маркетплейсов;
- 26,1% содержат хотя бы одну уязвимость;
- 5,2% демонстрируют вероятно злонамеренное поведение;
- навыки с исполняемыми скриптами в 2,12 раза чаще оказываются уязвимыми.
Если вы уже запускаете агентов в проде или только собираетесь, SkillSpector — это разумный минимум для гигиены безопасности вокруг навыков.
Читайте также
- Anthropic представила Claude Fable 5 и Mythos 5: максимум мощности с жёсткими ограничениями по кибербезопасности и биологии
- Промпт — это не вдохновение, а конструктор из 10 блоков: как работает скилл pepper-prompt-engineer
- Microsoft Entra Suite: как Microsoft предлагает закрыть все вопросы с доступом сотрудников