Угроза для экосистемы Node.js: северокорейский троян PylangGhost впервые обнаружен в репозитории npm

information security

Безопасность цепочки поставок программного обеспечения (Software Supply Chain) вновь оказалась под ударом. В конце февраля - начале марта 2026 года в крупнейший реестр пакетов для Node.js, npm, проникла новая угроза. Злоумышленники, ассоциируемые с северокорейской хакерской группировкой, разместили пакеты, скрытно распространяющие троян PylangGhost. Этот инцидент стал первым задокументированным случаем использования данного вредоносного ПО в экосистеме npm и демонстрирует эволюцию тактик атакующих, которые всё чаще нацеливаются на инфраструктуру разработчиков для массового заражения.

Описание

Инцидент был выявлен исследователем, специализирующимся на отслеживании активности КНДР в открытых репозиториях. Его сканер обнаружил два вредоносных пакета, опубликованных под учётной записью "jaime9008". Первым фигурировал "@jaime9008/math-service", а затем, уже в марте, пакет "react-refresh-update", который последовательно обновлялся несколько раз. Стоит отметить, что начальные версии обоих пакетов (v1.0.0) не содержали вредоносного кода, что, вероятно, было попыткой обмануть системы базового анализа репутации. Однако последующие обновления добавляли обфусцированный загрузчик троянца.

PylangGhost - это троян удалённого доступа (RAT, Remote Access Trojan), впервые публично описанный аналитиками Cisco Talos в июне 2025 года и атрибутированный группе FAMOUS CHOLLIMA, которая связана с интересами северокорейского государства. Основная функция такого ПО - обеспечить злоумышленнику полный контроль над заражённой системой: сбор данных, выполнение произвольных команд, скрытая установка дополнительных вредоносных программ. Появление этого инструмента в npm знаменует расширение векторов атаки группировки, ранее фокусировавшейся на других методах доставки.

Технический анализ показал, что загрузчик использует многослойную обфускацию. Первоначальный этап представляет собой простую схему «декодировать -> расшифровать -> выполнить» с использованием XOR-ключа. Интересно, что сам ключ ("fdfdfdfdf3rykyjjgfkwi") выглядит как бессмысленный набор символов, что, по мнению исследователя, может быть результатом «нажатия клавиш на клавиатуре с ANSI-раскладкой». После расшифровки становится виден более сложный код, в котором имена функций переименованы, а переменные перенаправляются через массивы для затруднения анализа.

Расшифрованная полезная нагрузка демонстрирует высокую адаптивность. Код определяет операционную систему жертвы (Windows, Linux или macOS) и загружает соответствующий вариант троянца с управляющего сервера (C2, Command and Control). Для Windows используется хитрая тактика загрузки файла частями (чанками), что может помогать обходить примитивные системы мониторинга сетевой активности, основанные на размерах передаваемых данных. После загрузки ZIP-архив извлекается, и для исполнения используется скрипт VBS, запускаемый в скрытом режиме. Для Unix-подобных систем (Linux/macOS) вредоносный скрипт загружается, получает права на выполнение и немедленно запускается.

Важным аспектом является конфигурация троянца. Анализ Windows-варианта, загруженного с домена "malicanbur[.]pro", показал, что в коде жёстко прописан IP-адрес управляющего сервера: "173.211.46[.]22:8080". Кроме того, как сообщает исследователь, в конфигурационном файле обнаруживаются идентификаторы расширений браузера Chrome, данные из которых троянец, по-видимому, предназначен перехватывать. Это указывает на целевой сбор конфиденциальной информации пользователей, возможно, включая авторизационные cookies, историю или данные форм.

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

Данный инцидент служит жёстким напоминанием для всех участников экосистемы разработки на JavaScript и Node.js. Необходимо ужесточить практики безопасности цепочки поставок. Командам следует внедрять автоматизированные инструменты сканирования зависимостей (SCA, Software Composition Analysis) на предмет известных уязвимостей и вредоносных пакетов, а также регулярно проводить аудит "package.json" на предмет подозрительных или малоизвестных зависимостей. Разработчикам стоит проявлять особую осторожность при использовании пакетов от непроверенных авторов, особенно тех, которые не имеют длительной истории обновлений или значительного числа загрузок. Внедрение политик цифровой подписи пакетов и использование доверенных реестров также могут существенно снизить риски.

Обнаружение PylangGhost в npm - это не изолированное событие, а часть тревожной тенденции, когда государственные и криминальные хакерские группировки активно эксплуатируют уязвимости в процессах разработки ПО. Бдительность, многоуровневая защита и культура безопасности должны стать неотъемлемой частью жизненного цикла любого современного приложения.

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

IPv4 Port Combinations

  • 173.211.46.22:8080

Domains

  • malicanbur.pro

MD5

  • c7a051f37b01393a3a3dacbb2d4da07f

SHA1

  • f9c1f9d70e1a14e0bff847b85b86b0bee1a8ee75

SHA256

  • 0be2375362227f846c56c4de2db4d3113e197f0c605c297a7e0e0c154e94464e

Package

  • @jaime9008/math-service v1.0.0
  • @jaime9008/math-service v1.0.1
  • @jaime9008/math-service v1.0.2
  • react-refresh-update v1.0.0
  • react-refresh-update v1.0.1
  • react-refresh-update v1.0.2
  • react-refresh-update v1.0.3
  • react-refresh-update v1.0.4
Комментарии: 0