AUTOMATA.SALE Системы привлечения заказов
Связаться

SkillSpector от NVIDIA: просканировал 41 свой скилл ИИ-агентов — что нашлось на самом деле

Евгений Урядов

SkillSpector от NVIDIA: просканировал 41 свой скилл ИИ-агентов — что нашлось на самом деле

Скиллы стали главным способом расширять ИИ-агентов: в Claude Code, Codex CLI и Gemini CLI это каталоги с инструкциями и скриптами, которые агент читает как свою операционную систему. Ставится такой каталог одной командой — и вместе с ним на вашу машину приезжает чужой код с доступом к файлам, репозиториям, базе клиента и API-ключам.

NVIDIA подошла к этому как к классической проблеме цепочки поставки и выложила SkillSpector — открытый сканер безопасности скиллов, который отвечает на один вопрос: «можно ли это ставить?». Я поставил его и прогнал по всем 41 своим скиллам. Рассказываю, что нашлось на самом деле — spoiler: почти всё самое громкое оказалось ложными срабатываниями, но одну реальную проблему сканер поймал.

Зачем нужен сканер скиллов

Исходная цифра из исследования NVIDIA, на которое ссылается README: из датасета в 42 447 скиллов проанализировали 31 132, и 26,1% содержат уязвимости, а 5,2% показывают вероятный вредоносный замысел. Скиллы с исполняемыми скриптами уязвимы в 2,12 раза чаще остальных.

Для бизнеса, который внедряет агентную автоматизацию, это новая поверхность атаки, о которой пока мало кто думает. Мы давно привыкли проверять пакеты в package.json на известные CVE и не запускать непонятные скрипты из интернета. Но скилл — это гибрид: наполовину документация для модели (промпт-инъекции, «отравление» памяти агента, скрытые инструкции игнорировать отказы), наполовину код (эксфильтрация данных, privilege escalation, supply chain). Обычный антивирус вторую половину увидит, первую — нет.

SkillSpector закрывает обе. Это статический анализатор с 71 паттерном в 17 категориях: инъекции в промпты, эксфильтрация данных, повышение привилегий, скрытие системного промпта, отравление памяти, чрезмерная автономность агента, «рогейн»-поведение MCP-серверов (когда сервер меняет описание инструментов после установки), YARA-сигнатуры малвари и AST-анализ опасного кода с трекингом потоков данных. Плюс онлайн-проверка зависимостей по CVE через OSV.dev.

Важно понимать границы: сканер не исполняет скилл — это defense-in-depth, а не песочница. Он не поймает поведение, которое проявляется только в рантайме, и не прочитает картинки или обфусцированный байткод. Зато он ловит то, на что человек при беглой установке не посмотрит вообще никогда.

Как выглядит проверка

Установка через uv одной командой, без загрязнения системы:

uv tool install git+https://github.com/NVIDIA/skillspector.git

Проверка чужого скилла перед установкой:

skillspector scan https://github.com/user/some-skill --no-llm

Сканер выдаёт риск-скор от 0 до 100 с полосами LOW / CAUTION / HIGH / CRITICAL и, главное, код возврата: 0 — ставить можно, 1 — риск выше 50, 2 — ошибка скана. Это устойчивый контракт для CI и скриптов установки: проверка скилла превращается в такой же рутиный шаг, как проверка подписи пакета. Отчёт можно вывести в JSON, Markdown или SARIF.

Флаг --no-llm держит весь анализ локально: наружу уходят только имена зависимостей для проверки CVE. Необязательный LLM-режим (семантическая оценка «что автор имел в виду») отправляет содержимое файлов настроенному провайдеру — для клиентских и вообще чувствительных проектов его просто не включаем.

Эксперимент: 41 скилл под сканером

У меня в ~/.agents/skills/ живёт 41 скилл — от SEO-инструментов до автоматизаций CRM. Часть написана руками, часть выросла из рабочих сессий. Идеальная выборка для калибровки: я точно знаю, что малвари там нет.

Результат: 11 скиллов получили максимальный скор 100/CRITICAL с вердиктом DO_NOT_INSTALL. Если бы это были чужие скиллы, я бы их не поставил. Разбираю, что именно триггерило — это и есть самое поучительное в сканере.

Скилл про безопасность матчится сам на себя. senior-security — скилл, который ищет утечки секретов. Его собственные регулярки для .env и токенов сканер справедливо распознал как «доступ к креденшелам»: 20 находок Privilege Escalation. Ложное срабатывание по определению: инструмент обнаружения содержит сигнатуры того, что обнаруживает. То же с code-reviewer, в справочнике которого лежат примеры опасного кода.

Локальный dev-инструмент читается как SSRF. Скилл impeccable с живым превью в браузере ходит fetch('http://localhost…') — 12 находок Server-Side Request Forgery. Для инструмента разработчика это нормальное поведение; тревожным оно было бы в скилле, которому localhost не нужен.

