Продукты
TRAIODerScannerSonatypeHashiCorp VaultDPA FASTBurp DASTBurp ProfessionalDevSecOps услуги от TRIDS
Услуги
Внедрение DevSecOpsАнализ защищенности ПООбучение AppSec и DevSecOps
Компания
О компанииКарьера и стажировкаAppSecFestSonatype User GroupПолитикаБлогКонтакты
Язык
RUKZENUZ
+7 777 734 7070 Получить консультацию

Атаки на цепочку поставок ПО: вредоносные пакеты npm и PyPI и как защититься

22.10.2026 7 мин чтения AST Cyber Lab

Атака на цепочку поставок ПО — это компрометация не вашей системы, а того, что вы в неё устанавливаете: открытых библиотек, сборочных скриптов, учётных записей разработчиков. Защита строится на трёх принципах: знать состав своих приложений (SBOM), не пускать подозрительные пакеты в сборку (политики и карантин на уровне репозитория) и беречь секреты разработчиков и CI/CD.

Что такое атака на цепочку поставок

Современное приложение на большую часть состоит из чужого кода. Разработчик добавляет одну зависимость и вместе с ней получает десятки транзитивных. Каждая из них — потенциальная точка входа: если злоумышленник заменит пакет или внедрит в него код, вредоносная часть попадёт к вам автоматически, при обычной установке зависимостей.

Основные сценарии:

  • Вредоносный пакет с нуля. Атакующий публикует пакет с привлекательным названием, и его кто-то устанавливает.
  • Тайпсквоттинг и подмена имён. Пакет называется почти как популярный, расчёт на опечатку или невнимательность. Родственный приём — подмена пространства имён (namespace confusion).
  • Захват аккаунта мейнтейнера. Настоящий популярный пакет получает вредоносную версию от имени законного автора.
  • Внедрение через доверие. Атакующий годами участвует в проекте, получает права мейнтейнера и добавляет закладку.
  • Зависимость-червь. Вредонос крадёт токены разработчика и сам публикует заражённые версии других пакетов.

Масштаб проблемы

Согласно отчёту Sonatype «2026 State of the Software Supply Chain», в 2025 году было зафиксировано 454 648 новых вредоносных пакетов. За тот же год разработчики скачали компоненты 9,8 триллиона раз из Maven Central, PyPI, npm и NuGet. Sonatype отмечает, что угрозы сместились от спама к «устойчивым, индустриализированным кампаниям», среди которых есть и поддерживаемые государствами. Вредоносные пакеты часто служат первым шагом многоступенчатой атаки: кража секретов, загрузчики, бэкдоры.

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

Реальные инциденты

ua-parser-js (октябрь 2021): захват аккаунта

22 октября 2021 года злоумышленники получили доступ к учётной записи разработчика популярной npm-библиотеки ua-parser-js, которая определяет браузер и ОС по строке user-agent, и опубликовали три вредоносные версии: 0.7.29, 0.8.0 и 1.0.0. По данным CERT-EU, скрипт preinstall проверял операционную систему. На Linux скачивался майнер XMRig, на Windows — майнер и DLL для кражи паролей из FTP-клиентов, почты, мессенджеров и браузеров. Любопытная деталь: на Linux вредонос не запускался в России, Украине, Белоруссии и Казахстане. Исправленные версии — 0.7.30, 0.8.1 и 1.0.1.

Урок: вредоносный код выполнился на этапе установки, ещё до запуска приложения, а пакет был легитимным и популярным.

XZ Utils (март 2024): закладка через доверие

В марте 2024 года разработчик Андрес Фройнд обнаружил бэкдор в библиотеке сжатия xz/liblzma, анализируя замедление SSH-подключений в тестовой версии Debian. Уязвимость получила идентификатор CVE-2024-3094 и максимальную оценку CVSS 10.0; затронуты версии 5.6.0 и 5.6.1. Публичное раскрытие — 29 марта 2024 года.

Особенность этого случая — долгая подготовка. По описанию в Wikipedia, пользователь под именем «Jia Tan» с 2021 года вёл кампанию более двух лет, а подставные аккаунты давили на исходного мейнтейнера, пока тот не выдал права. Вредоносная часть содержалась в архивах релизов, но не в самом репозитории Git, поэтому просмотр исходников на GitHub её не показывал. Кампанию заметили случайно.

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

Shai-Hulud (сентябрь 2025): червь в npm

23 сентября 2025 года американское агентство CISA выпустило оповещение о масштабной компрометации экосистемы npm. Самовоспроизводящийся червь Shai-Hulud заразил более 500 пакетов. Попав в окружение разработчика, он искал учётные данные, в том числе токены GitHub и ключи API AWS, Google Cloud и Azure, отправлял их на сервер злоумышленников и выкладывал в публичный репозиторий. Затем червь аутентифицировался в npm от имени разработчика и публиковал заражённые версии других его пакетов. Так он распространялся дальше.

Рекомендации CISA: проверить файлы блокировки (package-lock.json, yarn.lock) на затронутые пакеты, в том числе вложенные; найти кешированные копии в репозиториях артефактов; закрепить версии, выпущенные до 16 сентября 2025 года; сменить все учётные данные разработчиков; включить MFA, устойчивую к фишингу, для GitHub и npm; ограничить исходящие соединения.

