Методология · корпус v1
Каждая цифра на этом сайте воспроизводится тремя командами
Манифест корпуса, скрипты запуска и агрегированные результаты открыты. Сырой вывод движков по каждому скиллу не распространяется, а воспроизводится локально, потому что цитирует чужой код.
Как отбирались скиллы
Поиск. Поиск по коду GitHub по filename:SKILL.md в сочетании с характерными для языка фразами (русский: навык, используй, когда пользователь; немецкий: verwende, wenn der Benutzer, Anleitung; китайский: 技能, 使用, 当用户; английский: Use this skill when, Instructions, Workflow). Файлы-кандидаты загружаются в сыром виде; перед измерением доли скриптов блоки кода удаляются, а язык определяется по оставшемуся тексту (кириллица ≥ 50 % → русский; CJK ≥ 30 % → китайский; латиница ≥ 80 % → немецкий, если плотность немецких служебных слов больше 4 % и встречаются умлауты, иначе английский).
Критерии. Frontmatter с name и description; не форк; не меньше 400 байт; определённый язык входит в целевой набор.
Отбор. Не больше трёх скиллов на репозиторий, обход владельцев по кругу, чтобы ни один плодовитый автор не доминировал; предпочтение лицензированным скиллам, затем более крупным. Каждая запись закреплена за HEAD репозитория на момент отбора через git ls-remote.
Хранение. Скиллы под пермиссивной или копилефт-лицензией SPDX хранятся копиями; все остальные — указателями (URL + SHA) и загружаются при запуске. Манифест фиксирует URL источника, коммит, лицензию, языковые доли, наличие блоков кода и запросы, по которым скилл найден.
Образцы атак. Десять паттернов × четыре языка, сгенерированные из одного шаблона на язык, чтобы различался только язык. Каждый образец обезврежен — хосты-заглушки, инертные команды, предупреждение после frontmatter — и лежит в benchmark/corpus/malicious/synthetic/. Они никогда не исполняются; ничто в корпусе не исполняется.
| корпус v1 | en | ru | de | zh | всего |
|---|---|---|---|---|---|
| легитимные | 39 | 38 | 30 | 39 | 146 |
| синтетические образцы атак | 10 | 10 | 10 | 10 | 40 |
Как запускались движки
# NVIDIA/skillspector @ 6d0b7c8 (v2.12.0) skillspector scan <dir> --no-llm --format json # cisco-ai-skill-scanner==2.3.2 (PyPI) skill-scanner scan <dir> --format json --policy balanced skill-scanner scan <dir> --format json --policy quiet # наш контрольный чекер python3 -I scripts/check_hidden_chars.py <dir>
Каждый пакет сканируется изолированно с тайм-аутом 900 секунд. Записи, не давшие разбираемого отчёта, исключаются из всех долей и перечисляются в разделе «Ошибки запуска» с указанием размера. Версии движков, тайм-ауты и история частичных прогонов пишутся рядом с результатами в results/raw/<engine>/_run.json.
Метрики
- FP на уровне вердикта — доля легитимных скиллов, которые сам движок не оценил как SAFE (SkillSpector
risk_assessment.recommendation; Ciscois_safe). FN на уровне вердикта — доля образцов атак, оценённых как SAFE. - FP на уровне находок при MEDIUM+ и HIGH+ — доля легитимных скиллов хотя бы с одной находкой такой серьёзности.
- FP только по тексту — то же, но считаются только находки, расположенные в
.md-файле. Это отделяет язык инструкций от объёма приложенного кода. - Матрица паттерн × язык — максимальная заявленная серьёзность для каждого паттерна атаки на каждом языке.
- Оценка и объём кода — оценка SkillSpector в зависимости от числа файлов кода (
.py .js .ts .sh .mjs .cjs .rb .go .ps1) с ранговой корреляцией Спирмена.
Кто ещё измеряет сканеры
Мы не первые, кто спросил, можно ли доверять сканерам скиллов, и ответы пока указывают в одну сторону. Что добавляет этот scorecard — языковой срез (одна и та же атака на четырёх языках, одни и те же правила, посчитанные по языкам) и наблюдение, что статическая оценка следует за объёмом кода в пакете.
- SkillTrustBench (CUHK-Shenzhen и Tencent Zhuque Lab, июнь 2026) — 5 520 тестовых случаев из 62 652 скиллов маркетплейсов, девять категорий угроз, открытый лидерборд. Тестирует те же движки, что и мы (Cisco Skill Scanner, NVIDIA SkillSpector), плюс Skill Vetter, и сравнивает LLM, стоящие за сканером. В тридцать раз больше нашего корпуса; без разреза по языкам.
- MalSkillBench (Guo et al., июнь 2026) — 3 944 вредоносных скилла, проверенных при исполнении в песочнице, 4 000 сопоставленных безобидных, датасет и базовые модели опубликованы. Вывод совпадает с нашим: детекторы, читающие код, пропускают атаки, переносимые инструкциями, и две половины никогда не рассматриваются вместе.
- AI Agent Skill Scanners: Bypassed Across the Board (исследовательская заметка Cloud Security Alliance по работе Trail of Bits, июнь 2026) — каждый проверенный сканер обойдён меньше чем за час; продолжение SkillCloak (июль 2026) показывает обход именно сканеров маркетплейсов.
- OWASP Agentic Skills Top 10 — AST08 «Poor Scanning» — называет риск, который измеряет этот scorecard.
- OASB Skills Security Benchmark (OpenA2A) — таблицы precision/recall для собственных пайплайнов этого вендора. Приводим для полноты; бенчмарк, который ведёт производитель ранжируемых им сканеров, отвечает на другой вопрос.
Если вы ведёте бенчмарк сканеров скиллов и его здесь нет, напишите на andrey@skillverdict.dev.
Код и данные открываются 12 ноября 2026
Репозиторий AndreyVomKeg/skillverdict-benchmark — манифест корпуса, образцы атак, скрипты запуска, журналы запусков и агрегированный scorecard — публикуется в этот день вместе с ответами разработчиков движков; семидневное окно раскрытия идёт. Команды показаны уже сейчас, чтобы процедуру можно было прочитать раньше кода.
Три команды
git clone https://github.com/AndreyVomKeg/skillverdict-benchmark cd skillverdict-benchmark python3 -I scripts/fetch_corpus.py # закреплённые SHA → corpus/_work/ python3 -I scripts/run_engines.py # results/raw/<engine>/*.json python3 -I scripts/report.py # results/scorecard.md + .json
Запускайте скрипты с python3 -I и снаружи директории корпуса: содержимое скиллов — враждебный ввод по определению. Сначала установите движки (pip install git+https://github.com/NVIDIA/skillspector.git@6d0b7c8 cisco-ai-skill-scanner==2.3.2).
Лицензии
Код бенчмарка: Apache-2.0. Манифест корпуса, синтетические образцы и агрегированные результаты: CC BY 4.0 — используйте свободно, ссылайтесь на skillverdict.dev. Скопированные скиллы сохраняют свои лицензии, записанные для каждой записи.
Политика раскрытия
Разработчики движков получают файл с находками не меньше чем за семь дней до открытия репозитория (5 ноября 2026 → 12 ноября 2026 для корпуса v1). Их ответы публикуются без редактирования. Находки по отдельным легитимным скиллам сообщаются только в агрегированном виде; список «скиллов, которые не прошли» мы не публикуем. Авторы скиллов из корпуса могут попросить об удалении по адресу andrey@skillverdict.dev; запись становится указателем или исключается в следующей версии корпуса.
Узнать, когда откроются страницы скиллов
Одно письмо, когда заработает фаза 2, и больше ничего. Выберите почтовый сервис — письмо уже написано, просто отправьте его.
Или напишите на andrey@skillverdict.dev. Если вы поддерживаете сканер и хотите получить сырые результаты до публикации — тот же адрес.