Voltar para o Labs
Alerta de Segurança

CVE-2022-46169

Sobre

O Cacti é uma plataforma de código aberto que fornece uma estrutura robusta e extensível de monitoramento operacional e gerenciamento de falhas para os usuários. Nas versões afetadas, uma vulnerabilidade de injeção de comandos permite que um usuário não autenticado execute código arbitrário em um servidor que executa o Cacti, se uma fonte de dados específica tiver sido selecionada para qualquer dispositivo monitorado. A vulnerabilidade reside no arquivo `remote_agent.php`. Este arquivo pode ser acessado sem autenticação. Essa função recupera o endereço IP do cliente por meio de `get_client_addr` e resolve esse endereço IP para o nome de host correspondente por meio de `gethostbyaddr`. Depois disso, verifica-se que existe uma entrada na tabela `poller` cujo nome de host corresponde ao nome de host resolvido. Se tal entrada for encontrada, a função retorna `true` e o cliente é autorizado. Essa autorização pode ser contornada devido à implementação da função `get_client_addr`. A função é definida no arquivo `lib/functions.php` e verifica diversas variáveis `$_SERVER` para determinar o endereço IP do cliente. As variáveis que começam com `HTTP_` podem ser definidas arbitrariamente por um atacante. Como existe uma entrada padrão na tabela `poller` com o nome de host do servidor que executa o Cacti, um atacante pode contornar a autenticação, por exemplo, fornecendo o cabeçalho `Forwarded-For: `. Dessa forma, a função `get_client_addr` retorna o endereço IP do servidor que executa o Cacti. A chamada seguinte a `gethostbyaddr` resolverá esse endereço IP para o nome de host do servidor, que passará na verificação do nome de host do `poller` por causa da entrada padrão. Após o contorno da autorização do arquivo `remote_agent.php`, um atacante pode disparar diferentes ações. Uma dessas ações é chamada `polldata`. A função chamada `poll_for_data` recupera alguns parâmetros de requisição e carrega as entradas `poller_item` correspondentes do banco de dados. Se a `action` de um `poller_item` for igual a `POLLER_ACTION_SCRIPT_PHP`, a função `proc_open` é usada para executar um script PHP. O parâmetro `$poller_id`, controlado pelo atacante, é recuperado por meio da função `get_nfilter_request_var`, que permite strings arbitrárias. Essa variável é posteriormente inserida na string passada para `proc_open`, o que leva a uma vulnerabilidade de injeção de comandos. Ao fornecer, por exemplo, `poller_id=;id`, o comando `id` é executado. Para alcançar a chamada vulnerável, o atacante deve fornecer um `host_id` e um `local_data_id`, onde a `action` do `poller_item` correspondente esteja definida como `POLLER_ACTION_SCRIPT_PHP`. Ambos os ids (`host_id` e `local_data_id`) podem ser facilmente descobertos por força bruta. O único requisito é que exista um `poller_item` com uma ação `POLLER_ACTION_SCRIPT_PHP`. Isso é muito provável em uma instância de produção porque essa ação é adicionada por alguns templates predefinidos como `Device - Uptime` ou `Device - Polling Time`. Essa vulnerabilidade de injeção de comandos permite que um usuário não autenticado execute comandos arbitrários se um `poller_item` com o tipo de `action` `POLLER_ACTION_SCRIPT_PHP` (`2`) estiver configurado. O contorno de autorização deveria ser evitado não permitindo que um atacante faça `get_client_addr` (arquivo `lib/functions.php`) retornar um endereço IP arbitrário. Isso poderia ser feito não honrando as variáveis `$_SERVER` `HTTP_...`. Se essas precisarem ser mantidas por razões de compatibilidade, deveria ao menos ser impedido falsificar o endereço IP do servidor que executa o Cacti. Essa vulnerabilidade foi corrigida tanto no ramo de lançamento 1.2.x quanto no 1.3.x, sendo a `1.2.23` a primeira versão a conter a correção.
Fraqueza (CWE):CWE-74CWE-78CWE-863

Análise do analista Rainforest

O `remote_agent.php` do Cacti é acessível sem autenticação, e sua verificação de acesso pode ser derrotada. O script identifica o chamador resolvendo o IP do cliente para um nome de host e comparando-o com a tabela `poller`, mas deriva esse IP de cabeçalhos com prefixo `HTTP_` controláveis pelo atacante, como o `X-Forwarded-For`. Como uma entrada padrão do poller carrega o próprio nome de host do servidor, falsificar o cabeçalho com o endereço do servidor passa na verificação. Uma vez autorizado, a ação `polldata` alcança `proc_open` com um `poller_id` fornecido pelo atacante, de modo que injetar metacaracteres de shell como `;id` executa comandos arbitrários com o usuário do servidor web.

O Cacti é uma plataforma de monitoramento de rede, portanto seus servidores são conectados à infraestrutura por concepção, contendo credenciais SNMP e inventários de dispositivos que tornam uma instância comprometida um forte ponto de pivô para o restante do ambiente. O pré-requisito — um poller item com uma ação de script PHP — é atendido por templates padrão comuns, portanto a maioria das instâncias de produção é explorável. Isto foi amplamente varrido e explorado após a divulgação. Atualize para a 1.2.23 ou posterior, mantenha o Cacti fora da internet pública e revise os dados do poller e de log em busca de execução inesperada de comandos.

Referências

CVEs Relacionadas

Perguntas frequentes

O que é CVE-2022-46169?

O Cacti é uma plataforma de código aberto que fornece uma estrutura robusta e extensível de monitoramento operacional e gerenciamento de falhas para os usuários.

Qual a gravidade de CVE-2022-46169?

CVE-2022-46169 tem pontuação base CVSS 3.1 de 9.8, classificada como critical. No Rainforest Risk Index — que pondera a gravidade junto com a facilidade de alcançar a falha e a amplitude do impacto — a nota é 99 de 100, na faixa crítico.

Como CVE-2022-46169 é explorada?

Segundo o vetor CVSS (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H): vetor de ataque Rede, complexidade de ataque Baixa, privilégios necessários Nenhum, interação do usuário Nenhuma. Impacto em confidencialidade Alto, integridade Alto e disponibilidade Alto.

Quais produtos são afetados por CVE-2022-46169?

Os avisos públicos listam como afetados: cacti. Consulte as referências desta página para as versões exatas confirmadas por cada fornecedor.

Como corrigir CVE-2022-46169?

Aplique a correção publicada pelo fornecedor — as referências desta página levam aos avisos e patches originais. Quando não for possível corrigir de imediato, reduza a exposição do componente afetado e monitore tentativas de exploração. Clientes Rainforest recebem esta vulnerabilidade correlacionada aos próprios ativos e priorizada pela exposição real, não apenas pela nota.

Potencialize sua estratégia de segurança com a Rainforest

Descubra vulnerabilidades cedo, priorize ameaças críticas e proteja o que realmente importa. A Rainforest simplifica suas operações de segurança, economizando tempo e reduzindo custos, para você focar no que move o seu negócio.

Compartilhar:LinkedInX Email