
Exploit para CVE-2023-39361 en Cacti, una solución de gráficos de red, que demuestra la vulnerabilidad de inyección SQL con fines educativos y de pruebas de seguridad.
Los cambios en la base de datos se confirman en el archivo cacti.sql, que se
utiliza para nuevas instalaciones, y se confirman en la actualización de la base
de datos del instalador para instalaciones existentes. Debido a que el número de
versión no cambia hasta el lanzamiento en la rama develop, lo que provocará que
la actualización de la base de datos no se ejecute, es importante usar el script
de actualización de la base de datos para forzar la versión actual o actualizar
la versión en la base de datos.
Cuando Cacti fue desarrollado por primera vez hace casi 20 años, MySQL no era tan maduro como lo es ahora. Cuando The Cacti Group se dispuso a diseñar Cacti 1.x, se tomó la decisión de obligar a los usuarios a usar el motor de almacenamiento InnoDB para muchas de las tablas. Esto se hizo porque el motor de almacenamiento InnoDB proporciona una mejor experiencia de usuario cuando su sitio web tiene varios inicios de sesión simultáneos. Aunque es un poco más lento, también proporciona una mayor resiliencia para los desarrolladores.
Dicho esto, hay varios cambios que DEBE realizar en MySQL/MariaDB antes de actualizar, y se requiere un reinicio del servicio. Dependiendo de su versión de MariaDB o MySQL, los siguientes ajustes serán requeridos o ya estarán habilitados de forma predeterminada:
[mysqld]
# required for multiple language support
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# Memory tunables - Cacti provides recommendations at upgrade time
max_heap_table_size = XXX
max_allowed_packet = 500M
tmp_table_size = XXX
join_buffer_size = XXX
sort_buffer_size = XXX
# important for compatibility
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
# innodb settings - Cacti provides recommendations at upgrade time
innodb_buffer_pool_instances = XXX
innodb_flush_log_at_trx_commit = 2
innodb_buffer_pool_size = XXX
innodb_sort_buffer_size = XXX
innodb_doublewrite = ON
# required
innodb_file_per_table = ON
innodb_file_format = Barracuda
innodb_large_prefix = 1
# not all version support
innodb_flush_log_at_timeout = 3
# for SSD's/NVMe
innodb_read_io_threads = 32
innodb_write_io_threads = 16
innodb_io_capacity = 10000
innodb_io_capacity_max = 20000
innodb_flush_method = O_DIRECT
Los ajustes requeridos son muy importantes. De lo contrario, encontrará problemas al actualizar. Para los ajustes con XXX, Cacti proporcionará una recomendación en el momento de la actualización. No es inusual tener que reiniciar MySQL/MariaDB durante la actualización para ajustar estos parámetros. Tenga especialmente en cuenta esto antes de comenzar su actualización.
Antes de actualizar, debe realizar estos cambios requeridos y luego reiniciar MySQL/MariaDB. Después de eso, puede ahorrar tiempo y evitar posibles errores ejecutando los siguientes scripts (asumiendo que usa bash):
for table in `mysql -e "SELECT TABLE_NAME FROM information_schema.TABLES WHERE table_schema='cacti' AND engine!='MEMORY'" cacti | grep -v TABLE_NAME`;
do
echo "Converting $table";
mysql -e "ALTER TABLE $table ENGINE=InnoDB ROW_FORMAT=Dynamic CHARSET=utf8mb4" cacti;
done
Esto convertirá cualquier tabla que sea InnoDB o MyISAM al formato de archivo
Barracuda, formato de fila dinámico y utf8mb4. Tenga en cuenta que si ha estado
usando MySQL o MariaDB sin innodb_file_per_table activado, podría ser mejor
hacer una copia de seguridad de su base de datos, restablecer InnoDB eliminando
sus archivos ib* en el directorio /var/lib/mysql, y después restaurar su base de
datos y las tablas y permisos de MySQL/MariaDB. Antes de dar ese paso, siempre
debe practicar en un servidor de prueba hasta que se sienta cómodo con el cambio.
¡Buena suerte y disfrute de Cacti!
sudo -u cacti php -q cli/upgrade_database.php --forcever=`cat include/cacti_version`
update version set cacti = '1.1.38';
Nota: Cambie la versión anterior a la versión correcta o arriesgue que el instalador actualice desde una versión anterior.
Cacti es una solución completa de gráficos de red diseñada para aprovechar el poder del almacenamiento de datos y la funcionalidad de gráficos de RRDtool, proporcionando las siguientes características:
Recolectores de datos remotos y locales
Descubrimiento de dispositivos
Automatización de la creación de dispositivos y gráficos
Plantillas de gráficos y dispositivos
Métodos personalizados de recolección de datos
Controles de acceso para usuarios, grupos y dominios
Todo esto está envuelto en una interfaz intuitiva y fácil de usar que tiene sentido tanto para instalaciones de tamaño LAN como para redes complejas con miles de dispositivos.
Desarrollado a principios de los años 2000 por Ian Berry como un proyecto de escuela secundaria, ha sido utilizado por miles de empresas y entusiastas para monitorear y gestionar sus redes empresariales y centros de datos.
Cacti debería poder ejecutarse en cualquier sistema operativo Linux, UNIX o Windows con los siguientes requisitos:
PHP 5.4+
MySQL 5.1+
RRDtool 1.3+, se recomienda 1.5+
NET-SNMP 5.5+
Servidor web con soporte PHP
PHP también debe compilarse como un binario cgi o cli independiente. Esto es necesario para la recolección de datos mediante cron.
Marcamos el módulo php-snmp como opcional. Siempre que no esté usando dispositivos ipv6, o usando IDs de motor snmpv3 o contextos, usar php-snmp debería ser seguro. De lo contrario, debería considerar desinstalar el módulo php-snmp, ya que creará problemas. Somos conscientes del problema con php-snmp y buscamos involucrarnos en el proyecto php para resolver estos problemas.
RRDtool está disponible en múltiples versiones y la mayoría de ellas son compatibles con Cacti. Recuerde confirmar su configuración de Cacti para la versión de RRDtool si tiene problemas para renderizar gráficos.
La documentación está disponible con los lanzamientos de Cacti y también está disponible para su visualización en el Repositorio de Documentación.
¡Consulte el sitio web principal de Cacti para descargas, registros de cambios, notas de versión y más!
Dado el gran alcance de Cacti, los foros tienden a generar una cantidad considerable de tráfico. Hacer su parte respondiendo preguntas básicas ayuda mucho, ya que no podemos estar en todas partes a la vez. Contribuya a la comunidad de Cacti participando en los Foros de la Comunidad de Cacti.
¡Participe en la creación y edición de la documentación de Cacti! Haga un fork, cambie y envíe una solicitud de extracción para ayudar a mejorar la documentación en GitHub.
¡Participe en el desarrollo de Cacti! Únase a los desarrolladores y a la comunidad en GitHub!
Cacti maneja la recolección de datos mediante el concepto de fuentes de datos. Las fuentes de datos utilizan métodos de entrada para recolectar datos de dispositivos, hosts, bases de datos, scripts, etc... Las posibilidades son infinitas en cuanto a la naturaleza de los datos que puede recolectar. Las fuentes de datos son el vínculo directo con los archivos RRD subyacentes; cómo se almacenan los datos en los archivos RRD y cómo se recuperan los datos de los archivos RRD.
Los gráficos, el corazón y el alma de Cacti, son creados por RRDtool utilizando la definición de las fuentes de datos definidas.
Uniéndolo todo, Cacti utiliza un extenso sistema de plantillas que permite la creación y el consumo de plantillas portátiles. Las plantillas de gráficos, fuentes de datos y RRA permiten la creación fácil de gráficos y fuentes de datos de forma inmediata. Junto con el soporte de la comunidad de Cacti, las plantillas se han convertido en la forma estándar de soportar gráficos de cualquier número de dispositivos en uso en los entornos informáticos y de redes actuales.
Soporte de recolección de datos local y remota con la capacidad de establecer intervalos de recolección. Consulte Perfil de Fuente de Datos dentro de Cacti para más información. Los Perfiles de Fuente de Datos se pueden aplicar a los gráficos en el momento de la creación o a nivel de plantilla de datos.
La recolección de datos remota se ha facilitado mediante la replicación de recursos a recolectores de datos remotos. Incluso cuando se pierde la conectividad con la instalación principal de Cacti desde el recolector de datos remoto, este almacenará los datos recolectados hasta que se restablezca la conectividad. La recolección de datos remota solo requiere acceso MySQL y HTTP/HTTPS de vuelta a la ubicación de la instalación principal de Cacti.
Cacti proporciona a los administradores una serie de funcionalidades de automatización de red para reducir el tiempo y el esfuerzo necesarios para configurar y gestionar dispositivos.
Múltiples reglas de descubrimiento de red definibles
Plantillas de automatización que especifican cómo se configuran los dispositivos
Cacti es más que un sistema de monitoreo de red, es un marco operativo que permite la extensión y ampliación de la funcionalidad de Cacti. The Cacti Group continúa manteniendo una variedad de plugins. Si busca agregar funciones a Cacti, hay bastante material de referencia para elegir en GitHub.
Cacti permite muchas aumentaciones en tiempo de ejecución al visualizar gráficos:
Vista de árbol y gráficos cargada dinámicamente
Búsqueda por cadena, tipos de gráficos y plantillas
Aumentación de visualización
Ajustes simples de intervalo de tiempo
Botones convenientes de ventana de tiempo deslizante
Opción de gráfico en tiempo real con un solo clic
Exportación fácil de gráficos a csv
Vista RRA con solo un clic
Soporte para permisos por usuario y por grupo a nivel de cada ámbito (área de Cacti), por gráfico, por árbol de gráficos, por dispositivo, etc... El modelo de permisos en Cacti es control de acceso basado en roles (RBAC) para permitir una asignación flexible de permisos. Soporte para la aplicación de complejidad de contraseñas, antigüedad de contraseñas y cambio de contraseñas caducadas.
Cacti soporta la mayoría de las capacidades de gráficos de RRDtool, incluyendo:
Eje derecho completo
Desplazamiento
Guiones y desplazamiento de guiones
Rejilla y alternativa
Sin ajuste de rejilla
Longitud de unidades
Ancho de tabulación
Etiquetas dinámicas
Leyenda de reglas
Posición de la leyenda
VDEFs
Líneas apiladas
Anchos de línea definibles por el usuario
Alineación de texto
Copyright (c) 2004-2023 - The Cacti Group, Inc.