[PT-BR] CVE-2026-40083: SQL Injection no Cacti - Hakai
JOIN
JOIN
RESEARCH ENTRY 2026.08.27
Research Blog

[PT-BR] CVE-2026-40083: SQL Injection no Cacti

RESEARCHER jpg, gabriel rodrigues
READ TIME5 MINUTES
PUBLISHED27 Aug 2026
[PT-BR] CVE-2026-40083: SQL Injection no Cacti

Resumo

A equipe de pesquisa Yokai, da Hakai Security, identificou uma vulnerabilidade de Injeção de SQL nas versões do Cacti <= 1.2.30. A falha permite que um usuário autenticado com permissões de gerenciamento de SNMP execute consultas SQL arbitrárias, possibilitando a leitura ou modificação de todo o conteúdo do banco de dados. A vulnerabilidade reside no arquivo managers.php, onde a entrada do usuário é inserida diretamente nas consultas SQL sem validação de tipo. A exploração requer uma conta autenticada com privilégios de agente. Uma vez explorada, um invasor pode extrair o conteúdo completo do banco de dados por meio de injeção de SQL, incluindo hashes de credenciais, strings de community do SNMP e dados de infraestrutura. Após o relato e alinhamento coordenado por meio do programa GitHub Security Advisory, a equipe do Cacti publicou o patch de correção e a falha recebeu o identificador CVE-2026-40083. Esta publicação tem como objetivo fornecer aos pesquisadores de segurança e profissionais de defesa uma análise detalhada da vulnerabilidade, incluindo sua causa raiz, impacto potencial e estratégias práticas de mitigação para organizações.

Impacto

A vulnerabilidade permite que usuários autenticados com permissões de SNMP Manager executem consultas arbitrárias no banco de dados. Isso possibilita a leitura de tabelas contendo dados de usuários, configurações, credenciais de dispositivos e communities SNMP, além da extração de hashes bcrypt e tokens de API, o que pode resultar no comprometimento de contas. Adicionalmente, a falha possibilita a execução de comandos de sleep, podendo causar negação de serviço por esgotamento das conexões simultâneas com o banco de dados. Segundo dados da TheirStack, o Cacti é utilizado por mais de 2.000 empresas em todo o mundo, ampliando o potencial impacto dessa vulnerabilidade em ambientes corporativos.

Detalhes Técnicos

A vulnerabilidade explora a falta de validação rigorosa de tipo de dados e a completa ausência de consultas parametrizadas na funcionalidade de gerenciamento SNMP. Enquanto a maior parte da aplicação utiliza abstrações corretas, a lógica encarregada do processamento interpola diretamente os valores extraídos de um array para compor um código SQL dinâmico. A falha está localizada dentro do repositório no arquivo managers.php, especificamente entre as linhas 756 e 766 disponíveis na visualização histórica pelo link https://github.com/Cacti/cacti/blob/release/1.2.30/managers.php#L756-L766.

$selected_items = cacti_unserialize(stripslashes(gnrv('selected_graphs_array')));

if (cacti_sizeof($selected_items)) {

    db_execute('DELETE FROM snmpagent_managers WHERE id IN (' . implode(',', $selected_items) . ')');

}

O campo manipulado na variável selected_items é proveniente da desserialização de dados controlados pelo usuário enviados no corpo da requisição. Embora a aplicação utilize a função cacti_unserialize para mitigar vulnerabilidades relacionadas à Injeção de Objetos PHP, impedindo a desserialização de classes arbitrárias, não há validações adequadas para restringir a manipulação de tipos primitivos. Como consequência, um array contendo valores controlados pelo usuário pode alcançar a etapa de concatenação da consulta SQL, permitindo a execução de consultas SQL arbitrárias.

Endpoints Afetados

O endpoint afetado corresponde à funcionalidade administrativa "/cacti/managers.php", acessível por meio de requisições HTTP POST. Foi observado que o parâmetro "selected_graphs_array" processava dados controlados pelo usuário de forma insegura, tornando-se o ponto da injeção da vulnerabilidade. O payload foi inserido nesse campo utilizando uma estrutura serializada especialmente construída para manipular a consulta SQL executada pela aplicação.

