Сканеры навыков Anthropic прошли все проверки. Вредоносный код проник внутри тестового файла.

Сканеры навыков Anthropic прошли все проверки. Вредоносный код проник внутри тестового файла.

Источник: VentureBeat · Louis Columbus

Представьте себе сценарий: сканер Anthropic Skill выполняет полный анализ навыка (Skill), загруженного с ClawHub или skills.sh. Инструкции в файле markdown чистые, внедрение промптов (prompt injection) не обнаружено. В файле SKILL.md нет скрытых команд оболочки. По всем параметрам — зеленый свет.

Сканер ни разу не заглянул в файл .test.ts, находящийся на одну директорию выше. Ему и не нужно было. Тестовые файлы не входят в поверхность выполнения агента, поэтому ни один публично документированный сканер их не проверяет (на момент публикации этого материала). Тем не менее этот файл запускается. Не через агента, а через тестовый фреймворк (test runner), имея полный доступ к файловой системе, переменным окружения и SSH-ключам.

Исследователь безопасности из Gecko Security Дживан Джутла (Jeevan Jutla) подробно описал этот вектор атаки, продемонстрировав, что когда разработчик выполняет команду npx skills add, установщик копирует весь каталог навыка в репозиторий. Если вредоносный навык содержит файл *.test.ts, такие тестовые фреймворки, как Jest и Vitest, находят его с помощью рекурсивных шаблонов поиска (glob patterns), воспринимают как полноценный тест и выполняют во время npm test или когда среда разработки (IDE) автоматически запускает тесты при сохранении. Конфигурация по умолчанию в популярном JavaScript-тест-фреймворке Mocha использует аналогичный шаблон рекурсивного поиска. Полезная нагрузка срабатывает в блоке beforeAll, до выполнения каких-либо утверждений (assertions). Ничто в выводе тестов не указывает на что-то необычное. В CI-пайплайне переменная process.env содержит токены развертывания, облачные учетные данные и все секретные данные, до которых может дотянуться конвейер.

Этот класс атак не нов: вредоносные скрипты postinstall в npm и плагины pytest годами эксплуатировали принцип «доверия при установке» (trust-on-install). Что делает вектор с навыками еще опаснее, так это то, что установленные навыки попадают в каталог, предназначенный для фиксации в системе контроля версий и совместного использования всей командой, распространяются на каждого коллегу, клонирующего репозиторий, и остаются вне зоны видимости любых сканеров.

Агент никогда не задействуется, а сканер Anthropic Skill читает правильные файлы для неверной модели угроз.

Три аудита, одно «слепое пятно»

Отчет Gecko не появился в вакууме. Он лег поверх двух масштабных аудитов безопасности, которые уже задокументировали масштабы проблемы с другой стороны, продемонстрировав, что сканеры обнаруживают, а не то, что они пропускают. Оба аудита сделали именно то, для чего предназначены: они измерили угрозу на поверхности выполнения, которую сканеры уже инспектируют. Gecko измерил то, что находится за ее пределами.

В академическом исследовании SkillScan, опубликованном 15 января, проанализирован 31 132 уникальных навыка Anthropic Skills, собранных с двух крупнейших маркетплейсов. Их выводы: 26,1% навыков содержали по меньшей мере одну уязвимость, охватывающую 14 различных паттернов в четырех категориях. Экстракция (утечка) данных была обнаружена в 13,3% навыков. Повышение привилегий зафиксировано в 11,8%. Навыки, содержащие исполняемые скрипты, имели в 2,12 раза больше шансов содержать уязвимости, чем навыки, состоящие только из инструкций.

Три недели спустя компания Snyk опубликовала отчет ToxicSkills — первый комплексный аудит безопасности маркетплейсов ClawHub и skills.sh. Команда Snyk просканировала 3 984 навыка (по состоянию на 5 февраля). Результаты: 13,4% всех навыков содержали как минимум одну проблему безопасности критического уровня. Было выявлено 76 подтвержденных вредоносных полезных нагрузок с помощью комбинации автоматизированного сканирования и проверки человеком. Восемь из этих вредоносных навыков все еще были публично доступны на ClawHub на момент публикации исследования.

Затем компания Cisco выпустила 21 апреля свой сканер безопасности агентов ИИ для IDE (AI Agent Security Scanner for IDEs), интегрировав свой инструмент с открытым исходным кодом Skill Scanner напрямую в VS Code, Cursor и Windsurf. Этот сканер добавляет реальные возможности в рабочие процессы разработчиков. Он не проверяет встроенные тестовые файлы, поскольку категории обнаружения, созданные Cisco, нацелены на уровень взаимодействия агента, а не на уровень инструментов разработчика.

Три основных сканера Anthropic Skill имеют общее структурное «слепое пятно»: ни один из них не проверяет встроенные тестовые файлы в качестве поверхности выполнения, хотя Gecko Security доказала, что эти файлы выполняются с полными локальными разрешениями через стандартные тестовые фреймворки.

Snyk Agent Scan, сканер безопасности ИИ-агентов от Cisco и VirusTotal Code Insight — все они работают. Они выявляют внедрение промптов, команды оболочки и утечку данных в описаниях навыков и скриптах, на которые ссылается агент. Чего они не делают, так это не заглядывают за пределы поверхности выполнения агента на поверхность выполнения разработчика, находящуюся в том же каталоге.

Как работает цепочка атак

Механика цепочки атак важна, поскольку исправление носит точный характер. Когда разработчик выполняет команду npx skills add owner/repo-name, установщик клонирует репозиторий навыка и копирует его содержимое в каталог .agents/skills// внутри проекта. Claude Code, Cursor и другие IDE для агентов получают символические ссылки на свои собственные каталоги навыков. Единственные файлы, которые исключаются — это .git, metadata.json и файлы, начинающиеся с символа _. Всё остальное попадает на диск.

И Jest, и Vitest передают параметр dot: true своим движкам поиска по шаблону (glob). Это означает, что они обнаруживают тестовые файлы внутри каталогов, начинающихся с точки, таких как .agents/. Поведение Mocha зависит от конфигурации, но по умолчанию следует аналогичным паттернам рекурсивного поиска. Ни один из них не исключает .agents/, .claude/ или .cursor/ из путей обнаружения по умолчанию.

Злоумышленник публикует навык с чистым файлом SKILL.md и файлом tests/reviewer.test.ts, содержащим блок beforeAll. Этот блок считывает process.env, файлы .env, закрытые ключи ~/.ssh/ и учетные данные ~/.aws/credentials. Он отправляет всё на внешний эндпоинт. Тестовые кейсы выглядят правдоподобно. Эксфильтрация происходит во время инициализации, безмолвно, независимо от того, проходят тесты успешно или завершаются с ошибкой.

Вектор не ограничивается TypeScript. Репозитории на Python сталкиваются с такой же уязвимостью через conftest.py, который pytest автоматически выполняет во время сбора тестов. Добавьте .agents в исключения testpaths в файле pyproject.toml для блокировки этого поведения.

Каталог .agents/skills/ предназначен для фиксации в репозитории, чтобы члены команды могли делиться навыками. Шаблоны .gitignore по умолчанию от GitHub не включают каталог .agents/. Как только вредоносный тестовый файл попадает в репозиторий, каждый разработчик, клонирующий проект и запускающий тесты, выполняет эту полезную нагрузку. То же самое делает каждый CI-пайплайн на каждой ветке и каждом форке, который наследует набор тестов.

Сканеры исследуют не ту поверхность угроз

Технический директор CrowdStrike Элиа Зайцев (Elia Zaitsev) охарактеризовал эту структурную проблему в операционных терминах во время эксклюзивного интервью VentureBeat на конференции RSAC 2026: «Наблюдение за реальными кинетическими действиями — это структурированная и решаемая задача, — сказал Зайцев. — Намерение — нет».

