Вредоносный червь проник в пакеты npm и PyPI и крадёт ключи разработчиков

Вредоносный червь проник в пакеты npm и PyPI и крадёт ключи разработчиков

23 сентября 2026 года в двух крупных реестрах библиотек - npm для JavaScript и PyPI для Python - появились заражённые версии пакетов. Злоумышленник опубликовал обновления продукта для работы с памятью и связанной с ним надстройки. Снаружи это обычные релизы, но внутри спрятан самокопирующийся червь. Перед нами атака на цепочку поставок: вредоносный код приходит вместе с доверенной библиотекой, а не через письмо или подозрительную ссылку. Заражённые сборки разошлись по штатным каналам публикации, и какое-то время подмену никто не замечал.

Описание

Оба пакета давно публикуются и хорошо известны своей аудитории. Поэтому их компрометация особенно опасна: разработчики привыкли доверять обновлениям и редко проверяют каждую новую сборку. Заражение получили версии начиная с определённых номеров. Вредоносный код срабатывает при первом обращении к библиотеке из приложения. Этап установки программа пропускает - она ждёт, пока разработчик вызовет заражённую функцию. Необычность ситуации в том, что поддельных пакетов с похожими названиями здесь нет. Злоумышленник захватил уже существующие библиотеки с многолетней репутацией.

Показательная деталь: вредоносный код не срабатывает в момент установки пакета. Многие защитные средства проверяют именно этот этап - просматривают служебные сценарии, которые запускаются во время установки. Здесь автор атаки обошёл типовую проверку. Заражение происходит позже, при обычной работе с библиотекой, когда пользователь вызывает нужную функцию. Промежуток между установкой и запуском может составлять дни или недели, а следы заражения всплывают уже на рабочей машине.

Согласно отчёту, внутри пакетов спрятан компактный загрузчик на том же языке, что и сама библиотека. Его задача - найти и запустить скрытый исполняемый файл из неприметного служебного каталога. Сборки подготовлены заранее для Windows, Linux и macOS и для двух распространённых архитектур процессоров. Вместе с файлом передаётся закодированное описание кампании: идентификатор, название продукта и адреса управляющих серверов. У этого описания есть срок годности, поэтому устаревшая копия перестаёт выходить на связь. Такая схема позволяет оператору атаки быстро менять инфраструктуру и уходить от блокировок.

Самое тревожное - способность червя распространяться самостоятельно. Он умеет публиковать новые версии пакетов от имени заражённых учётных записей и заражать репозитории через системы автоматической сборки GitHub Actions. В коде найден готовый шаблон рабочего процесса, который запускает вредоносную сборку при любом изменении в репозитории. Червь несёт и заготовки на JavaScript и Python: первая маскируется под служебный сценарий установки, вторая встраивается в чужой код. Следов заражения в открытых репозиториях на момент публикации отчёта не нашли, однако механизм полностью готов к работе. Кампания получила рабочее обозначение supplychain.local.

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

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

Ущерб от такой атаки выходит далеко за пределы одного проекта. Через заражённый компьютер злоумышленник получает доступ к внутренней сети компании, к её сборочным системам и хранилищам кода. Подделанные обновления выглядят доверенными, поэтому их спокойно скачивают и устанавливают. Для компаний, которые распространяют собственное программное обеспечение, компрометация означает ещё и удар по репутации: клиенты теряют доверие к официальным каналам обновления. Финансовые потери складываются из простоя, расходов на расследование и штрафов за утечку персональных данных.

Защититься полностью от подобных схем нельзя, но снизить риск реально. Стоит ограничить права токенов публикации: ключ для выпуска версий не должен храниться на машине разработчика в открытом виде. Двухфакторная аутентификация для репозиториев и реестров закрывает часть сценариев кражи доступа. Сборочные среды разумно изолировать и выдавать им короткоживущие учётные данные. Любые подозрительные обновления зависимостей проверяют до установки, а скомпрометированные ключи меняют немедленно. Одна скомпрометированная учётная запись способна поставить под удар тысячи зависимых проектов, поэтому контроль доступа к публикации пакетов становится таким же обязательным, как регулярное обновление системы.

Индикаторы компрометации

IPv4

  • 139.84.223.178

Domain

  • 0b48fafd6fbe.skyleen.fr
  • 266297c6df27.skyleen.fr
  • 73376a079d87.skyleen.fr
  • 8a8acaf167b3.skyleen.fr
  • c747d139e7e9.skyleen.fr
  • d4f77a3a8cb0.skyleen.fr

SHA256

  • 381ac6dc1715d9298fe81b2a53a11f7b7d78e361ee3a6619ad54f8c4b062cc18
  • 56cd3416d2ec2aa7e7cec2a06010cf0b58eb09c0a5486809df52afeaca8f14be
  • 65faf8ccbcf5b34eb4f72c71bf82815fa9c1e2f947b9c898491540e866132c31
  • d6b3e77c36ee8017c9bf30d1da7218ec0ea843768d313eb8e35845c8a9b38a26
  • e077c387b223811064b7bbc5a55a0182fca9bf50894f949ff284d4be87d44b26
  • f8ccdd1da7dff1aef16377a2842bc7acf7c516e32122dd6e42dc4a4e57653fce

Комментарии: 0