CVE-2022-46169

Scores

EPSS Score

0.9447

CVSS

3.x 9.8

Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

All CVSS Scores

CVSS 4.0
0.0
CVSS 3.x
9.8

Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

CVSS 2.0
0.0

Description

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`, функция `proc_open` используется для выполнения PHP-скрипта. Управляемый злоумышленником параметр `$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` является первым выпуском, содержащим исправление.

Sources

debiannvdubuntu

CWEs

CWE-78

Related Vulnerabilities

Exploits

Exploit ID: CVE-2022-46169

Source: cisa

URL: https://www.cisa.gov/known-exploited-vulnerabilities-catalog

Exploit ID: 51166

Source: exploitdb

URL: https://www.exploit-db.com/exploits/51166

Vulnerable Software

Type: Configuration

Product: cacti

Operating System: ubuntu bionic 18.04

Trait:
{
  "unfixed": true
}

Source: ubuntu

Type: Configuration

Product: cacti

Operating System: ubuntu focal 20.04

Trait:
{
  "unfixed": true
}

Source: ubuntu

Type: Configuration

Product: cacti

Operating System: ubuntu jammy 22.04

Trait:
{
  "unfixed": true
}

Source: ubuntu

Type: Configuration

Product: cacti

Operating System: ubuntu kinetic 22.10

Trait:
{
  "unfixed": true
}

Source: ubuntu

Type: Configuration

Product: cacti

Operating System: ubuntu lunar 23.04

Trait:
{
  "unfixed": true
}

Source: ubuntu

Type: Configuration

Product: cacti

Operating System: ubuntu trusty 14.04

Trait:
{
  "unfixed": true
}

Source: ubuntu

Type: Configuration

Product: cacti

Operating System: ubuntu xenial 16.04

Trait:
{
  "unfixed": true
}

Source: ubuntu

Type: Configuration

Product: cacti

Operating System: debian

Trait:
{
  "fixed": "1.2.22+ds1-3"
}

Source: debian

Type: Configuration

Vendor: cacti

Product: cacti

Operating System: * * *

Trait:
{
  "cpe_match": [
    {
      "cpe23uri": "cpe:2.3:a:cacti:cacti:*:*:*:*:*:*:*:*",
      "versionEndExcluding": "1.2.23",
      "vulnerable": true
    }
  ],
  "operator": "OR"
}

Source: nvd