Это различие бьет прямо в уязвимость сканеров Anthropic Skill. Ни один публично документированный сканер не работает вне предположения, что угроза кроется в файле SKILL.md и в скриптах, которые агент получает указание запустить. Эти инструменты анализируют намерения: что навык говорит делать агенту? Находка Gecko относится к кинетической стороне. Тестовый файл выполняется через собственный инструментарий разработчика. Никакой агент не задействован. Никакой промпт не интерпретируется. Полезная нагрузка представляет собой код TypeScript, выполняемый с полными локальными разрешениями через легитимный тестовый фреймворк. Сканер решал не ту задачу.

Зайцев из CrowdStrike обозначил и аспект идентификации: «ИИ-агенты и нечеловеческие учетные записи будут стремительно распространяться на уровне предприятий, экспоненциально возрастая и затмевая человеческие учетные записи, — заявил он VentureBeat. — Каждый агент будет действовать как привилегированная сверхчеловеческая сущность с токенами OAuth, ключами API и постоянным доступом к ранее изолированным наборам данных».

Charlotte AI от CrowdStrike и аналогичные корпоративные агенты работают именно с такими привилегиями. Когда эти учетные данные хранятся в переменных окружения, доступных любому процессу в репозитории, полезной нагрузке из тестового файла не нужны привилегии агента. У нее уже есть привилегии разработчика, что в большинстве конфигураций CI означает токены развертывания и доступ к облаку.

Майк Ример (Mike Riemer), старший вице-президент группы сетевой безопасности и полевой директор по информационной безопасности (CISO) в Ivanti, оценил окно для эксплуатации в <интервью VentureBeat> (интервью VentureBeat). «Злоумышленники занимаются обратным инжинирингом патчей в течение 72 часов, — сказал Ример. — Если клиент не устанавливает патч в течение 72 часов с момента выпуска, он уязвим для эксплуатации».

Большинству предприятий требуются недели. «Слепое пятно» сканера Anthropic Skill увеличивает это временное окно. Разработчик устанавливает вредоносный навык сегодня. Тестовый файл выполняется немедленно. Патч не существует, потому что ни один сканер его не зафиксировал.

Таблица аудита Anthropic Skill Audit Grid

VentureBeat освещает цепочку поставок Anthropic Skill с момента запуска кампании ClawHavoc на ClawHub в январе. Каждая беседа с лидерами в сфере безопасности упирается в одно и то же разочарование. Их команды купили сканер, он выдает отчет об отсутствии угроз, и у них нет никакой методологии, чтобы выяснить, что именно инструмент не проверяет.

VentureBeat опросил команды разработчиков, которые устанавливают навыки Anthropic с ClawHub и skills.sh. Приведенная ниже таблица объединяет результаты опубликованных аудитов (Snyk, SkillScan) и проблему обхода сканеров (Gecko). Каждая строка представляет собой поверхность обнаружения, которую служба безопасности должна проверить перед одобрением любого инструмента сканирования навыков для закупки во втором квартале.

Вопрос аудита

Что сканеры делают сегодня

Пробел (уязвимость)

Рекомендуемое действие

Проверка SKILL.md и скриптов, вызываемых агентом

Покрывается Snyk Agent Scan, Cisco AI Agent Security Scanner, VirusTotal Code Insight

Это защищенная область. Злоумышленники переносят полезные нагрузки в файлы за ее пределами.

Продолжайте использовать текущие сканеры. Они выявляют реальные угрозы на уровне инструкций.

Проверка встроенных тестовых файлов (*.test.ts, *.spec.js, conftest.py)

В настоящее время не проверяются как поверхность атаки ни одним сканером

Gecko доказала, что тестовые файлы выполняются через Jest/Vitest (документировано) и Mocha (зависит от конфигурации) с полными локальными разрешениями. Агент не вызывается.

Добавьте .agents/ в параметры testPathIgnorePatterns (Jest) или исключите в (Vitest). Одна строка конфигурации.

Маркировка навыков, содержащих тестовые файлы или конфигурации сборки

Не отмечаются как метаданные повышенного риска ни одним сканером

Тривиальная статическая проверка. Навыки с дополнительными исполняемыми файлами в 2,12 раза чаще оказываются уязвимыми (SkillScan).

Добавьте CI-проверку: find .agents/ -name «*.test.*» | grep -q . && exit 1. Блокируйте слияние (merge) при совпадении.

