CVE-2022-46169
Неаутентифицированное внедрение команд
- Опубликовано
- 5 дек. 2022 г.
- Обновлено
- 21 окт. 2025 г.
- Назначение CNA
- GitHub_M
- Наблюдены доказательства
- 16 февр. 2023 г.
Первичный CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HВысокий · следующие 30 дней
- Процентиль
- 100,0 %
- Дата модели
- 21 сент. 2026 г.
EPSS – это статистическая оценка, а не достоверность или мера воздействия. Объедините это с CVSS, статусом KEV, воздействием и вашей средой.
CISA Известно, что эксплуатация
Эта CVE присутствует в каталоге известных эксплуатируемых уязвимостей CISA.
Резюме
Cacti — это платформа с открытым исходным кодом, предоставляющая пользователям надежную и расширяемую среду для операционного мониторинга и управления сбоями. В затронутых версиях уязвимость внедрения команд позволяет неаутентифицированному пользователю выполнять произвольный код на сервере, работающем под управлением Cacti, если для любого отслеживаемого устройства был выбран определенный источник данных. Уязвимость находится в файле `remote_agent.php`. Этот файл доступен без аутентификации. Эта функция получает IP-адрес клиента через `get_client_addr` и преобразует этот IP-адрес в соответствующее имя хоста через `gethostbyaddr`. После этого проверяется, существует ли запись в таблице `poller`, в которой имя хоста соответствует преобразованному имени хоста. Если такая запись найдена, функция возвращает `true`, и клиент считается авторизованным. Эту авторизацию можно обойти из-за реализации функции `get_client_addr`. Функция определена в файле `lib/functions.php` и проверяет несколько переменных `$_SERVER`, чтобы определить IP-адрес клиента. Переменные, начинающиеся с `HTTP_`, могут быть произвольно заданы атакующим. Поскольку в таблице `poller` есть запись по умолчанию с именем хоста сервера, на котором работает Cacti, атакующий может обойти аутентификацию, например, указав заголовок `Forwarded-For: <TARGETIP>`. Таким образом, функция `get_client_addr` возвращает IP-адрес сервера, на котором работает Cacti. Последующий вызов `gethostbyaddr` преобразует этот IP-адрес в имя хоста сервера, которое пройдет проверку имени хоста `poller` из-за записи по умолчанию. После обхода авторизации файла `remote_agent.php` атакующий может запускать различные действия. Одно из таких действий называется `polldata`. Вызываемая функция `poll_for_data` получает несколько параметров запроса и загружает соответствующие записи `poller_item` из базы данных. Если `action` записи `poller_item` равно `POLLER_ACTION_SCRIPT_PHP`, для выполнения PHP-скрипта используется функция `proc_open`. Контролируемый атакующим параметр `$poller_id` извлекается с помощью функции `get_nfilter_request_var`, которая допускает произвольные строки. Эта переменная затем вставляется в строку, передаваемую в `proc_open`, что приводит к уязвимости внедрения команд. Например, указав `poller_id=;id`, выполняется команда `id`. Чтобы достичь уязвимого вызова, атакующий должен указать `host_id` и `local_data_id`, для которых `action` соответствующей записи `poller_item` установлено в `POLLER_ACTION_SCRIPT_PHP`. Оба этих идентификатора (`host_id` и `local_data_id`) легко подбираются перебором. Единственное требование — наличие записи `poller_item` с действием `POLLER_ACTION_SCRIPT_PHP`. Это весьма вероятно на рабочем экземпляре, поскольку это действие добавляется некоторыми предопределенными шаблонами, такими как `Device - Uptime` или `Device - Polling Time`. Эта уязвимость внедрения команд позволяет неаутентифицированному пользователю выполнять произвольные команды, если настроена запись `poller_item` с типом `action` `POLLER_ACTION_SCRIPT_PHP` (`2`). Обход авторизации следует предотвращать, не позволяя атакующему заставить `get_client_addr` (файл `lib/functions.php`) возвращать произвольный IP-адрес. Это можно сделать, не принимая во внимание переменные `$_SERVER`, начинающиеся с `HTTP_...`. Если их необходимо сохранить для совместимости, следует как минимум предотвратить подделку IP-адреса сервера, на котором работает Cacti. Эта уязвимость устранена в ветках выпуска 1.2.x и 1.3.x, при этом `1.2.23` является первым выпуском, содержащим исправление.
Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.