YARA-правило сработало на YAML. У md-slides сигнатура «MCP metadata poisoning» сработала на… YAML frontmatter с полями tools: и description: в обычном скилле. Классика сигнатурного анализа: комбинация безобидных признаков выглядит подозрительно.

Незакреплённая версия — замечание справедливое. senior-qa получил 20 находок «MCP server referenced without pinned version» за npx playwright без пина версии. Формально это не атака, но rug-pull-риск: что сегодня npx тянет одно, завтра — другое. Это уже гигиена, которую стоит чинить.

Что сканер поймал реального

Одна находка оказалась не ложной. Семь скиллов тащили в себе каталоги __pycache__ со скомпилированными .pyc-файлами — Python сам создаёт их при запуске скриптов, и они случайно попали в репозитории.

Это именно то, о чём предупреждает сканер: скомпилированный байткод стандартный анализ пропускает, и это классическое место для сокрытия полезной нагрузки — вредоносный .pyc рядом с чистым .py не увидит ни человек, ни часть инструментов. Убрал каталоги (пересоздадутся при следующем запуске), заодно стало чище.

Мораль эксперимента двоякая. С одной стороны — не паникуйте при виде CRITICAL: смотрите улики (файл, строка, совпавший паттерн), а не только вердикт. С другой — даже на заведомо чистых, написанных своими руками скиллах сканер нашёл то, что стоило почистить. На чужих скиллах из интернета плотность реальных проблем по данным NVIDIA — порядка процентов, и проверить дешевле, чем разбирать последствия.

Как встроить в процесс

Для себя я зафиксировал три правила, они же — ответ на вопрос «а что делать с этим всем»:

Чужие скиллы — только через сканер. Одна команда до установки, код возврата как гейт. Если скор выше 50 — читаю JSON-отчёт с уликами и решаю осознанно. Это занимает секунды.

Свои скиллы — периодический аудит. Раз в месяц прогонять весь каталог: ловится и мусор вроде __pycache__, и дрейф (скилл, в который со временем добавили curl с токеном в аргументах — реальный паттерн эксфильтрации).

Ложные срабатывания — через baseline, а не через отключение. У сканера есть механизм подавления принятых ложняков (baseline-файл). Глушить конкретные находки с комментарием «почему ок» — правильный путь; отключать сканер целиком — нет.

Если вы внедряете ИИ-агентов в бизнес-процессы — особенно с доступом к CRM, базе клиентов или серверам — приходите обсудим архитектуру с безопасностью по умолчанию: от ограниченных мандатов для агентов до проверки всей цепочки поставки. Напишите мне в Telegram.


📞 +7 (906) 311-77-69 · ✉ hello@automata.sale · 💬 Telegram: @automatasale · 🌐 automata.sale

ИП Урядов Евгений Евгеньевич · ИНН 645112058391 · ОГРНИП 312645301900058 Работаем по России, Беларуси и Казахстану


Automata может помочь:

Частые вопросы

Что такое SkillSpector?

Открытый сканер безопасности от NVIDIA (лицензия Apache 2.0), который анализирует скиллы ИИ-агентов и MCP-серверов до установки: 71 паттерн уязвимостей в 17 категориях, от инъекций в промпты до YARA-сигнатур малвари. Скилл при этом не исполняется — это статический анализ, а не песочница.

Сканер выдал CRITICAL — значит, скилл вредоносный?

Нет. В моём случае 11 из 41 скилла получили максимальный скор 100/CRITICAL, но почти все находки оказались ложными срабатываниями на легитимный функционал: скилл для поиска секретов матчится сам на себя, локальный fetch на localhost читается как SSRF. Вердикт — повод разобрать улики, а не приговор.

Уходят ли мои данные в облако при сканировании?

В режиме --no-llm нет: анализ идёт локально, наружу уходят только имена зависимостей для проверки CVE в базе OSV.dev. LLM-режим (необязательный, для семантического анализа) отправляет содержимое файлов настроенному провайдеру — для чувствительных проектов его просто не включайте.

Какие скиллы самые рискованные?

По исследованию NVIDIA, скиллы с исполняемыми скриптами уязвимы в 2,12 раза чаще остальных. Из 31 132 проанализированных скиллов 26,1% содержат уязвимости, а 5,2% показывают признаки вероятного вредоносного замысла.

Как встроить проверку в свой процесс?

Прогоняйте сканер перед каждой установкой чужого скилла и ориентируйтесь на код возврата: 0 — ставить можно, 1 — риск выше 50 из 100, 2 — ошибка скана. Это занимает секунды и превращается в обычный шаг установки, как проверка подписи пакета.

📞 +7 (906) 311-77-69 · ✉ hello@automata.sale · 💬 Telegram: @automatasale · 🌐 automata.sale

ИП Урядов Евгений Евгеньевич · ИНН 645112058391 · ОГРНИП 312645301900058
Работаем по России, Беларуси и Казахстану