DrayTek Vigor2960/Vigor300B Web Management Interface apmcfgupload os command injection
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.
Resumo
Falha de OS command injection (CWE-78) no endpoint /cgi-bin/mainfunction.cgi/apmcfgupload da interface web de gerenciamento dos roteadores DrayTek Vigor2960 e Vigor300B (e, segundo o catálogo KEV da CISA, também Vigor3900). O parâmetro 'session' é usado para montar um comando de sistema sem sanitização, permitindo execução remota de comandos. O vetor CVSS 4.0 indica ataque de rede sem necessidade de autenticação nem interação do usuário (PR:N, UI:N), o que — combinado com PoC público e EPSS próximo do máximo (0,98) — explica a entrada no KEV da CISA com exploração confirmada.
Detalhamento técnico
O endpoint apmcfgupload faz parte da funcionalidade de gerenciamento de Access Points (AP Management) da interface web dos dispositivos Vigor. Ele recebe parâmetros via requisição HTTP, entre eles 'session', que é incorporado a uma chamada de shell/sistema no processamento do upload de configuração de AP sem escaping ou validação de metacaracteres (;, |, &, `, $()). Isso é um caso clássico de CWE-78 (OS Command Injection): a aplicação constrói uma string de comando concatenando entrada controlada pelo atacante.
O vetor CVSS 4.0 (AV:N/AC:L/AT:N/PR:N/UI:N) indica que a exploração não exige privilégio nem token de sessão válido — o próprio parâmetro chamado 'session' é o vetor de injeção, não uma credencial real. Os impactos VC:L/VI:L/VA:L (confidencialidade, integridade e disponibilidade baixas conforme métrica) subestimam o risco prático em firmware embarcado: comandos executados normalmente correm com privilégios elevados no sistema operacional do dispositivo (geralmente Linux embarcado com processos CGI rodando como root), o que na prática costuma significar controle total do equipamento.
O pesquisador que divulgou a falha publicamente (netsecfish) documentou o mecanismo de injeção via análise do binário/CGI do firmware. Não há confirmação pública detalhada, nas fontes disponíveis, do comando exato de sanitização que falha nem do fluxo interno completo do binário mainfunction.cgi além do que consta na descrição oficial e no relatório do pesquisador.
Como é explorada
A exploração ocorre via requisição HTTP direta à interface de gerenciamento web do dispositivo, contra o caminho /cgi-bin/mainfunction.cgi/apmcfgupload, manipulando o valor do parâmetro 'session' para inserir metacaracteres de shell que quebram o comando original e injetam um comando arbitrário. O CVSS aponta ausência de pré-requisito de privilégio (PR:N) e de interação do usuário (UI:N), tornando o ataque de baixa complexidade (AC:L) — características que tornaram a falha atraente para exploração automatizada em massa, refletidas no EPSS de 0,98 (altíssima probabilidade de exploração observada/esperada).
O único pré-requisito real é acessibilidade de rede à interface de gerenciamento web do equipamento — cenário comum em dispositivos com a interface exposta na WAN ou em redes onde o management não está segmentado. Existe PoC pública e template Nuclei, o que baixa ainda mais a barreira técnica: qualquer scanner de vulnerabilidades genérico consegue detectar e, com pouca adaptação, explorar o endpoint.
A CISA incluiu a CVE no catálogo KEV em 15/05/2025 com prazo de correção em 05/06/2025, confirmando exploração ativa no mundo real, embora não classifique a falha como usada em campanhas de ransomware conhecidas. O resultado da exploração bem-sucedida é execução de comando arbitrário no sistema operacional do roteador, viabilizando persistência, pivotagem para a rede interna, interceptação de tráfego ou inclusão do dispositivo em botnets — padrão recorrente em campanhas contra equipamentos DrayTek expostos à internet.
Versões
Como se proteger
O fornecedor recomenda atualizar para a versão de firmware 1.5.1.5, que corrige a falha nos três modelos citados nas release notes oficiais: Vigor2960, Vigor300B e Vigor3900. Não há indicação, nas fontes consultadas, de versões de firmware anteriores a 1.5.1.4 que tenham recebido backport da correção — a orientação do fornecedor é upgrade direto para 1.5.1.5.
Quando a atualização imediata não for viável, o controle compensatório real é restringir o acesso à interface de gerenciamento web: desabilitar administração via WAN/internet, colocar a interface atrás de VPN ou lista de controle de acesso (ACL) restrita a IPs de administração confiáveis, e — se a funcionalidade de AP Management não for usada — verificar se é possível desativá-la para reduzir a superfície exposta. Regras de WAF genéricas contra metacaracteres de shell em parâmetros de URL podem mitigar parcialmente, mas não substituem a correção, pois o padrão de injeção específico do parâmetro 'session' não é garantidamente coberto por assinaturas genéricas.
Não funciona como mitigação apenas trocar a senha de administração ou desabilitar contas padrão: como a exploração não depende de autenticação válida (PR:N no vetor CVSS), esses controles não bloqueiam o vetor de injeção em si.
Como detectar
Procurar em logs de acesso web do dispositivo (ou de proxies/firewalls na frente dele) por requisições ao caminho /cgi-bin/mainfunction.cgi/apmcfgupload contendo, no parâmetro 'session', metacaracteres de shell como ';', '|', '&', crase (`) ou '$(' — combinações típicas de tentativa de injeção de comando. A existência de template Nuclei público para esta CVE significa que varreduras automatizadas de terceiros (inclusive scanners maliciosos) provavelmente gerarão esse padrão de requisição, então presença isolada de uma tentativa não implica comprometimento bem-sucedido.
Não há, nas fontes disponíveis, indicação de assinatura de tráfego pós-exploração específica (por exemplo, callback conhecido ou payload padrão usado em campanhas). Monitorar conexões de saída anômalas originadas do próprio dispositivo DrayTek após uma requisição suspeita ao endpoint é um sinal indireto razoável, já que o impacto declarado é execução de comando no sistema operacional do equipamento.