Ограничение глобальных шаблонов тестового фреймворка путями проекта

Редко. Большинство CI-конфигураций используют рекурсивный glob. Jest/Vitest по умолчанию передают dot: true.

Шаблоны по умолчанию обходят каталоги .agents/, .claude/, .cursor/. Вредоносные тестовые файлы обнаруживаются автоматически.

Ограничьте корни тестов собственными каталогами проекта (src/, app/). Запретите .agents/, .claude/, .cursor/.

Различение навыков со встроенными скриптами и навыков, состоящих только из инструкций

Частичное покрытие с помощью статического и семантического анализа

SkillScan: навыки со встроенными скриптами в 2,12 раза чаще содержат уязвимости, чем состоящие только из инструкций.

Требуйте структурированную запись аудита: тип навыка, поверхности выполнения, покрытие сканером, остаточный риск.

Публикация методологии аудита с размером выборки

Snyk — да (3 984 навыка). SkillScan — да (31 132 навыка).

Cisco и новые сканеры не опубликовали эквивалентные аудиты масштаба экосистемы.

Спрашивайте вендоров: методология, объем выборки, процент обнаружения. Нет опубликованного аудита — нет независимой базы.

Привязка источников навыков к неизменяемым коммитам (immutable commits)

Не поддерживается ни одним сканером или маркетплейсом

Авторы навыков могут опубликовать чистую версию для проверки, а после одобрения добавить вредоносный тестовый файл.

Выполняйте привязку к конкретному хешу коммита. Проверяйте изменения (diff) при каждом обновлении. OWASP Agentic Skills Top 10 рекомендует именно это.

Три шага по укреплению CI, которые нужно внедрить прямо сейчас

Ример высказал более общую мысль в интервью VentureBeat: размещение средств контроля безопасности по периметру провоцирует любую угрозу направлять именно на эту границу. Сканеры Anthropic Skill установили границу на уровне SKILL.md. Злоумышленники поместили полезную нагрузку на один каталог левее. Три изменения, описанные ниже, сдвигают границу туда, где код фактически выполняется.

Эти изменения занимают считанные минуты. Ни одно из них не требует замены текущих инструментов или ожидания, пока поставщики сканеров закроют эту брешь.

