
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.
developAl usar el código fuente o descargar el código directamente del repositorio, es importante ejecutar el script de actualización de la base de datos si experimenta errores relacionados con tablas o columnas faltantes en la base de datos.
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.