Vulnerabilidad en Cacti (CVE-2022-46169)
Gravedad CVSS v3.1:
CRÍTICA
Tipo:
CWE-74
Neutralización incorrecta de elementos especiales en la salida utilizada por un componente interno (Inyección)
Fecha de publicación:
05/12/2022
Última modificación:
18/02/2025
Descripción
Cacti es una plataforma de código abierto que proporciona un framework de gestión de fallos y supervisión operativa robusta y extensible para los usuarios. En las versiones afectadas, una vulnerabilidad de inyección de comandos permite a un usuario no autenticado ejecutar código arbitrario en un servidor que ejecuta Cacti, si se seleccionó una fuente de datos específica para cualquier dispositivo monitoreado. La vulnerabilidad reside en el archivo `remote_agent.php`. Se puede acceder a este archivo sin autenticación. Esta función recupera la dirección IP del cliente a través de `get_client_addr` y resuelve esta dirección IP en el nombre de host correspondiente a través de `gethostbyaddr`. Después de esto, se verifica que existe una entrada dentro de la tabla `poller`, donde el nombre de host corresponde al nombre de host resuelto. Si se encuentra dicha entrada, la función devuelve "verdadero" y el cliente está autorizado. Esta autorización se puede omitir debido a la implementación de la función `get_client_addr`. La función se define en el archivo `lib/functions.php` y verifica las variables serval `$_SERVER` para determinar la dirección IP del cliente. Un atacante puede establecer arbitrariamente las variables que comienzan con `HTTP_`. Dado que hay una entrada predeterminada en la tabla `poller` con el nombre de host del servidor que ejecuta Cacti, un atacante puede omitir la autenticación, por ejemplo, proporcionando el encabezado `Forwarded-For: `. De esta forma, la función `get_client_addr` devuelve la dirección IP del servidor que ejecuta Cacti. La siguiente llamada a `gethostbyaddr` resolverá esta dirección IP en el nombre de host del servidor, que pasará la verificación del nombre de host `poller` debido a la entrada predeterminada. Después de omitir la autorización del archivo `remote_agent.php`, un atacante puede desencadenar diferentes acciones. Una de estas acciones se llama "polldata". La función llamada `poll_for_data` recupera algunos parámetros de solicitud y carga las entradas correspondientes de `poller_item` de la base de datos. Si la `acción` de un `poller_item` es igual a `POLLER_ACTION_SCRIPT_PHP`, la función `proc_open` se usa para ejecutar un script PHP. El parámetro controlado por el atacante `$poller_id` se recupera mediante la función `get_nfilter_request_var`, que permite cadenas arbitrarias. Esta variable luego se inserta en la cadena pasada a `proc_open`, lo que genera una vulnerabilidad de inyección de comando. Por ejemplo, al proporcionar `poller_id=;id`, se ejecuta el comando `id`. Para llegar a la llamada vulnerable, el atacante debe proporcionar un `host_id` y un `local_data_id`, donde la `acción` del `poller_item` correspondiente está configurada en `POLLER_ACTION_SCRIPT_PHP`. Ambos identificadores (`host_id` y `local_data_id`) pueden ser fácilmente forzados por fuerza bruta. El único requisito es que exista un `poller_item` con una acción `POLLER_ACTION_SCRIPT_PHP`. Es muy probable que esto ocurra en una instancia productiva porque esta acción se agrega mediante algunas plantillas predefinidas como "Device - Uptime` o "Dispositivo - Polling Time". Esta vulnerabilidad de inyección de comandos permite a un usuario no autenticado ejecutar comandos arbitrarios si se configura un `poller_item` con el tipo `action` `POLLER_ACTION_SCRIPT_PHP` (`2`). La omisión de autorización debe evitarse al no permitir que un atacante haga que `get_client_addr` (archivo `lib/functions.php`) devuelva una dirección IP arbitraria. Esto podría hacerse al no respetar las variables `HTTP_...` `$_SERVER`. Si se deben conservar por razones de compatibilidad, al menos se debe evitar falsificar la dirección IP del servidor que ejecuta Cacti. Esta vulnerabilidad se ha solucionado en las versiones 1.2.x y 1.3.x, siendo `1.2.23` la primera versión que contiene el parche.
Impacto
Puntuación base 3.x
9.80
Gravedad 3.x
CRÍTICA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:a:cacti:cacti:*:*:*:*:*:*:*:* | 1.2.23 (excluyendo) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://github.com/Cacti/cacti/commit/7f0e16312dd5ce20f93744ef8b9c3b0f1ece2216
- https://github.com/Cacti/cacti/commit/a8d59e8fa5f0054aa9c6981b1cbe30ef0e2a0ec9
- https://github.com/Cacti/cacti/commit/b43f13ae7f1e6bfe4e8e56a80a7cd867cf2db52b
- https://github.com/Cacti/cacti/security/advisories/GHSA-6p93-p743-35gf
- https://github.com/Cacti/cacti/commit/7f0e16312dd5ce20f93744ef8b9c3b0f1ece2216
- https://github.com/Cacti/cacti/commit/a8d59e8fa5f0054aa9c6981b1cbe30ef0e2a0ec9
- https://github.com/Cacti/cacti/commit/b43f13ae7f1e6bfe4e8e56a80a7cd867cf2db52b
- https://github.com/Cacti/cacti/security/advisories/GHSA-6p93-p743-35gf