Эксперты Elastic Security Labs выявили кампанию Contagious Interview с использованием стеганографии в SVG-файлах

information security

Исследователи Elastic Security Labs обнаружили новую активность в рамках кампании Contagious Interview. Злоумышленники, связанные с КНДР, разместили в Slack-сообществе компании поддельные вакансии и предложили разработчикам выполнить тестовое задание. Любой разработчик, запустивший вредоносный проект, получал четырехуровневую полезную нагрузку, основанную на инструментарии OTTERCOOKIE. Этот инцидент подтверждает, что разработчики остаются приоритетной целью, так как компрометация одного специалиста может открыть доступ к цепочке поставок более крупных организаций.

Описание

Атака началась 26 мая 2026 года, когда пользователь под псевдонимом Maxwell опубликовал в канале #jobs сообщение о поиске опытного разработчика для обновления e-commerce платформы. После перехода в личные сообщения заинтересовавшимся предлагалось выполнить тестовое задание. Кандидатам отправляли архив с троянизированным репозиторием, содержащим полностью функциональный код. Один из таких проектов представлял собой шаблон интернет-магазина на Next.js, скопированный из открытого репозитория GoCart.

Вредоносный код был внедрен в виде небольших фрагментов с безобидными именами переменных. Основным способом сокрытия стала стеганография - данные разбивались на блоки в кодировке Base64 и прятались в HTML-комментариях внутри SVG-файлов с изображениями флагов стран. Эти файлы выглядели как обычные картинки, но каждый содержал закодированный фрагмент. JavaScript-файл serverValidation.js собирал блоки из всех флагов в алфавитном порядке и декодировал их с помощью собственной функции Check(), после чего исполнял через eval(). Вызов происходил при каждом запуске сервера, так как скрипт server/index.js вызывал функцию runServerValidation() после инициализации middleware.

Как показал анализ специалистов, вредоносное ПО использует обфускатор obfuscator.io, который затрудняет статический анализ. Полезная нагрузка состояла из четырех модулей: сборщик учетных данных браузера и криптовалютных кошельков, сборщик файлов, удаленный троян (RAT) на основе Socket.IO и похититель содержимого буфера обмена. Модуль кражи учетных данных маскировался под процесс npm-cache, чтобы не вызывать подозрений в диспетчере задач. Он проверял операционную систему жертвы (Windows, macOS, Linux) и извлекал данные из браузеров Chrome, Edge, Brave, Opera и LT Browser, а также из расширений криптовалютных кошельков.

Для Windows, macOS и Linux сборщик перечислял установленные браузеры по типовым путям. Из каждого найденного профиля извлекались файлы Login Data (сохраненные пароли), Web Data (данные автозаполнения) и базы Local Extension Settings для кошельков. Эти данные отправлялись на командно-контрольный сервер ldb.rightwidth[.]dev через HTTP POST-запросы с User Agent axios/1.18.1. Отдельно для криптокошельков использовался эндпоинт /cldbs. В образце обнаружен приоритетный механизм: первые восемь типов кошельков в жестко заданном списке отправлялись с подтверждением получения и повторными попытками, остальные - без подтверждения.

Модуль кражи файлов выполнял рекурсивный обход дисков и домашних каталогов в поисках файлов с определенными расширениями: .env, .doc, .pdf, .json, .ts, .js, .pem, .ssh, .bash_history, .zsh_history и других. Особое внимание уделялось путям .aws, .azure, .config, .ssh. На Windows дополнительно использовался WMI-запрос wmic logicaldisk get name для получения списка подключенных дисков. Найденные файлы отправлялись на сервер upload.rightwidth[.]dev без дополнительного сжатия или шифрования. Из списка исключались десятки типов файлов и папок, включая node_modules, .git, .vscode, .cursor, а также многие бинарные форматы - это подтверждает, что злоумышленники хорошо знакомы с экосистемой разработки и стремятся минимизировать объем собираемых данных.

Третий модуль - RAT на базе Socket.IO, который устанавливал постоянный канал связи с сервером controller.rightwidth[.]dev. Вредонос проверял, не запущен ли уже экземпляр, записывая свой PID в файл блокировки. Для обнаружения виртуальных машин он использовал системные запросы: на Windows - wmic computersystem, на macOS - system_profiler SPHardwareDataType, на Linux - /proc/cpuinfo. При обнаружении в ответ добавлялся тег (VM), но работа не прекращалась - это позволяло операторам фильтровать песочницы. Регистрационный сигнал отправлялся на эндпоинт /api/service/process/<uid>, а логирование ошибок - на /api/service/makelog. Оператор мог отправлять команды оболочки, которые выполнялись через child_process.exec(), а вывод возвращался в реальном времени.

Четвертый модуль сочетал загрузчик дополнительных программ для Windows и похититель буфера обмена для Windows и macOS. Загрузчик скачивал три бинарных файла с сервера file.rightwidth[.]dev, замаскированных под текстовые файлы, и переименовывал их в hostService.exe, printSvc.exe, dhcpSvc.exe. Похититель буфера обмена опрашивал системный буфер каждые 500 мс: на macOS через pbpaste, на Windows через PowerShell Get-Clipboard. Изменения отправлялись на сервер через эндпоинт /api/service/makelog.

Исследователи отмечают, что обнаруженная активность технически и поведенчески совпадает с ранее описанной вредоносной программой OTTERCOOKIE, впервые задокументированной NTT Security в декабре 2024 года. В частности, совпадают строки, структура скриптов и используемые API-эндпоинты. Кроме того, образцы демонстрируют конвергенцию функций: ранее различавшиеся семейства BEAVERTAIL и OTTERCOOKIE слились в единый пакет, включающий RAT, похититель буфера обмена и сборщик учетных данных без промежуточной стадии на Python.

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

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

IPv4

  • 188.40.64.61
  • 195.26.248.212

Domain

  • controller.rightwidth.dev
  • file.rightwidth.dev
  • ldb.rightwidth.dev
  • rightwidth.dev
  • upload.rightwidth.dev

SHA256

  • 3e6360f83a95540aa2176d279ca4694513afb1e5116a7ffe591c6b5bcf3b9c3c
  • 4e7639045b4a64de60bfb6312951a5c3dffbd3fb04b84837663242ed27f09864
  • 54bf36910d81ab516037cb3d69d7c85190f90aa0da9e58617799c1fc738dc5a9
  • 8e571d58794b9b44ae53c2c67bedef72c500e8adbb80aab7a5c263adcba55b1e
  • 96357529d17c4690826d5d4c74deac51743a5388733b3f04004d898f0635ef20
  • 9df01d242ef46adfedf8c35cb7cc67b1d27d7dc4a1ce74ab32e984090d579886
  • c5aed4c063d4970a03250778da8041da9e0c83d8f22d2f1994da0ad72567ebd9
  • cc97517f80f567977300450de11e9a0be53f52657525a20b1091c99fe9e45730
  • fb94b2caee2c40635448a98ba0118421e19a400e74ccff73315f8fa42351f53f

Комментарии: 0