Добавьте каталог .agents/ в список игнорирования тестового фреймворка. В Jest добавьте /.agents/ в параметр testPathIgnorePatterns в файле jest.config.js. В Vitest добавьте **/.agents/** в массив exclude в файле vitest.config.ts. Одна строка в одном файле конфигурации мешает тестовому фреймворку обнаруживать файлы внутри установленных каталогов навыков. Сделайте это независимо от того, использует ли команда в данный момент навыки Anthropic. Этот каталог может появиться в клонированном репозитории без установки навыка кем-либо напрямую.

Проверяйте каждую установку навыка на наличие файлов, не являющихся инструкциями, перед слиянием. Добавьте CI-проверку, которая выявляет любые файлы в .agents/skills/, соответствующие маскам *.test.*, *.spec.*, __tests__/, *.config.* или conftest.py. У этих файлов нет законных причин находиться внутри каталога навыков. Проверка представляет собой однострочник для оболочки: [ -d .agents ] && find .agents/ -name «*.test.*» -o -name «*.spec.*» -o -name «conftest.py» -o -name «*.config.*» -o -type d -name «__tests__» | grep -q . && exit 1. Если обнаруживается совпадение, блокируйте слияние. Для любых тестовых файлов, попавших в PR, требуйте от рецензента просматривать код на предмет вызовов командной оболочки (exec, spawn, child_process), внешних сетевых запросов и операций с файлами, затрагивающих секретные данные или SSH-ключи.

Привязывайте источники навыков к конкретным коммитам, а не к последней версии (latest). Команда npx skills add копирует всё, что содержит репозиторий на момент установки. Автор навыка может опубликовать чистую версию для проверки сканером, а после одобрения добавить вредоносный тестовый файл. Привязка к конкретному хешу коммита преобразует модель «доверие при первой установке» в модель «проверка при каждом изменении». Документ OWASP Agentic Skills Top 10 рекомендует именно этот подход.

Если навыки уже находятся в вашем репозитории: выполните приведенную выше команду find для вашего существующего каталога .agents/ прямо сейчас. Если тестовые файлы присутствуют, относитесь к ним как к потенциальной компрометации: смените любые учетные данные, доступные для CI (токены развертывания, облачные ключи, SSH-ключи), изучите логи CI на предмет неожиданных исходящих сетевых запросов во время выполнения тестов и просмотрите историю git, чтобы определить, когда тестовые файлы попали в репозиторий и какие пайплайны их выполняли.

Пять вопросов к вендору вашего сканера Anthropic Skill

Команды безопасности подписывают контракты на свои первые специализированные инструменты сканирования навыков. Обходной путь Gecko означает, что вопросы во время этих звонков по продажам должны измениться. Не ограничивайтесь вопросом «Обнаруживаете ли вы внедрение промптов?». Спросите:

  • Какие файлы и каталоги вы на самом деле анализируете в репозитории навыка?

  • Рассматриваете ли вы тестовые файлы как потенциальные поверхности выполнения?

  • Можете ли вы помечать как повышенный риск навыки, которые содержат тесты, конфигурации CI или скрипты сборки? Исследование SkillScan показало, что навыки со встроенными скриптами в 2,12 раза чаще оказываются уязвимыми.

  • Предоставляете ли вы интеграцию или рекомендации по ограничению шаблонов поиска (glob) тестового фреймворка в CI? Компания Cisco заслуживает похвалы за открытие исходного кода своего Skill Scanner на GitHub, что позволяет службам безопасности точно проверять, какие категории обнаружения реализованы в инструменте. Такая прозрачность — это базовый уровень, которому должен соответствовать каждый вендор. Если ваш поставщик не публикует категории обнаружения и не открывает логику сканирования, вы не можете проверить, что именно они проверяют, а что пропускают.

  • Публиковали ли вы аудит масштаба экосистемы с указанием методологии и размера выборки? Snyk опубликовала отчет для 3 984 навыков. SkillScan — для 31 132. Ример описал шаблон раскрытия информации: «Они решили не публиковать CVE. Они просто тихо пропатчили уязвимость и пошли дальше по жизни», — сказал он. Экосистема Anthropic Skills проявляет ранние признаки того же паттерна: сканеры документируют то, что они обнаруживают, не отображая поверхности, которых они не достигают. Разрыв между документированным покрытием и реальной поверхностью выполнения — это то место, где обитает вектор тестового файла.

Таблица аудита важна, потому что модель сканера неполна

Экосистема Anthropic Skills повторяет раннюю историю цепочки поставок npm, за исключением отсутствия десятилетия накопленных инцидентов, которые заставили реестры пакетов создать инфраструктуру безопасности. Набор данных SkillScan, насчитывающий 31 132 навыка, показал, что четверть экосистемы имеет уязвимости. Snyk обнаружила 76 подтвержденных вредоносных полезных нагрузок менее чем в 4 000 навыков. Gecko доказала, что сама модель сканера имеет структурный пробел, закрытие которого ни один вендор публично не задокументировал.

Оценки сканеров неизменно тестируют только покрываемую поверхность. Таблица аудита Anthropic Skill Audit Grid дает командам безопасности семь поверхностей аудита для проверки перед подписанием контракта. Три шага для CI — это исправления, которые нужно внедрить до установки следующего навыка. Команда Ivanti под руководством Римера наблюдает, как цикл от патча до эксплуатации сокращается в реальном времени в корпоративных средах. Вектор тестового файла сокращает его еще сильнее: ни один сканер не зафиксировал угрозу, поэтому окно для установки патча просто отсутствует.

Сканер не сломан. Он неполнен. Модель угроз остановилась на агенте. Тестовый фреймворк — нет.

Безопасность

Смотреть все

Подпишитесь на свежие новости!

Глубокая аналитика для руководителей в области корпоративного ИИ, данных и безопасности

Подписаться по RSS

RSS-ленты обновляются каждые 15 минут.