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