Исследователи из FortiGuard Labs обнаружили ранее неизвестный веб-шелл, получивший название EncystPHP. Данное вредоносное ПО (malware) обладает продвинутыми возможностями, включая выполнение удаленных команд, механизмы обеспечения устойчивости (persistence) и развертывание самого веб-шелла. Атаки начались в начале декабря прошлого года и распространялись через эксплуатацию уязвимости CVE-2025-64328 в системе FreePBX, популярном решении для IP-АТС с открытым исходным кодом.
Описание
Активность связывают с хакерской группировкой INJ3CTOR3, впервые идентифицированной в 2020 году. Ранее эта группа использовала уязвимость CVE-2019-19006, а в 2022 году переключилась на систему Elastix через CVE-2021-45461. В текущей кампании атаки начинаются с эксплуатации уязвимости в FreePBX, после чего в целевые среды развертывается PHP-веб-шелл. По оценкам экспертов, эта кампания отражает недавние модели атак, характерные для INJ3CTOR3.
Цель атаки и вектор внедрения
Используемая уязвимость CVE-202564328 представляет собой уязвимость внедрения команд (command-injection) в административном интерфейсе модуля Endpoint Manager системы FreePBX. Для эксплуатации требуется наличие аутентификации. Атака была инициирована с IP-адреса в Бразилии и нацелена на инфраструктуру, управляемую технологической компанией из Индии, специализирующейся на облачных решениях, сервисах связи и IT-инфраструктуре. Злоумышленники загрузили дроппер EncystPHP с IP-адреса 45[.]234[.]176[.]202, связанного с доменом crm[.]razatelefonia[.]pro, который, судя по всему, принадлежит VoIP-сервису.
Анализ вредоносной программы
Первоначальный дроппер с именем файла «c» выполняет комплекс агрессивных действий для закрепления в системе. Сначала он меняет права доступа ключевых файлов FreePBX на 000, делая их недоступными. Затем скрипт собирает конфигурационную информацию из базы данных, удаляет задания cron и множество учетных записей пользователей FreePBX, включая «ampuser» и «freepbx_svc». Кроме того, EncystPHP активно ищет и удаляет другие PHP-файлы, содержащие признаки веб-шеллов или определенные строки, такие как «Badr» или «pastebin», что может указывать на попытку устранения конкурирующего вредоносного ПО.
Для обеспечения устойчивого контроля злоумышленник создает пользователя root-уровня с именем «newfpbx», сбрасывает пароли других учетных записей на единое значение и повышает их привилегии. Также внедряется SSH-ключ для доступа, а конфигурация системы изменяется для гарантированного открытия SSH-порта 22. В процессе атаки загружается дополнительный дроппер k.php. На финальном этапе дроппер «c» манипулирует лог-файлами, удаляет модуль endpoint manager и восстанавливает права доступа на файлы FreePBX, чтобы избежать сбоев в работе сервиса и замести следы.
Функционал веб-шелла
Полезная нагрузка (payload) доставляется в формате Base64 и после декодирования записывается на диск, маскируясь под легитимный файл FreePBX ajax.php. Аутентификация в веб-шелле реализована через простой механизм: введенный пароль хешируется с помощью MD5 и сравнивается с жестко заданным значением в коде. После успешного входа открывается интерфейс с названием «Ask Master», предоставляющий злоумышленнику набор предустановленных команд. Эти команды позволяют исследовать файловую систему, проверять процессы, запрашивать активные каналы Asterisk, а также извлекать конфигурационные файлы FreePBX и Elastix. Работая в контексте административных систем Elastix и FreePBX, шелл получает повышенные привилегии, что позволяет выполнять произвольные команды и даже инициировать исходящие звонки через PBX.
Механизмы распространения и устойчивости
Вторичный дроппер k.php развертывает веб-шелл в множестве каталогов веб-документов, создавая такие пути, как /var/www/html/digium_phones/ajax.php или /var/www/html/admin/assets/config.php. Это обеспечивает избыточность доступа: если один экземпляр будет удален, останутся другие. Для маскировки под легитимные файлы подделываются временные метки. Кроме того, настраиваются правила в файле .htaccess для перенаправления запросов к скрытому файлу конфигурации.
Механизмы обеспечения устойчивости у EncystPHP многослойны. Устанавливаются задания cron, которые каждую минуту или каждые три минуты загружают дропперы с удаленного сервера. Используется скрипт test.sh, который декодирует и выполняет дополнительный PHP-файл license.php, отвечающий за поддержание доступа. В коде также присутствуют команды, имитирующие удаление следов, например, многократный вывод команды rm без ее выполнения, что может ввести в заблуждение при поверхностном анализе. Эти действия направлены на долгосрочное скрытое присутствие в системе.
Выводы и рекомендации
Данный инцидент наглядно демонстрирует, как уязвимость CVE-2025-64328 может быть использована для развертывания скрытных и устойчивых веб-шеллов в средах FreePBX. Это подтверждает, что непропатченные PBX-системы остаются высокоприоритетными целями для злоумышленников. Хотя сами техники атаки не являются абсолютно новыми, наблюдаемое поведение отражает активную и продолжающуюся угрозу, которая эволюционирует в соответствии с текущим контекстом.
Способность EncystPHP маскироваться под легитимные компоненты FreePBX и Elastix повышает риск его незаметного проникновения. Это оставляет зараженные системы уязвимыми для долгосрочного контроля, несанкционированного административного доступа и злоупотребления телекоммуникационными ресурсами. Организациям, использующим подобные системы, следует рассматривать успешную эксплуатацию данной уязвимости как полный компромисс инфраструктуры. Критически важно немедленно применять обновления безопасности, усилить мониторинг и ужесточить конфигурации для минимизации потенциального ущерба.
Индикаторы компрометации
IPv4
- 187.108.1.130
- 45.234.176.202
URLs
- http://45.234.176.202/new/c
- http://45.234.176.202/new/k.php
SHA256
- 285fac34a5ffdac7cb047d412862e1ca5e091e70c0ac0383b71159fdd0d20bb2
- 29d74963f99563e711e5db39261df759f76da6893f3ca71a4704b9ee2b26b8c7
- 71d94479d58c32d5618ca1e2329d8fa62f930e0612eb108ba3298441c6ba0302
- 7e3a47e3c6b82eb02f6f1e4be6b8de4762194868a8de8fc9103302af7915c574
- fc514c45fa8e3a49f003eae4e0c8b6a523409b8341503b529c85ffe396bb74f2