Седьмого мая 2026 года в публичном реестре npm появился пакет martinez-polygon-clipping-tony. Он представлял собой точную копию легитимной библиотеки для операций над многоугольниками, но содержал скрытый вредоносный код. В результате установки на компьютер жертвы попадал троян, управляемый через Telegram. Эта история касается тысяч разработчиков, которые используют менеджер пакетов npm в своих проектах. Один неосторожный запуск установки мог привести к полной компрометации рабочей станции.
Описание
Пакет был опубликован от имени учётной записи christiano_129. Злоумышленник подделал адрес электронной почты автора, указав info@w8r.name, который принадлежит настоящему разработчику библиотеки. Библиотека martinez-polygon-clipping - это популярный инструмент для геометрических вычислений, у неё есть только одна стабильная версия 0.8.1. Вредоносный форк вышел в версиях от 0.8.1 до 0.9.2. При установке пакета срабатывал postinstall-скрипт, который скачивал исполняемый файл размером около 17 мегабайт с управляющего сервера по адресу 172.86.73[.]132. Этот файл представлял собой троян удалённого управления, упакованный с помощью PyInstaller.
Эволюция вредоносного пакета заслуживает отдельного внимания. Первая версия 0.8.1 была чистой - она просто копировала легитимный код и регистрировалась в реестре. В версии 0.8.3 появился скрипт, который лишь создавал файл журнала. Но уже через несколько часов вышли версии 0.8.7, 0.8.9, 0.9.0 и финальная 0.9.2. Разработчик на ходу исправлял ошибки: сначала не проверял операционную систему, потом ошибочно запускал калькулятор вместо скачанного файла, затем исправил путь загрузки и устранил состояние гонки между скачиванием и запуском. Такая поспешность говорит о низкой квалификации атакующего, однако конечный троян оказался вполне работоспособным.
Специалисты по информационной безопасности обнаружили в реестре npm и второй, вероятно тестовый, пакет martinez-polygon-clipping-simul-dalton, опубликованный днём ранее под той же учётной записью. Он содержал аналогичный механизм, но, скорее всего, использовался для отработки кода.
Скачанный файл windows.exe - это 64-разрядное приложение для Windows, написанное на Python 3.12 и упакованное PyInstaller. После распаковки внутри обнаружился бот, который общается с оператором через Telegram. Вредоносная программа включает несколько модулей: один отвечает за запуск и мьютекс для уникальности, другой - за обфускацию строк, третий - за выполнение команд и снятие скриншотов, четвёртый - за взаимодействие с Telegram.
Троян использует схему защиты строк с помощью "капсул": чувствительные данные, такие как токен бота, идентификатор чата оператора и команды, хранятся в зашифрованном виде внутри кода. При декодировании получается токен бота - 8623507214:AAHR9XdON0uL9KI8Pk7K_Bz9Wv5YB7g_shs, а также идентификатор оператора - 8611602014.
Управление построено на основе маршрутизации. Каждая заражённая машина получает уникальный 16-символьный идентификатор, вычисляемый на основе имени компьютера, MAC-адреса и значения реестра MachineGuid. Оператор отправляет команды в Telegram-чат, предваряя их этим идентификатором. Сообщения, которые не являются специальными командами, выполняются как команды оболочки Windows через cmd.exe. Вывод возвращается обратно в чат. Программа также умеет делать скриншоты всех экранов с учётом масштабирования, поддерживает непрерывный и пакетный режимы съёмки. Полученные изображения отправляются в Telegram.
Кроме того, троян позволяет загружать файлы на компьютер жертвы и скачивать их с него. Злоумышленник может выполнить произвольный код на Python внутри процесса бота. И наконец, предусмотрена функция самоуничтожения: команда uninstall запускает пакетный файл, который удаляет исполняемый файл и сам сценарий, а затем завершает процесс.
При старте бот делает паузу в четыре секунды, после чего пытается удалить файл %TEMP%\youtube_chm_unpack\dismcore.dll. Это указывает на то, что атакующий, вероятно, использовал параллельную кампанию по внедрению вредоносной DLL через поддельный инструмент, связанный с YouTube. Такое удаление следов - элемент анти-форензики.
Последствия заражения для разработчика или компании могут быть серьёзными. Злоумышленник получает полный контроль над Windows-машиной: может выполнять команды, перехватывать скриншоты, загружать и выгружать файлы, а также запускать собственный код. Это открывает путь к хищению исходных кодов, баз данных, ключей доступа и другой конфиденциальной информации. Более того, троян не оставляет явных следов в системе, что затрудняет обнаружение.
Данный инцидент напоминает, насколько уязвима цепочка поставок программного обеспечения. Любой разработчик, использующий сторонние пакеты из публичных реестров, должен внимательно проверять название пакета, его историю версий и подлинность автора. Даже один неверный символ в имени может привести к установке вредоносного форка. Командам безопасности стоит настроить автоматический мониторинг npm-пакетов, используемых в проектах, и контролировать появление подозрительных зависимостей.
В данном случае злоумышленник действовал спешно, но продуманно: он скопировал описание, подделал адрес электронной почты реального разработчика и опубликовал несколько версий в течение трёх часов. Такая тактика может обмануть даже опытных модераторов. Поэтому важно не только проверять название пакета, но и сверять его с официальными репозиториями. Если вы или ваша команда используете пакет martinez-polygon-clipping или его разновидности, немедленно проверьте версии и при обнаружении вредоносного форка удалите его и проведите сканирование системы.
Индикаторы компрометации
Package
- martinez-polygon-clipping-tony v0.8.1 - v0.9.2
npm maintainer
- christiano_129 (daltonchristiano060@gmail.com)
Related package
- martinez-polygon-clipping-simul-dalton v0.8.2
Spoofed author email
info@w8r.name
C2 IP (stage-1 download)
- 172.86.73.132
Stage-2 download URL
- http://172.86.73.132/windows.exe
Stage-2 SHA-256
- 86d17961e9662c53e1fb61701388b7c741bf79c093061df968a3e53c829dcb16
Stage-2 type
- PE32+ (x86-64), PyInstaller 2.1+, Python 3.12
Stage-2 compile time
- 2026-05-06 19:40:00 UTC
Telegram bot token
- 8623507214:AAHR9XdON0uL9KI8Pk7K_Bz9Wv5YB7g_shs
Telegram operator chat ID
- 8611602014
Drop path (Windows)
- C:\Users\Public\windows.exe
Mutex name pattern
- Global\lab_obf_bot_<sha256_prefix>
Cleanup target
- %TEMP%\youtube_chm_unpack\dismcore.dll
Self-destruct artifact
delete_self.bat в каталоге исполняемого файла
GitHub repo (attacker)
- daltonchristiano060-gif/dalton-martinez