Отчёт по безопасности: gLark.Ru
Данный документ содержит консолидированное техническое описание критических уязвимостей, векторов компрометации и артефактов системы gLark.Ru. Текущий статус системы: КРИТИЧЕСКИЙ (Полная компрометация уровня веб-сервера и системных сервисов).
Параметры окружения: CentOS 7, Apache 2.4.6 (mod_fcgid) + nginx, PHP 7.4.33 (php-fpm :9000), MariaDB, ISPmanager 5 (mgr5, :1500), Docker (Ollama, MCP-сервисы :8005/:8006). Пользователь веб-окружения: glarkru (uid 529).
Скачивание дампов и артефактов
Ниже представлены архивы данных и дампы, зафиксированные в ходе анализа безопасности платформы.
Полный локальный архив (Все данные)
Полный сводный архив, содержащий исходы ядра, конфигурации, базы данных, сервисы и артефакты.
Скачать glark_dump_all.zipДамп скриптов gLark.ru
Дамп публичной части платформы, статики и служебных скриптов.
Скачать glarkru_scripts_full.zipПолный дамп gLark.ru
Исходный код ядра, скриптов платформы и панели управления.
Скачать glarkru_site_dump.zipДамп БД gLark (Полный)
Полный дамп всех таблиц базы данных glarkru, включая служебные записи.
Скачать db_tables_full.sqlДамп БД gLark (Подчищенный)
Обезличенный дамп структуры базы данных, подготовленный для безопасного изучения разработчиками.
Скачать db_tables_cleaned.sqlPath Traversal в файловом менеджере Critical
Описание
Фильтрация путей в методе setCurrentPath() реализована через некорректную последовательность нерекурсивных строковых замен. Это позволяет легко обойти ограничения с помощью спецсимволов и конструкции ...././//, которая превращается в ../ и предоставляет доступ к чтению произвольных директорий на сервере.
Уязвимый фрагмент
$path = str_replace('', "", $path);
$path = str_replace('//', "/", $path);
$path = str_replace('../', "", $path);
$path = str_replace('./', "", $path);
$path = str_replace('\..', "", $path);
$path = str_replace('\.', "", $path);
Рекомендации по устранению и предотвращению
Как исправить: Отказаться от фильтрации через str_replace. Использовать стандартную функцию realpath() с обязательной валидацией вхождения итогового пути в разрешённую директорию через strpos().
Как не допускать: Не создавать собственные алгоритмы санитизации путей. Реализовать строгую привязку к базовому каталогу (sandbox root) для всех файловых операций.
Открытый сокет/порт FastCGI (php-fpm) Critical
Описание
Служба php-fpm принимает соединения без авторизации. Отсутствие ограничений позволяет передавать произвольные переменные окружения (включая SCRIPT_FILENAME и PHP_ADMIN_VALUE), что приводит к выполнению произвольного PHP-кода от имени пользователя пула.
Рекомендации по устранению и предотвращению
Как исправить: Перевести php-fpm с TCP-порта (9000) на UNIX-сокет с разграничением прав доступа на уровне ОС. В случае необходимости использования TCP — ограничить адрес прослушивания исключительно на 127.0.0.1 и закрыть порт сетевым экраном (iptables/nftables).
Как не допускать: Проводить регулярный аудит сетевых портов (netstat/ss) и контролировать доступность служебных сервисов из внешних сетей.
Произвольное архивирование и выгрузка (act=zip) Critical
Описание
Функция архивации создает ZIP-файл непосредственно внутри целевой папки. В сочетании с уязвимостью Path Traversal это позволяет упаковывать любые системные каталоги и скачивать их через веб-интерфейс.
Уязвимый фрагмент
$gen_name = $user->getData()->domain.'_'.date("Y-m-d_H_i_s").'.zip';
$zip = zip($FileIO->getRealPath(), $FileIO->getRealPath().'./'.$gen_name, $FileIO->getPath());
Рекомендации по устранению и предотвращению
Как исправить: Генерировать архивы исключительно в выделенном временном каталоге изолированной песочницы пользователя. Проверять каноничный путь каждого упаковываемого файла.
Как не допускать: Разделять логику генерации временных файлов и веб-доступные директории.
Утечка конфигурационных файлов и учётных данных Critical
Описание
Конфигурационные файлы с реквизитами подключения к БД и API-токенами хранятся в открытом виде внутри веб-директорий (webroot) и обладают правами на чтение любым пользователем системы (world-readable).
Пример конфигурации
[DataBase]
host="localhost"
login="glarkru"
pass="[REDACTED_PASSWORD]"
name="glarkru"
Рекомендации по устранению и предотвращению
Как исправить: Перенести все ini- и php-конфигурации за пределы публичного каталога www/ или data/www/. Установить права доступа 600 (права только для владельца). Перевыпустить все пароли БД и системные ключи.
Как не допускать: Использовать переменные окружения (env) для передачи чувствительных данных в приложение.
Path Traversal через заголовок Host Critical
Описание
Сервис поддоменов принимает значения из заголовка Host без валидации и использует их при формировании путей на диске, что приводит к выходу за пределы корневой директории сайта и распаковке загружаемых ZIP-архивов в произвольные места файловой системы.
Рекомендации по устранению и предотвращению
Как исправить: Валидировать заголовок Host по строгому белому списку (white-list) допустимых доменных имен. Исключить использование нефильтрованных HTTP-заголовков в файловых операциях.
Как не допускать: Всегда относиться к HTTP-заголовкам как к доверенно нераспределенным пользовательским данным.
Бэкдоры, скрытые скрипты и механизмы закрепления Critical
Описание
В системе обнаружено несколько сторонних точек входа и веб-шеллов:
glark.ru/vesta.php— Скрытый API-скрипт с жестко закодированными учетными данными, позволяющий выполнять административные действия.apps/js/cache.php— Веб-шелл, принимающий команды управления.apps/js/reinject.sh— Скрипт воссоздания точек входа, вызываемый через планировщик задач (cron).
Рекомендации по устранению и предотвращению
Как исправить: Удалить файлы vesta.php, cache.php, hook.php, ds.php, reinject.sh, isp_payload.js и request_log.txt. Очистить расписание задач crontab пользователя root и пользователя glarkru. Перепроверить правила .htaccess.
Как не допускать: Внедрить систему контроля целостности файлов (AIDE, Tripwire) и проводить регулярный аудит задач планировщика.
Жестко закодированный токен системного сервиса High
Описание
Служебный скрипт node_worker.php содержит секретный токен доступа NODE_TOKEN непосредственно в исходном коде, что позволяет выполнять запросы к внутренним сервисам (Ollama / MCP) при компрометации исходного кода.
Рекомендации по устранению и предотвращению
Как исправить: Вынести NODE_TOKEN из исходного кода в зашифрованный vault или изолированные переменные окружения процесса. Ротировать скомпрометированный токен.
Как не допускать: Применять статические анализаторы кода (SAST) для предотвращения попадания секретов в репозиторий и продакшн-код.
Сводная таблица критических эндпоинтов
Следующие адреса и файлы требуют немедленного закрытия, удаления или ограничения доступа на уровне веб-сервера:
| URL / Эндпоинт / Файл | Описание риска / Вектор | Действие |
|---|---|---|
https://glark.ru/filemgr.lm |
Path Traversal, чтение и запись системных файлов вне песочницы | Исправить фильтрацию путей |
127.0.0.1:9000 (php-fpm) |
Неавторизованный доступ FastCGI (RCE) | Перевести на UNIX-сокет |
https://glark.ru/api/ (vesta.php) |
Административный бэкдор для управления аккаунтами | Удалить файл vesta.php |
https://glark.ru/apps/js/cache.php |
Оставленный сторонний веб-шелл | Удалить файл и проверить cron |
/srv/node_worker.php |
Утечка hardcoded токена NODE_TOKEN | Сменить токен, вынести в env |
https://glark.ru/pisp.php |
Внутренний API с утекшим токеном доступа | Ограничить доступ, сменить ключи |
https://glark.ru/demo.php |
Раскрытие системной информации через phpinfo() | Удалить файл с продакшна |
https://glark.ru/request_log.txt |
Лог с открытыми данными авторизации пользователей | Удалить файл, очистить логи |
https://glark.ru/phpmyadmin/ |
Публичный доступ к устаревшей СУБД (4.4.15.10) | Закрыть доступ по IP или HTTP-Auth |