23 сентября 2026 года в публичных реестрах npm и PyPI появились модифицированные версии двух программных пакетов с открытым исходным кодом. Подмену зафиксировали в плагине OpenClaw для платформы npm и в библиотеке MemoryOS для Python. Оба компонента относятся к проекту MemTensor и используются разработчиками для интеграции с облачными сервисами.
Описание
Вредоносные выпуски содержат одинаковый двоичный файл под названием sckit. При запуске пакета этот компонент активизируется в фоновом режиме и начинает поиск конфиденциальных данных в домашней директории пользователя. Он собирает токены доступа к репозиториям, ключи шифрования, учётные записи облачных сервисов и другие секреты. Собранную информацию программа отправляет на подконтрольные злоумышленнику серверы.
По данным анализа, код также умеет копировать себя в другие проекты и пакеты, к которым у скомпрометированных учётных данных есть доступ. Это превращает атаку в самовоспроизводящуюся цепочку. Заражены версии 0.1.21, 0.1.23 и 0.1.25 для npm, а также версия 2.0.34 для PyPI. Чистые сборки 0.1.22 и 0.1.24 выходили в тот же день, но перемежались с вредоносными.
Разработчик, установивший уязвимую версию, мог даже не заметить подвоха. Вредоносный код запускается при обычной загрузке библиотеки или плагина. Для npm-пакета срабатывание происходит при старте шлюза OpenClaw и при каждом обращении к памяти. Для Python-библиотеки активация случается при первой настройке логирования, которую вызывает почти любой импорт модуля. Скрытые сценарии установки не требуются, поэтому стандартная мера защиты с отключением установочных скриптов не помогает.
Атакующий получил доступ к процессу публикации через скомпрометированные токены. В репозиторий MemTensor на GitHub были внесены правки, которые изменяли поведение сборочного конвейера. Вместо того чтобы сразу публиковать пакет, система передавала секретный ключ вредоносному скрипту. После получения токена сборка завершалась с ошибкой, и в реестр ничего не попадало, однако ключ уже оказывался у злоумышленника.
Схема повторялась для обоих репозиториев. В npm-реестре все пять версий, включая чистые и вредоносные, были опубликованы с одной учётной записи. Установить, кто именно загружал безопасные сборки, не удалось. В PyPI пакет MemoryOS загружался через тот же конвейер после публикации тега новой версии. Атакующий создал вредоносный коммит, получил токен, а затем пересоздал тег на изменённой версии кода и выпустил пакет уже с реальным ключом проекта.
Вредоносная программа использует несколько управляющих серверов. Конфигурация содержит встроенный срок действия до 22-23 октября 2026 года, после которого активность должна прекратиться. Внутри двоичного файла обнаружены функции для поиска репозиториев, подготовки удалённых проектов к заражению и рекурсивной публикации новых вредоносных пакетов. Программа также умеет определять часовой пояс, языковые настройки и другие параметры системы, что позволяет оператору отфильтровывать нежелательных жертв.
Для защиты разработчикам следует удалить заражённые версии и откатиться на чистые сборки: 0.1.20 для плагина и 2.0.33 для MemoryOS. Необходимо завершить все процессы sckit и удалить каталоги состояния в скрытых папках домашней директории. Все учётные данные, доступные из домашнего каталога и переменных окружения, нужно сменить. В репозиториях, куда пользователь может отправлять изменения, стоит проверить появление неожиданных файлов рабочих процессов и каталогов .sckit.
Для владельцев проектов с автоматической публикацией из системы непрерывной интеграции важен вывод: любой скрипт, выполняющийся до шага публикации, может влиять на последующие шаги. Доверенная публикация без долгоживущих токенов снижает риск. Защищённые теги и обязательная проверка релизов человеком могли бы заблокировать такие запуски. Отсутствие подписанных метаданных о происхождении артефактов не позволило системе контроля заметить подмену на раннем этапе.
Индикаторы компрометации
Domain
- 0b48fafd6fbe.skyleen.fr
- 266297c6df27.skyleen.fr
- 73376a079d87.skyleen.fr
- 8a8acaf167b3.skyleen.fr
- c747d139e7e9.skyleen.fr
- d4f77a3a8cb0.skyleen.fr
- skyleen.fr
URL
- 10729e014d0e.skyleen.fr/eb57efaa7365698fc1e4decc/initial-ci-v2
SHA256
- 16de381deb978744535b10f68fe15165251374b86eef18ffc2c47f61ea673047
- 381ac6dc1715d9298fe81b2a53a11f7b7d78e361ee3a6619ad54f8c4b062cc18
- 39ee644406829a4b630b31759c20478bc22d576d6a59b253ed86f72c360aa5ef
- 5405e330507602e803f7dd6f2a9d4555aec8558ab222b51413594a962da6888a
- 56cd3416d2ec2aa7e7cec2a06010cf0b58eb09c0a5486809df52afeaca8f14be
- 65faf8ccbcf5b34eb4f72c71bf82815fa9c1e2f947b9c898491540e866132c31
- 6caf89b059e9b6c82bb4ac4727816d516753c4d26833434dea0ecda44a346eb3
- 8f647f17a1934679c4095e21bee2b9bd83e28476603758bc91408a0c8443e3b4
- 92b46d18fc553c494eda714f204459edb74c205bf53b18a9092bcf02c7a6c5be
- 995a208944176c437a023f4a5c11baad2eb77a91847893c82e5866eaabedb810
- 9de0d5b0ca184f71f630be5781d134998883a02d5d7bc65aeb9559d8f9efb364
- a6870826cd7c7ec8d32af227252efcdcdca03ac956d4702cdc2157ca82641673
- c1b0998347b489582bae7b7f4930f9831d9ef4b6bc150cfd488ee1a43272dd36
- d6b3e77c36ee8017c9bf30d1da7218ec0ea843768d313eb8e35845c8a9b38a26
- e077c387b223811064b7bbc5a55a0182fca9bf50894f949ff284d4be87d44b26
- f7c4014e284f3d56c452b8b222a287c54f73dc4a40a7e022e765ac8376362947
- f8ccdd1da7dff1aef16377a2842bc7acf7c516e32122dd6e42dc4a4e57653fce