Отчёт по безопасности: 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.sql

Path Traversal в файловом менеджере Critical

Локация файла:
core/FileIO.php
Эндпоинт:
https://glark.ru/filemgr.lm

Описание

Фильтрация путей в методе 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 (127.0.0.1:9000 / внешний порт)
Вектор:
Прямое обращение к FastCGI сокету

Описание

Служба 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

Локация файла:
apps/filemgr.php
Эндпоинт:
https://glark.ru/filemgr.lm?act=zip

Описание

Функция архивации создает 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

Локация файлов:
_dbase*.ini, glark.ru/pisp.php, conf/
Эндпоинт leakage:
https://glark.ru/filemgr.lm?act=editace

Описание

Конфигурационные файлы с реквизитами подключения к БД и 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

Локация файла:
server.glark.ru/core/server.php
Параметр:
HTTP Header Host (rootPath)

Описание

Сервис поддоменов принимает значения из заголовка Host без валидации и использует их при формировании путей на диске, что приводит к выходу за пределы корневой директории сайта и распаковке загружаемых ZIP-архивов в произвольные места файловой системы.

Рекомендации по устранению и предотвращению

Как исправить: Валидировать заголовок Host по строгому белому списку (white-list) допустимых доменных имен. Исключить использование нефильтрованных HTTP-заголовков в файловых операциях.

Как не допускать: Всегда относиться к HTTP-заголовкам как к доверенно нераспределенным пользовательским данным.

Бэкдоры, скрытые скрипты и механизмы закрепления Critical

Файлы:
glark.ru/vesta.php, apps/js/cache.php, apps/js/reinject.sh
Задействованные службы:
Cron (ISPmanager root-cron)

Описание

В системе обнаружено несколько сторонних точек входа и веб-шеллов:

  • 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

Локация файла:
/srv/node_worker.php
Константа:
NODE_TOKEN

Описание

Служебный скрипт 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