
Exploit para CVE-2023-39361 no Cacti, uma solução de gráficos de rede, demonstrando vulnerabilidade de injeção SQL para fins educacionais e de teste de segurança.
As alterações no banco de dados são commitadas no arquivo cacti.sql, que é usado
para novas instalações, e commitadas na atualização do banco de dados do instalador
para instalações existentes. Como o número da versão não muda até o lançamento no
branch develop, o que resultará na não execução da atualização do banco de dados,
é importante usar o script de atualização do banco de dados para forçar a versão
atual ou atualizar a versão no banco de dados.
Quando o Cacti foi desenvolvido pela primeira vez, há quase 20 anos, o MySQL não era tão maduro quanto é agora. Quando o The Cacti Group começou a projetar o Cacti 1.x, foi tomada uma decisão de forçar os usuários a usar o mecanismo de armazenamento InnoDB para muitas das tabelas. Isso foi feito porque o mecanismo de armazenamento InnoDB proporciona uma melhor experiência ao usuário quando o seu site tem vários logins simultâneos. Embora um pouco mais lento, também proporciona maior resiliência para os desenvolvedores.
Dito isso, há várias alterações que você DEVE fazer no MySQL/MariaDB antes de atualizar, e uma reinicialização do serviço é necessária. Dependendo da sua versão do MariaDB ou MySQL, as seguintes configurações serão necessárias ou já estarão habilitadas por padrão:
[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
As configurações necessárias são muito importantes. Caso contrário, você encontrará problemas ao atualizar. Para as configurações com XXX, o Cacti fornecerá uma recomendação no momento da atualização. Não é incomum ter que reiniciar o MySQL/MariaDB durante a atualização para ajustar essas configurações. Por favor, tome nota especial disso antes de iniciar a sua atualização.
Antes de atualizar, você deve fazer essas alterações necessárias e, em seguida, reiniciar o MySQL/MariaDB. Depois disso, você pode economizar tempo e evitar possíveis erros executando os seguintes scripts (assumindo que você esteja usando 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
Isso converterá quaisquer tabelas que sejam InnoDB ou MyISAM para o formato de arquivo Barracuda, formato de linha dinâmico e utf8mb4. Observe que, se você estiver usando MySQL ou MariaDB sem innodb_file_per_table ativado, talvez seja melhor fazer backup do seu banco de dados, redefinir o InnoDB removendo os arquivos ib* no diretório /var/lib/mysql e, depois disso, restaurar o seu banco de dados e as tabelas e permissões do MySQL/MariaDB. Antes de tomar tal medida, você deve sempre praticar em um servidor de teste até se sentir confortável com a mudança.
Boa sorte e aproveite o Cacti!
sudo -u cacti php -q cli/upgrade_database.php --forcever=`cat include/cacti_version`
update version set cacti = '1.1.38';
Nota: Altere a versão acima para a versão correta ou arrisque o instalador atualizando a partir de uma versão anterior.
O Cacti é uma solução completa de gráficos de rede projetada para aproveitar o poder do armazenamento de dados e da funcionalidade de gráficos do RRDtool, fornecendo os seguintes recursos:
Coletores de dados remotos e locais
Descoberta de dispositivos
Automação da criação de dispositivos e gráficos
Modelos de gráficos e dispositivos
Métodos personalizados de coleta de dados
Controles de acesso para usuários, grupos e domínios
Tudo isso está envolvido em uma interface intuitiva e fácil de usar que faz sentido tanto para instalações de tamanho LAN quanto para redes complexas com milhares de dispositivos.
Desenvolvido no início dos anos 2000 por Ian Berry como um projeto de ensino médio, ele tem sido usado por milhares de empresas e entusiastas para monitorar e gerenciar suas Redes Empresariais e Data Centers.
O Cacti deve ser capaz de rodar em qualquer sistema operacional Linux, UNIX ou Windows com os seguintes requisitos:
PHP 5.4+
MySQL 5.1+
RRDtool 1.3+, 1.5+ recomendado
NET-SNMP 5.5+
Servidor Web com suporte a PHP
O PHP também deve ser compilado como um binário cgi ou cli autônomo. Isso é necessário para a coleta de dados via cron.
Marcamos o módulo php-snmp como opcional. Contanto que você não esteja usando dispositivos ipv6, ou usando IDs de mecanismo ou contextos snmpv3, usar o php-snmp deve ser seguro. Caso contrário, você deve considerar desinstalar o módulo php-snmp, pois ele criará problemas. Estamos cientes do problema com o php-snmp e estamos procurando nos envolver no projeto php para resolver esses problemas.
O RRDtool está disponível em várias versões e a maioria delas é suportada pelo Cacti. Lembre-se de confirmar as suas configurações do Cacti para a versão do RRDtool se você estiver tendo problemas para renderizar gráficos.
A documentação está disponível com os lançamentos do Cacti e também está disponível para visualização no Repositório de Documentação.
Confira o site principal do Cacti para downloads, logs de alterações, notas de lançamento e muito mais!
Dado o grande escopo do Cacti, os fóruns tendem a gerar uma quantidade considerável de tráfego. Fazer a sua parte respondendo perguntas básicas ajuda muito, pois não podemos estar em todos os lugares ao mesmo tempo. Contribua com a comunidade do Cacti participando dos Fóruns da Comunidade Cacti.
Envolva-se na criação e edição da Documentação do Cacti! Faça um fork, altere e envie um pull request para ajudar a melhorar a documentação no GitHub.
Envolva-se no desenvolvimento do Cacti! Junte-se aos desenvolvedores e à comunidade no GitHub!
O Cacti lida com a coleta de dados através do conceito de fontes de dados. As fontes de dados utilizam métodos de entrada para coletar dados de dispositivos, hosts, bancos de dados, scripts, etc... As possibilidades são infinitas quanto à natureza dos dados que você é capaz de coletar. As fontes de dados são o elo direto com os arquivos RRD subjacentes; como os dados são armazenados nos arquivos RRD e como os dados são recuperados dos arquivos RRD.
Os gráficos, o coração e a alma do Cacti, são criados pelo RRDtool usando a definição das fontes de dados definidas.
Unindo tudo, o Cacti usa um extenso sistema de modelos que permite a criação e o consumo de modelos portáteis. Modelos de gráficos, fontes de dados e RRA permitem a fácil criação de gráficos e fontes de dados prontos para uso. Junto com o suporte da comunidade do Cacti, os modelos se tornaram a forma padrão de suportar a criação de gráficos para qualquer número de dispositivos em uso nos ambientes de computação e rede atuais.
Suporte à coleta de dados local e remota com a capacidade de definir intervalos de coleta. Confira o Perfil de Fonte de Dados dentro do Cacti para mais informações. Os Perfis de Fonte de Dados podem ser aplicados aos gráficos no momento da criação ou no nível do modelo de dados.
A coleta remota de dados foi facilitada através da replicação de recursos para coletores de dados remotos. Mesmo quando a conectividade com a instalação principal do Cacti é perdida a partir do coletor de dados remoto, ele armazenará os dados coletados até que a conectividade seja restaurada. A coleta remota de dados requer apenas acesso MySQL e HTTP/HTTPS de volta ao local da instalação principal do Cacti.
O Cacti fornece aos administradores uma série de funcionalidades de automação de rede, a fim de reduzir o tempo e o esforço necessários para configurar e gerenciar dispositivos.
Múltiplas regras de descoberta de rede definíveis
Modelos de automação que especificam como os dispositivos são configurados
O Cacti é mais do que um sistema de monitoramento de rede, é um framework de operações que permite a extensão e o aumento da funcionalidade do Cacti. O The Cacti Group continua mantendo uma variedade de plugins. Se você está procurando adicionar recursos ao Cacti, há bastante material de referência para escolher no GitHub.
O Cacti permite muitas aumentações em tempo de execução ao visualizar gráficos:
Visualização de árvore e gráficos carregada dinamicamente
Pesquisa por string, tipos de gráfico e modelo
Aumentação de visualização
Ajustes simples de intervalo de tempo
Botões convenientes de janela de tempo deslizante
Opção de gráfico em tempo real com um único clique
Exportação fácil de gráficos para csv
Visualização RRA com apenas um clique
Suporte para permissões por usuário e por grupo em cada realm (área do Cacti), por gráfico, por árvore de gráficos, por dispositivo, etc... O modelo de permissões no Cacti é controle de acesso baseado em funções (RBAC) para permitir a atribuição flexível de permissões. Suporte para aplicação de complexidade de senha, idade da senha e alteração de senhas expiradas.
O Cacti suporta a maioria dos recursos de criação de gráficos do RRDtool, incluindo:
Eixo direito completo
Deslocamento
Traço e deslocamento de traço
Grade y alternativa
Sem ajuste de grade
Comprimento das unidades
Largura da aba
Rótulos dinâmicos
Legenda de regras
Posição da legenda
VDEFs
Linhas empilhadas
Larguras de linha definíveis pelo usuário
Alinhamento de texto
Copyright (c) 2004-2023 - The Cacti Group, Inc.