Para validação da vulnerabilidade, foi utilizado um payload baseado em Time-Based Blind SQL Injection, que emprega funções de atraso do banco de dados, como SLEEP(), para provocar uma resposta com tempo de execução elevado quando a instrução SQL é interpretada com sucesso. A ocorrência desse atraso confirmou que o conteúdo fornecido em "selected_graphs_array" era incorporado à consulta SQL sem a devida sanitização ou parametrização, permitindo a execução de instruções SQL arbitrárias. A requisição HTTP abaixo demonstra a prova de conceito utilizada durante os testes, enviada por meio da ferramenta Burp Suite.

Após o envio da requisição, a aplicação processa o conteúdo injetado e encaminha a consulta ao banco de dados. Como a entrada controlada pelo usuário é incorporada à instrução SQL sem a devida validação, a expressão de atraso é executada pelo banco de dados, provocando um aumento perceptível no tempo de resposta da aplicação. Esse comportamento confirma a exploração da vulnerabilidade e demonstra que a consulta pode ser manipulada por meio do parâmetro vulnerável.

Prova de Conceito

Com base na vulnerabilidade, foi desenvolvido um script em Python para realizar a exploração da falha de forma automatizada: https://github.com/hakaioffsec/CVE-2026-40083.

Correção

A equipe responsável pelo Cacti corrigiu essa vulnerabilidade na versão 1.2.31 por meio de alterações no processamento dos dados fornecidos pelo usuário. A correção incluiu o fortalecimento das validações de entrada, a revisão da lógica de desserialização e a sanitização dos arrays utilizados durante o processamento da requisição, eliminando o cenário que permitia a manipulação da consulta SQL por meio da entrada de usuários. Abaixo é apresentado o diff oficial contendo as principais alterações implementadas pelos desenvolvedores na camada responsável pelo gerenciamento da funcionalidade afetada.

- $selected_items = cacti_unserialize(stripslashes(gnrv('selected_graphs_array')));
- if (cacti_sizeof($selected_items)) {
-     db_execute('DELETE FROM snmpagent_managers WHERE id IN (' . implode(',', $selected_items) . ')');
- }
+ $selected_items = sanitize_unserialize_selected_items(gnrv('selected_graphs_array'));
+ if (cacti_sizeof($selected_items)) {
+     $sanitized_items = array_map('intval', $selected_items);
+     db_execute('DELETE FROM snmpagent_managers WHERE id IN (' . implode(',', $sanitized_items) . ')');
+ }

A correção implementa uma abordagem em camadas para mitigar a vulnerabilidade. Inicialmente, os dados desserializados passam pela rotina sanitize_unserialize_selected_items(), responsável por validar a estrutura esperada da entrada. Em seguida, todos os elementos do array são convertidos explicitamente para o tipo inteiro por meio da função array_map('intval', ...), garantindo que apenas valores numéricos sejam utilizados na construção da consulta SQL. Dessa forma, qualquer tentativa de inserir expressões SQL ou caracteres maliciosos é automaticamente convertida para um valor inteiro, impedindo que o conteúdo controlado pelo usuário altere a estrutura da instrução SQL e eliminando o vetor de exploração da vulnerabilidade.

Recomendações

É recomendado atualizar o Cacti para a versão 1.2.31 ou superior, que corrige a vulnerabilidade por meio da validação adequada dos dados desserializados e da conversão explícita dos identificadores para valores inteiros antes da construção da consulta SQL. Além disso, recomenda-se restringir o acesso às funcionalidades administrativas da aplicação apenas a usuários autorizados, aplicando o princípio do menor privilégio e reduzindo a superfície de ataque da plataforma.

Conclusão

A exploração dessa vulnerabilidade permite que um atacante autenticado com privilégios de agente no Cacti abuse de uma inconsistência no processamento de arrays para realizar a injeção de comandos SQL, possibilitando a extração completa do conteúdo do banco de dados da aplicação, incluindo hashes de credenciais, community strings SNMP e informações da infraestrutura monitorada.

Vamos praticar!

O Hacking Club é uma plataforma de treinamento voltada ao desenvolvimento prático de profissionais de cibersegurança. O desafio Cactus reproduz, em um ambiente controlado, um serviço vulnerável à falha abordada neste artigo, permitindo que pesquisadores e profissionais consolidem os conceitos apresentados por meio da exploração da vulnerabilidade em um laboratório seguro.

Referências

GitHub Security Advisory Oficial: GHSA-j9jv-6xjq-9hhj

Commit Vulnerável Legado: Linhas 756-766

Identificação do Reporte Central: CVE-2026-40083

PoC Desenvolvida pela Hakai Security: CVE-2026-40083