Урок: утёкший токен разработчика превращается в канал распространения. Здесь секреты и цепочка поставок — одна и та же проблема (см. управление секретами).

Почему это касается компаний в Центральной Азии

Банки и финансовые компании региона разрабатывают приложения на тех же npm, PyPI, Maven и NuGet, что и весь мир. Региональная география сама по себе не защищает: в описании CERT-EU по ua-parser-js Казахстан упомянут среди стран, где Linux-вариант майнера не запускался, а для Windows-ветки с кражей паролей такого исключения не указано. К тому же разработчики часто работают из закрытых контуров с прокси-доступом в интернет, где один неконтролируемый канал прямой установки пакетов обнуляет защиту.

Как защититься: практические меры

1. Знайте, что у вас есть

Без инвентаря нельзя быстро ответить на вопрос «затронуты ли мы?». Формируйте SBOM при каждой сборке и храните его вместе с релизом. Подробности — в статье «Что такое SBOM». SCA-инструменты вроде Sonatype Lifecycle находят уязвимые и вредоносные компоненты и показывают, в каких приложениях они используются.

2. Ставьте шлюз между интернетом и сборкой

Все зависимости должны идти через внутренний менеджер артефактов, а прямой доступ сборочных агентов к npmjs.com и PyPI нужно закрыть. Это даёт точку контроля. Sonatype Repository Firewall блокирует вредоносные и уязвимые пакеты в момент скачивания, помещает подозрительные компоненты в карантин и автоматически освобождает те, что признаны безопасными. Политики можно строить по возрасту пакета, уровню риска и лицензии. Продукт спроектирован для Nexus Repository, а для других репозиториев-менеджеров у Sonatype есть Firewall Pro. Подробнее о выборе — Nexus Repository vs Artifactory.

3. Закрепляйте версии и проверяйте обновления

  • Используйте lock-файлы и фиксируйте версии, а не диапазоны.
  • Вводите «карантин новизны»: не принимайте в сборку версию, опубликованную совсем недавно, пока она не проверена. Многие атаки обнаруживаются в первые часы или дни.
  • Следите за подозрительными изменениями в скриптах установки (preinstall, postinstall).

4. Защитите учётные записи и секреты

  • Включите MFA, устойчивую к фишингу, на GitHub, npm и PyPI.
  • Не храните токены в открытом виде в переменных окружения разработчиков и в репозиториях. Используйте хранилище секретов и короткоживущие учётные данные.
  • Подготовьте процедуру массовой ротации: после инцидента вроде Shai-Hulud менять придётся всё.

5. Проверяйте собственный код и сборку

Закладка может попасть и через вашего подрядчика, и через внутренний пакет. SAST и бинарный анализ помогают найти недекларированные возможности в собственном коде и в сторонних сборках. О классах инструментов — в статье SAST, DAST, SCA и MAST.

6. Подготовьте реагирование

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

С чего начать

  1. Закройте прямой доступ сборки к внешним реестрам и направьте её через менеджер артефактов.
  2. Включите сканирование состава и формирование SBOM для критичных приложений.
  3. Настройте политики блокировки вредоносных пакетов и карантина новых версий.
  4. Проведите ревизию токенов и включите MFA для разработчиков.
  5. Отрепетируйте сценарий «найден вредоносный пакет».

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

Чем вредоносный пакет отличается от уязвимого?
Уязвимый пакет содержит ошибку, которой можно воспользоваться (например, Log4Shell). Вредоносный пакет создан или изменён для нападения: выполнение кода при установке, кража паролей, закладка. Для первых нужно обновление, для вторых — немедленное удаление и ротация секретов.
Достаточно ли просто сканировать зависимости в CI?
Не всегда. Вредоносный скрипт установки может выполниться раньше, чем результаты сканирования дойдут до разработчика. Поэтому проверка на входе в репозиторий артефактов (блокировка и карантин) дополняет сканирование в CI.
Что делать, если мы установили заражённый пакет?
Изолировать затронутые машины и сборочные агенты, удалить пакет, найти все приложения и образы, куда он мог попасть, и сменить все доступные с этих машин учётные данные и токены. Ориентируйтесь на рекомендации издателя оповещения, например CISA или CERT-EU.
Помогает ли SBOM предотвратить атаку?
Сам по себе нет, но он ускоряет реакцию: за минуты видно, где используется затронутый компонент. Предотвращать помогает сочетание SBOM, политик приёма пакетов и защиты секретов.

Хотите проверить, что попадает в ваши сборки, и закрыть вход вредоносным пакетам? AST Cyber Lab как дистрибьютор Sonatype в Казахстане и Центральной Азии проведёт пилот Repository Firewall и Lifecycle на ваших проектах.

Запросить пилот Sonatype

Источники

Решения по теме
Консультация

Защитим ваши приложения на всех этапах разработки.

Расскажите о задаче — эксперты AST Cyber Lab подберут решение, проведут демо и помогут с внедрением.