Volver a Labs
Alerta de Seguridad

CVE-2022-46169

Acerca de

Cacti es una plataforma de código abierto que ofrece un marco robusto y extensible de monitoreo operativo y gestión de fallos 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 algún dispositivo monitoreado. La vulnerabilidad reside en el archivo `remote_agent.php`. A este archivo se puede acceder sin autenticación. Esta función recupera la dirección IP del cliente mediante `get_client_addr` y resuelve esta dirección IP al nombre de host correspondiente mediante `gethostbyaddr`. Tras esto, se verifica que exista una entrada dentro de la tabla `poller` cuyo nombre de host corresponda al nombre de host resuelto. Si se encuentra tal entrada, la función devuelve `true` y el cliente queda autorizado. Esta autorización se puede eludir debido a la implementación de la función `get_client_addr`. La función está definida en el archivo `lib/functions.php` y comprueba varias variables `$_SERVER` para determinar la dirección IP del cliente. Las variables que comienzan con `HTTP_` pueden ser establecidas arbitrariamente por un atacante. Dado que existe una entrada predeterminada en la tabla `poller` con el nombre de host del servidor que ejecuta Cacti, un atacante puede eludir la autenticación, por ejemplo, proporcionando el encabezado `Forwarded-For: `. De esta manera, la función `get_client_addr` devuelve la dirección IP del servidor que ejecuta Cacti. La llamada siguiente a `gethostbyaddr` resolverá esta dirección IP al nombre de host del servidor, que pasará la comprobación de nombre de host de `poller` gracias a la entrada predeterminada. Tras eludir la autorización del archivo `remote_agent.php`, un atacante puede desencadenar distintas acciones. Una de estas acciones se llama `polldata`. La función invocada `poll_for_data` recupera algunos parámetros de la solicitud y carga las entradas `poller_item` correspondientes desde la base de datos. Si la `action` de un `poller_item` es igual a `POLLER_ACTION_SCRIPT_PHP`, se usa la función `proc_open` 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 se inserta más adelante en la cadena pasada a `proc_open`, lo que conduce a una vulnerabilidad de inyección de comandos. Al proporcionar, por ejemplo, `poller_id=;id`, se ejecuta el comando `id`. Para alcanzar la llamada vulnerable, el atacante debe proporcionar un `host_id` y un `local_data_id`, donde la `action` del `poller_item` correspondiente esté establecida en `POLLER_ACTION_SCRIPT_PHP`. Ambos identificadores (`host_id` y `local_data_id`) pueden ser fácilmente obtenidos por fuerza bruta. El único requisito es que exista un `poller_item` con una acción `POLLER_ACTION_SCRIPT_PHP`. Esto es muy probable en una instancia productiva porque esta acción se añade mediante algunas plantillas predefinidas como `Device - Uptime` o `Device - Polling Time`. Esta vulnerabilidad de inyección de comandos permite a un usuario no autenticado ejecutar comandos arbitrarios si hay configurado un `poller_item` con el tipo de `action` `POLLER_ACTION_SCRIPT_PHP` (`2`). La elusión de autorización debería impedirse no permitiendo que un atacante haga que `get_client_addr` (archivo `lib/functions.php`) devuelva una dirección IP arbitraria. Esto podría lograrse no respetando las variables `$_SERVER` `HTTP_...`. Si estas deben conservarse por razones de compatibilidad, al menos debería impedirse falsificar la dirección IP del servidor que ejecuta Cacti. Esta vulnerabilidad se ha corregido tanto en la rama de versiones 1.2.x como en la 1.3.x, siendo `1.2.23` la primera versión que contiene el parche.
Debilidad (CWE):CWE-74CWE-78CWE-863

Análisis del analista Rainforest

El archivo `remote_agent.php` de Cacti es accesible sin autenticación, y su comprobación de acceso puede derrotarse. El script identifica al llamante resolviendo la IP del cliente a un nombre de host y cotejándolo con la tabla `poller`, pero deriva esa IP de encabezados con prefijo `HTTP_` controlables por el atacante, como `X-Forwarded-For`. Como una entrada predeterminada de poller lleva el propio nombre de host del servidor, falsificar el encabezado con la dirección del servidor pasa la comprobación. Una vez autorizado, la acción `polldata` llega a `proc_open` con un `poller_id` suministrado por el atacante, de modo que inyectar metacaracteres de shell como `;id` ejecuta comandos arbitrarios con los privilegios del usuario del servidor web.

Cacti es una plataforma de monitoreo de red, así que sus servidores están cableados a la infraestructura por diseño, y albergan credenciales SNMP e inventarios de dispositivos que hacen de una instancia comprometida un fuerte punto de pivote hacia el resto del entorno. El requisito previo — un poller item con una acción de script PHP — lo satisfacen plantillas predeterminadas comunes, así que la mayoría de las instancias productivas son explotables. Esto fue ampliamente escaneado y explotado tras la divulgación. Actualice a 1.2.23 o posterior, mantenga Cacti fuera del internet público y revise los datos de poller y de registro en busca de ejecución de comandos inesperada.

Referencias

CVEs Relacionadas

Preguntas frecuentes

¿Qué es CVE-2022-46169?

Cacti es una plataforma de código abierto que ofrece un marco robusto y extensible de monitoreo operativo y gestión de fallos 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 algún dispositivo monitoreado.

¿Qué tan grave es CVE-2022-46169?

CVE-2022-46169 tiene una puntuación base CVSS 3.1 de 9.8, calificada como critical. En el Rainforest Risk Index — que pondera la gravedad junto con lo fácil que es alcanzar la falla y la amplitud de su impacto — obtiene 99 sobre 100, en la banda crítico.

¿Cómo se explota CVE-2022-46169?

Según el vector CVSS (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H): vector de ataque Red, complejidad de ataque Baja, privilegios necesarios Ninguno, interacción del usuario Ninguna. Impacto en confidencialidad Alto, integridad Alto y disponibilidad Alto.

¿Qué productos afecta CVE-2022-46169?

Los avisos públicos listan como afectados: cacti. Consulta las referencias de esta página para las versiones exactas que confirma cada proveedor.

¿Cómo se corrige CVE-2022-46169?

Aplica la corrección publicada por el proveedor — las referencias de esta página enlazan a los avisos y parches originales. Cuando no se pueda parchear de inmediato, reduce la exposición del componente afectado y vigila los intentos de explotación. Los clientes de Rainforest ven esta vulnerabilidad correlacionada con sus propios activos y priorizada por la exposición real, no solo por la puntuación.

Potencia tu estrategia de seguridad con Rainforest

Descubre vulnerabilidades a tiempo, prioriza amenazas críticas y protege lo que realmente importa. Rainforest simplifica tus operaciones de seguridad, ahorrando tiempo y reduciendo costos, para que te enfoques en lo que impulsa tu negocio.

Compartir:LinkedInX Email