Новые пакеты PyPI маскируются под библиотеку проверки орфографии для доставки трояна удаленного доступа

remote access Trojan

20 и 21 января 2026 года системы обнаружения вредоносного программного обеспечения зафиксировали появление двух новых подозрительных пакетов в индексе Python Package Index (PyPI). Пакеты под названиями "spellcheckerpy" и "spellcheckpy" выдавали себя за обновленные версии популярной библиотеки "pyspellchecker" и даже содержали ссылки на её официальный репозиторий на GitHub. Однако они были созданы злоумышленниками.

Описание

Внутри этих пакетов исследователи обнаружили полнофункционального трояна удаленного доступа (RAT), замаскированного под данные словаря баскского языка. Атака демонстрирует растущую изощренность угроз, нацеленных на цепочки поставок ПО с использованием легитимных репозиториев кода. Вредоносная нагрузка была скрыта в файле "resources/eu.json.gz", который в оригинальной библиотеке действительно содержит частотный словарь баскского языка.

Авторы вредоноса внедрили в этот файл строку в кодировке base64, содержащую загрузчик следующей стадии атаки. Извлечение этой строки происходило через функцию в файле "utils.py", которая внешне выглядела как штатная утилита для работы с ресурсами. При вызове с определенными параметрами функция извлекала не словарные данные, а закодированную полезную нагрузку по ключу "spellchecker".

Первые три версии пакетов ("spellcheckerpy" 1.0.0, 1.0.1 и "spellcheckpy" 1.1.0) содержали скрытую полезную нагрузку, но не имели механизма её активации. Фактически, вредоносный код извлекался и декодировался, но никогда не исполнялся, что позволяло пакетам потенциально избегать статического анализа. Ситуация изменилась с выходом версии "spellcheckpy" 1.2.0, в которой злоумышленники добавили обфусцированный триггер исполнения.

Триггер был размещен в методе "__init__" класса "WordFrequency". Для запуска кода использовалась конструкция, динамически восстанавливающая строку "exec" из шестнадцатеричного представления, что затрудняет обнаружение сигнатурами. Таким образом, при импорте модуля "SpellChecker" и создании объекта происходило выполнение вредоносного кода.

Полезная нагрузка первой стадии представляет собой загрузчик. Его задача - получить основной модуль трояна удаленного доступа с контролируемого злоумышленниками сервера по адресу "https://updatenet[.]work/settings/history.php". Загруженный код затем исполняется в отдельном, изолированном процессе с использованием "subprocess.Popen". Критически важно, что параметр "start_new_session=True" позволяет этому процессу продолжать работу в фоновом режиме даже после завершения основной программы жертвы, обеспечивая устойчивость. При этом файлы на диск не записываются.

Основной троянец (stage-2 RAT) обладает широким набором функций для удаленного контроля. При запуске он проводит сбор информации о системе, включая данные об операционной системе и имени компьютера. Для связи с командным сервером используется собственный бинарный протокол с двойным XOR-шифрованием. Внешний слой шифруется с помощью 16-байтного ключа, а внутренние команды - с использованием ключа 123. Хотя этот метод не является криптографически стойким, он эффективно обходит простые сигнатурные методы обнаружения.

Архитектура управления построена по принципу маяка (beacon). Каждые пять секунд троянец отправляет на сервер "https://updatenet[.]work/update1.php" свой идентификатор в рамках кампании ("FD429DEABE") и ожидает команды. Для обхода проверок сертификатов SSL в коде отключается верификация. Полученные команды, зашифрованные по схеме XOR, обрабатываются по идентификатору.

Особую опасность представляет команда с идентификатором 1001, которая приводит к выполнению произвольного кода Python на зараженной машине с помощью функции "exec()". Это предоставляет злоумышленникам практически неограниченный контроль над системой.

Инфраструктура командного сервера (C2) связана с доменом "updatenet[.]work", зарегистрированным в конце октября 2025 года. Этот домен размещен на IP-адресе, принадлежащем компании RouterHosting LLC, которая работает под брендом Cloudzy. Данный хостинг-провайдер неоднократно фигурировал в отчетах аналитиков кибербезопасности как поставщик инфраструктуры для командных серверов.

В августе 2023 года компания Halcyon опубликовала отчет под названием "Cloudzy with a Chance of Ransomware", согласно которому от 40% до 60% трафика через эту инфраструктуру носит вредоносный характер. Инфраструктура Cloudzy связывалась с деятельностью продвинутых постоянных угроз (APT) из Китая, Ирана, Северной Кореи, России, а также с операторами программ-вымогателей (ransomware).

Данная атака не является изолированным случаем. В ноябре 2025 года исследовательская группа HelixGuard задокументировала схожую кампанию с использованием пакета "spellcheckers". В той атаке использовалась идентичная структура трояна: XOR-шифрование, команда 1001 для выполнения кода, но другая инфраструктура C2 ("dothebest[.]store"). Кампания ноября 2025 года была связана с фишинговыми атаками под видом рекрутеров, нацеленными на владельцев криптовалют.

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

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

IPv4

  • 172.86.73.139

Domains

  • updatenet.work

URLs

  • https://updatenet.work/settings/history.php
  • https://updatenet.work/update1.php
  • resources/eu.json.gz

Campaign identifiers

  • Campaign ID: FD429DEABE
  • XOR Key: 03 06 02 01 06 00 04 07 00 01 09 06 08 01 02 05
  • Secondary XOR: 0x7B (123)
Комментарии: 0