
Подробный отчет об уязвимости CVE-2026-39938 для Cacti ≤1.2.30, демонстрирующий неаутентифицированный LFI, связанный с инъекцией команд ОС для RCE, с PoC, анализом первопричины и рекомендациями по устранению.
Исследователь: K | Продукт: Cacti ≤ 1.2.30 | CVE: CVE-2026-39938
| Поле | Значение |
|---|---|
| Продукт | Cacti — комплексное решение для построения графиков на основе RRDtool |
| Затронутые версии | ≤ 1.2.30 |
| Класс уязвимости | CWE-22: Path Traversal (LFI) → CWE-78: OS Command Injection |
| Вектор атаки | Сеть |
| Аутентификация | Не требуется (обход гостевой учётной записи) |
| Взаимодействие с пользователем | Не требуется |
| Оценка CVSSv3.1 | 9.8 — КРИТИЧЕСКАЯ |
| Вектор | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
Cacti ≤ 1.2.30 уязвим к неаутентифицированному включению локальных файлов (LFI) через параметр graph_theme в graph_image.php, что в связке с внедрением OS-команд через cacti_escapeshellarg() на Windows приводит к удалённому выполнению кода (RCE).
HTTP Request
│
▼
graph_image.php
│
├── $guest_account = true → Auth bypass (no login needed)
│
├── graph_theme param → LFI (CWE-22)
│ └── Path traversal via basename() bypass
│
└── Other params (graph_height, etc.)
└── cacti_escapeshellarg() → OS injection (CWE-78)
└── proc_open() → RCE
graph_themeПараметр graph_theme недостаточно очищается. В исправлении была предпринята попытка использовать basename(), однако её тривиально обойти: путь вида themes/../../etc/passwd проходит проверку basename(), но при этом всё равно выполняет обход каталогов.
Уязвимый участок кода в graph_image.php:
$theme = basename($_GET['graph_theme']); // basename() is NOT sufficient
include_once("./include/theme_" . $theme . ".php"); // LFI
В исправлении в версии 1.2.31 basename() заменён на cacti_validate_theme(), который использует список разрешённых файлов в файловой системе.
| Условие | Вероятность | Примечания |
|---|---|---|
| Cacti работает на Windows | Часто в корпоративной среде | Ошибка экранирования в cmd.exe позволяет RCE |
| Гостевая учётная запись включена | Часто — по умолчанию | Гостевой пользователь разрешает публичный просмотр графиков |
| Существует хотя бы один график | Почти всегда | local_graph_id=1 присутствует после установки |
| RRDtool установлен | Требуется для Cacti | Присутствует всегда |
GET /cacti/graph_image.php?local_graph_id=1&graph_theme=../../../../etc/passwd
GET /cacti/graph_image.php?local_graph_id=1&graph_height=100" & whoami & "&action=view
Внедрение OS-команд уже обеспечивает прямое удалённое выполнение кода (RCE), поэтому для получения контроля над системой LFI не требуется.
Однако с точки зрения исследователя, если рассматривать обе проблемы вместе:
Это показывает, что комбинирование нескольких уязвимостей повышает общий ущерб и делает эксплуатацию проще и надёжнее.
| Аспект | Оценка | Описание |
|---|---|---|
| Конфиденциальность | ВЫСОКАЯ | Полный доступ на чтение к файловой системе веб-сервера (конфигурация, учётные данные БД) |
| Целостность | ВЫСОКАЯ | Выполнение произвольных команд, развёртывание веб-шелла |
| Доступность | ВЫСОКАЯ | Завершение процессов, повреждение файлов, DoS |
| Метрика | Значение |
|---|---|
| Вектор атаки | Сеть |
| Сложность атаки | Низкая |
| Необходимые привилегии | Отсутствуют |
| Взаимодействие с пользователем | Отсутствует |
| Область действия | Без изменений |
| Конфиденциальность | Высокая |
| Целостность | Высокая |
| Доступность | Высокая |
Оценка: 9.8 — КРИТИЧЕСКАЯ
| Приоритет | Действие |
|---|---|
| Немедленно | Обновиться до Cacti 1.2.31 или новее |
MENG HOKSENG
Независимый исследователь безопасности
Ссылки: