В современном мире разработки программного обеспечения открытый исходный код и пакетные менеджеры играют ключевую роль. NPM (Node Package Manager) является одним из самых популярных маркетплейсов для библиотек и модулей, используемых в экосистеме Node.js. И, к сожалению, именно популярность платформы делает её привлекательной целью для злоумышленников, которые пытаются распространить вредоносные программы через поддельные или скомпрометированные пакеты. Недавно была выявлена опасная вредоносная NPM-библиотека под названием express-cookie-parser, которая маскируется под широко используемый пакет Express cookie-parser.
Ее исследовали специалисты сервиса SafeDep Cloud, предоставляющего облачное сканирование пакетов на наличие угроз, и результаты анализа представляют значительный интерес для всех, кто использует NPM в своих проектах. Заражение через подобные поддельные библиотеки несет серьезные риски безопасности, включая компрометацию серверов и утечку данных, поэтому важно понять суть угрозы и ее особенности. Express cookie-parser – это пакет, реализующий функционал парсинга cookie в приложениях Express.js. Он играет важную роль в аутентификации и управлении сессиями.
Однако зловредная версия express-cookie-parser 1.4.12 была создана с целью внедрить скрытый вредоносный код, который активируется при использовании официального API, что усложняет обнаружение угрозы и защита от нее становится критически важной задачей. Особенностью этого вредоносного пакета является отсутствие традиционных триггеров заражения, таких как скрипты preinstall или postinstall, которые часто используются для запуска вредоносного кода при установке. Вместо этого вредоносный функционал активируется, когда приложение вызывает методы зараженной библиотеки.
Это позволяет злоумышленникам обходить автоматические меры защиты и делает вредоносный код менее заметным в исходном коде проекта до момента его выполнения. В центре атаки находится минифицированный и обфусцированный файл cookie-loader.min.js, включенный в пакет. Этот модуль отвечает за реализацию вредоносного функционала.
После активации он выступает в роли первичного этапа или dropper’а, который скачивает и запускает вторую стадию вредоносного скрипта startup.js с командного и управляющего сервера (C2). Примечательно, что для генерации адреса C2 используется особый алгоритм – генерирующий доменные имена (DGA), основанный на XOR-операциях с фиксированным ключом и SHA256-хэшем специального seed-файла, загружаемого с открытого GitHub репозитория. Это повышает устойчивость вредоносного домена к обнаружению и блокировке. Seed-файл, в данном случае конфигурационный .
env.example, содержит простейшие переменные окружения, вроде JWT_SECRET и данных для подключения к базе, которые становятся частью механизма генерации адреса командного сервера по специфичной формуле. Сам DGA преобразует результат XOR операций в формат IP-адреса, что приводит к динамическому определению сервера C2 с адресом, например, 206.214.129.
67. После установки и первоначального запуска вредоносный код самостоятельно удаляет loader-файл и удаляет ссылку на него из index.js, чтобы минимизировать следы активности и усложнить обратный анализ. Анализ деобфусцированного cookie-loader.min.
js показал, что зараженный пакет пытается определить платформу операционной системы (Windows, Linux или macOS) для корректного поиска и запуска `node`-процесса. Далее он вычисляет путь к пользовательским данным браузера Google Chrome, где создаёт каталог Scripts и сохраняет туда загружаемый с C2 скрипт startup.js. После установки всех компонентов вредоносный скрипт запускается в отдельном процессе, который отделяется от родительского, что затрудняет его немедленное обнаружение и завершение. Вредоносное ПО не только осуществляет загрузку и запуск командного сценария, но и старается сохранить своё присутствие и обеспечить постоянное выполнение на устройстве, используя для этого пользовательские директории популярных браузеров.
Такой подход может осложнить очистку заражённой системы. Что делать тем, кто уже мог подвергнуться воздействию этого злонамеренного пакета? Первое и самое важное – немедленно удалить express-cookie-parser из зависимостей через команду npm remove express-cookie-parser и проверить package.json на наличие записей об этом пакете. В случае обнаружения заражения на критичных или продуктивных системах рекомендуется считать компометацию системы серьезной, сразу запустить процедуры инцидент-менеджмента, включая аудит доступа и возможное восстановление из резервных копий. Профилактика остается ключевым элементом безопасности в работе с публичными пакетами.
Использование сервисов как SafeDep Cloud, которые интегрируются с CI/CD процессами и автоматически сканируют внешние зависимости, позволит оперативно выявлять и блокировать подозрительные библиотеки. Такой подход помогает создавать прозрачный и контролируемый цикл внедрения opensource-кода. Этот случай с express-cookie-parser ясно демонстрирует, насколько изощрённые методы применяют злоумышленники для внедрения вредоносных компонентов в популярные инструменты разработчиков. Традиционные проверки package.json и установка пакетов из доверенных источников уже не гарантия безопасности.
Злоумышленники копируют README и метаданные оригинальных пакетов, маскируются под них, что затрудняет моментальную идентификацию угрозы. Важно поддерживать культуру безопасности в командах, использовать инструменты автоматической проверки и активно следить за обновлениями компонентов. Безопасность цепочки поставок программного обеспечения – это критически важное направление в современной разработке, и именно случаи с подобными вредоносными библиотеками наглядно демонстрируют, как важно сочетать технические решения и организационные меры для защиты от атак. В итоге, появление express-cookie-parser – это еще один тревожный сигнал для разработчиков и команд безопасности. Регулярный мониторинг зависимостей, интеграция анализа открытого кода и активное применение инструментов для защиты от вредоносных компонентов должны стать стандартом индустрии, чтобы минимизировать риски заражения и утечки данных.
Зрелость процессов безопасности при работе с Node.js и NPM-пакетами особенно важна для крупных проектов и корпоративных клиентов, поскольку последствия возможной компрометации могут быть катастрофическими. Внимательное отношение к выбору зависимостей, автоматизация безопасности, просвещение разработчиков и сотрудничество с экспертами по кибербезопасности – ключевые факторы успешной защиты от подобных угроз.