
Exploit pour CVE-2023-39361 dans Cacti, une solution de graphiques réseau, démontrant une vulnérabilité d'injection SQL à des fins éducatives et de tests de sécurité.
developLorsque vous utilisez les sources ou que vous téléchargez le code directement depuis le dépôt, il est important d'exécuter le script de mise à niveau de la base de données si vous rencontrez des erreurs faisant référence à des tables ou des colonnes manquantes dans la base de données.
Les modifications apportées à la base de données sont validées dans le fichier cacti.sql qui est utilisé pour
les nouvelles installations et validées dans la mise à niveau de la base de données de l'installateur pour les installations
existantes. Étant donné que le numéro de version ne change pas avant la publication dans la
branche develop, ce qui empêchera la mise à niveau de la base de données de s'exécuter, il est
important soit d'utiliser le script de mise à niveau de la base de données pour forcer la version actuelle,
soit de mettre à jour la version dans la base de données.
Lorsque Cacti a été développé pour la première fois il y a près de 20 ans, MySQL n'était pas aussi mature qu'il l'est aujourd'hui. Lorsque The Cacti Group a entrepris de concevoir Cacti 1.x, une décision a été prise pour obliger les utilisateurs à utiliser le moteur de stockage InnoDB pour de nombreuses tables. Cela a été fait car le moteur de stockage InnoDB offre une meilleure expérience utilisateur lorsque votre site web compte plusieurs connexions simultanées. Bien qu'un peu plus lent, il offre également une plus grande résilience pour les développeurs.
Cela dit, plusieurs modifications doivent être apportées à MySQL/MariaDB avant la mise à niveau, et un redémarrage du service est requis. Selon votre version de MariaDB ou de MySQL, les paramètres suivants seront soit requis, soit déjà activés par défaut :
[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
Les paramètres requis sont très importants. Sinon, vous rencontrerez des problèmes lors de la mise à niveau. Pour les paramètres avec XXX, Cacti fournira une recommandation au moment de la mise à niveau. Il n'est pas rare de devoir redémarrer MySQL/MariaDB pendant la mise à niveau pour ajuster ces paramètres. Veuillez en prendre spécialement note avant de commencer votre mise à niveau.
Avant la mise à niveau, vous devez apporter ces modifications requises, puis redémarrer MySQL/MariaDB. Ensuite, vous pouvez vous épargner du temps et des erreurs potentielles en exécutant les scripts suivants (en supposant que vous utilisez 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
Cela convertira toutes les tables InnoDB ou MyISAM au format de fichier Barracuda, au format de ligne dynamique et à utf8mb4. Notez que si vous avez utilisé MySQL ou MariaDB sans innodb_file_per_table activé, il serait peut-être préférable de sauvegarder votre base de données, de réinitialiser InnoDB en supprimant vos fichiers ib* dans le répertoire /var/lib/mysql, puis de restaurer votre base de données ainsi que les tables et permissions MySQL/MariaDB. Avant de prendre une telle mesure, vous devriez toujours vous entraîner sur un serveur de test jusqu'à ce que vous soyez à l'aise avec le changement.
Bonne chance, et profitez de Cacti !
sudo -u cacti php -q cli/upgrade_database.php --forcever=`cat include/cacti_version`
update version set cacti = '1.1.38';
Note : Remplacez la version ci-dessus par la version correcte, sinon l'installateur risque de mettre à niveau depuis une version précédente.
Cacti est une solution complète de graphiques réseau conçue pour exploiter la puissance du stockage de données et des fonctionnalités de graphiques de RRDtool, offrant les fonctionnalités suivantes :
Collecteurs de données distants et locaux
Découverte de périphériques
Automatisation de la création de périphériques et de graphiques
Modèles de graphiques et de périphériques
Méthodes de collecte de données personnalisées
Contrôles d'accès par utilisateur, groupe et domaine
Tout cela est enveloppé dans une interface intuitive et facile à utiliser qui convient aussi bien aux installations de taille LAN qu'aux réseaux complexes comptant des milliers de périphériques.
Développé au début des années 2000 par Ian Berry comme projet de lycée, il a été utilisé par des milliers d'entreprises et de passionnés pour surveiller et gérer leurs réseaux d'entreprise et centres de données.
Cacti devrait pouvoir fonctionner sur tout système d'exploitation Linux, UNIX ou Windows avec les exigences suivantes :
PHP 5.4+
MySQL 5.1+
RRDtool 1.3+, 1.5+ recommandé
NET-SNMP 5.5+
Serveur web avec support PHP
PHP doit également être compilé comme binaire cgi ou cli autonome. Cela est requis pour la collecte de données via cron.
Nous marquons le module php-snmp comme optionnel. Tant que vous n'utilisez pas de périphériques ipv6, ou que vous n'utilisez pas d'ID de moteur ou de contextes snmpv3, l'utilisation de php-snmp devrait être sûre. Sinon, vous devriez envisager de désinstaller le module php-snmp car il créera des problèmes. Nous sommes conscients du problème avec php-snmp et cherchons à nous impliquer dans le projet php pour résoudre ces problèmes.
RRDtool est disponible en plusieurs versions et la majorité d'entre elles sont prises en charge par Cacti. N'oubliez pas de confirmer vos paramètres Cacti pour la version de RRDtool si vous rencontrez des problèmes de rendu des graphiques.
La documentation est disponible avec les versions de Cacti et également consultable sur le Dépôt de documentation.
Consultez le site web principal de Cacti pour les téléchargements, les journaux de modifications, les notes de version et plus encore !