CVE-2022-46169
Injeção de Comandos Não Autenticada
- Publicado
- 5 de dez. de 2022
- Atualizado
- 21 de out. de 2025
- Atribuindo CNA
- GitHub_M
- Evidência observada
- 16 de fev. de 2023
CVSS primário
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HAlto · próximos 30 dias
- Percentil
- 100,0%
- Data do modelo
- 21 de set. de 2026
EPSS é uma estimativa estatística, não uma certeza ou uma medida de impacto. Combine-o com CVSS, status KEV, exposição e seu ambiente.
CISA conhecido explorado
Este CVE aparece no catálogo CISA Known Exploited Vulnerabilities.
Resumo
Cacti é uma plataforma de código aberto que fornece uma estrutura robusta e extensível de monitoramento operacional e gerenciamento de falhas para 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 executando Cacti, se uma fonte de dados específica foi selecionada para qualquer dispositivo monitorado. A vulnerabilidade reside no arquivo `remote_agent.php`. Este arquivo pode ser acessado sem autenticação. Esta função recupera o endereço IP do cliente via `get_client_addr` e resolve esse endereço IP para o hostname correspondente via `gethostbyaddr`. Depois disso, é verificado se existe uma entrada na tabela `poller`, onde o hostname corresponde ao hostname 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 várias variáveis do `$_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 há uma entrada padrão na tabela `poller` com o hostname do servidor que executa o Cacti, um atacante pode contornar a autenticação, por exemplo, fornecendo o cabeçalho `Forwarded-For: <TARGETIP>`. 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 hostname do servidor, que passará na verificação de hostname do `poller` por causa da entrada padrão. Depois que a autorização do arquivo `remote_agent.php` é contornada, um atacante pode acionar 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 controlado pelo atacante `$poller_id` é 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. Por exemplo, ao fornecer `poller_id=;id`, o comando `id` é executado. Para atingir a chamada vulnerável, o atacante deve fornecer um `host_id` e um `local_data_id`, onde a `action` do `poller_item` correspondente está definida como `POLLER_ACTION_SCRIPT_PHP`. Ambos esses 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 action `POLLER_ACTION_SCRIPT_PHP`. Isso é muito provável em uma instância de produção porque essa action é 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 `action` `POLLER_ACTION_SCRIPT_PHP` (`2`) estiver configurado. A bypass da autorização deve ser evitada ao não permitir 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 levando em conta as variáveis `HTTP_...` do `$_SERVER`. Se essas variáveis devem ser mantidas por motivos de compatibilidade, deve-se pelo menos evitar a falsificação do endereço IP do servidor que executa o Cacti. Essa vulnerabilidade foi corrigida nos ramos de lançamento 1.2.x e 1.3.x, sendo `1.2.23` a primeira versão a conter a correção.
Uso responsável
Use informações de vulnerabilidade apenas em sistemas que você possui ou está autorizado a testar. O Kitploit vincula-se a metadados de pesquisa pública e não armazena código de exploração ou cargas maliciosas.