Что изменилось#
SANS ISC сообщает, что supply-chain-кампания TeamPCP одновременно расширилась на три экосистемы пакетов. По данным на 2026-05-24, в отчётах фигурируют вредоносная сборка расширения VS Code, связанная с внутренним взломом GitHub, троянизированные версии официального Python SDK от Microsoft на PyPI и крупная npm-волна через экосистему @antv.
Общий признак здесь — не просто компрометация пакетов. Компрометирован сам путь доверия.
Во всех случаях вредоносная активность шла через поверхности, которым разработчики обычно доверяют: verified publishers, официальное владение пакетом, популярные зависимости, автообновления и сигналы доверия в интерфейсе package manager. Поэтому кампания опаснее обычного typosquatting. Атакующему не нужно, чтобы каждая цель приняла плохое решение. В некоторых случаях нормального пути обновления, похоже, было достаточно.
SANS описывает три эскалации за одну неделю:
- вредоносная сборка расширения Nx Console для VS Code, которую CISO GitHub публично назвала причиной внутреннего взлома;
- вредоносные версии Python-клиента Microsoft Azure Durable Functions на PyPI;
- третья волна Mini Shai-Hulud через npm-пакеты @antv, с сотнями вредоносных версий пакетов.
Дальше важна обычная оговорка для быстро развивающихся инцидентов: часть чисел и оценок влияния взята из публичных отчётов и заявлений вендоров, на которые ссылается SANS. Практичная реакция — не паника, а проверка собственной экспозиции.
GitHub: доверенный путь расширения дал сбой#
По материалу SANS, CISO GitHub Alexis Wales публично назвала вредоносную сборку расширения Nx Console для VS Code первопричиной вторжения, при котором было эксфильтрировано примерно 3 800 внутренних репозиториев GitHub. Затронутая сборка указана как v18.95.0, опубликованная под nrwl.angular-console, с verified-publisher badge и примерно 2,2 млн установок.
По сообщениям, вредоносное расширение находилось в Visual Studio Marketplace около 18 минут.
В мире автообновлений даже такого короткого окна хватает. SANS сообщает, что на endpoint сотрудника GitHub расширение автоматически обновилось в этот период, эксфильтрировало developer secrets, а затем было использовано для lateral movement через внутренний CI/CD GitHub. В публичных отчётах, процитированных источником, сказано, что данные customer tenants не пострадали.
Этот же раздел материала SANS связывает событие с более ранней активностью TeamPCP. Там говорится, что отчёты связывают OIDC credentials, собранные во время волны TanStack 11 мая, с публикацией Nx Console 18 мая. Если это верно, речь о многоэтапной supply-chain-операции: учётные данные, украденные в одной волне, позже использовали для публикации через легитимный канал расширений.
OpenAI, Grafana Labs и Mistral AI названы среди downstream victims, у чьих разработчиков были включены автообновления, согласно исходным материалам.
Практический вывод узкий, но важный. Значок verified-publisher что-то говорит об аккаунте издателя. Он не доказывает, что каждая будущая публикация будет чистой. Легитимный аккаунт тоже можно использовать против пользователей.
PyPI-пакет Microsoft: официальное владение не спасло#
SANS также сообщает, что 2026-05-19 на PyPI были опубликованы три вредоносные версии официального Python-клиента Microsoft Azure Durable Functions. Затронутый пакет описан как клиент durabletask, с примерно 417 000 загрузок в месяц. Затронутые версии — с 1.4.1 по 1.4.3.
Окно было коротким. По SANS, версии опубликовали, а затем yanked в течение нескольких часов; троянизация произошла примерно в 35-минутном окне.
Модель воздействия всё равно серьёзная. Источник пишет, что dropper был внедрён в исходные Python-файлы пакета, то есть импорта SDK хватало для запуска вредоносного кода. Это особенно важно для CI/CD и ephemeral runners. Пакет не обязан использоваться в production: сам путь импорта уже может открыть секреты.
SANS пишет, что second-stage payload в независимых отчётах описан как credential stealer и worm, нацеленный на AWS, Azure, GCP, HashiCorp Vault, 1Password и Bitwarden. В тех же отчётах second stage описывается как несущий Linux disk wiper. Последний пункт не стоит раздувать сверх того, что говорит источник, но он повышает риск-профиль: это уже не только кража учётных данных, но и потенциально разрушительное поведение.
Для защитников операционная граница простая: если среда установила или импортировала durabletask версий 1.4.1, 1.4.2 или 1.4.3 2026-05-19, считайте её exposed до проверки. Это касается локальных машин разработчиков, build workers, короткоживущих CI runners, контейнеров и кэшированных dependency layers.
Волна @antv в npm: масштаб и поддельные сигналы доверия#
Третья эскалация, о которой сообщает SANS, — волна Mini Shai-Hulud через npm-экосистему @antv.
SANS ссылается на независимые подсчёты: 639 вредоносных версий в 323 пакетах, опубликованных через скомпрометированный аккаунт maintainer с именем atool. В затронутом наборе, по сообщениям, были популярные пакеты вроде echarts-for-react с примерно 1,1 млн загрузок в неделю и size-sensor с примерно 4,2 млн загрузок в неделю.
Источник описывает это как крупнейший одиночный всплеск кампании по числу пакетов на данный момент.
Payload описан как обфусцированный JavaScript примерно на 499 KB, который запускается во время активности пакета и собирает более 20 классов учётных данных, включая GitHub и npm tokens, а также cloud keys. Предоставленный исходный материал обрывается до полного списка credential classes, поэтому лучше не додумывать больше указанного.
Одна деталь особенно важна: SANS пишет, что у 42 вредоносных пакетов в npm UI наблюдались фальшивые Sigstore verification badges. Если это подтвердится в описанном виде, перед нами ещё один пример атаки не только на пакеты, но и на модель доверия пользователя. Люди не разбирают каждый tarball вручную. Они смотрят на имена, badges, publishers, install counts и знакомые цепочки зависимостей. Похоже, атакующий это хорошо понимает.
Что проверить прямо сейчас#
Командам не стоит считать это проблемой одной экосистемы. Описанная активность затрагивает расширения VS Code, PyPI и npm. Общая зона риска — developer identity, CI/CD secrets, права публикации пакетов и cloud credentials.
Практические проверки:
- Проверьте установки Nx Console v18.95.0, особенно на системах с включённым автообновлением в указанный период.
- Проверьте все среды, где 2026-05-19 был установлен или импортирован
durabletaskверсий 1.4.1, 1.4.2 или 1.4.3. - Проверьте dependency logs на наличие пакетов @antv, затронутых волной 2026-05-19, особенно если пакеты подтягивал CI, а не зафиксированные lockfiles.
- Ротируйте developer и CI/CD credentials, которые могли попасть под экспозицию в релевантные окна.
- Проверьте GitHub, npm, cloud, Vault, 1Password и Bitwarden-related secrets на необычный доступ или новые tokens.
- Изучите конфигурационные файлы AI coding agents и developer automation configs на предмет механизмов persistence — SANS отдельно указывает на этот пункт.
- Проведите аудит аккаунтов для package publishing: новые tokens, изменённые maintainers, неожиданные OIDC trust relationships и недавние publish events.
Ошибка защиты — смотреть только на то, доступен ли пакет сейчас. Yanked packages могут оставаться в кэшах, build layers, mirrors и на машинах разработчиков. Короткое вредоносное окно всё равно может привести к долговременной компрометации credentials.
Что не стоит утверждать слишком уверенно#
Эти отчёты сами по себе не доказывают несколько вещей.
Они не означают, что каждый пользователь Nx Console, durabletask или пакетов @antv был скомпрометирован. Экспозиция зависит от версии, времени, пути установки, пути выполнения и локальных secrets, доступных процессу.
Они не означают, что verified publishers или package attestations бесполезны. Они лишь не дают гарантии безопасности в момент установки. Они снижают одни классы риска, но оставляют другие, особенно если скомпрометирован аккаунт издателя или release path.
Они также не означают, что у каждой названной downstream-организации был одинаковый уровень ущерба. Источник называет downstream victims в контексте разработчиков с включённым автообновлением. Точный масштаб по каждой организации стоит оставлять за их собственными заявлениями.
Направление кампании при этом понятно. TeamPCP не просто распространяет вредоносный код. Группа связывает прежнюю кражу credentials с последующими доверенными публикациями, пересекает экосистемы и использует обычную механику работы разработчиков.
Правильный ответ — не отказаться от package managers. Нужно перестать считать trust badges, official ownership и популярность окончательным ответом. В этой кампании они стали частью attack surface.