CVE-2016-20017
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.
Resumo
Roteadores D-Link DSL-2750B com firmware anterior à 1.05 permitem injeção de comandos remota sem autenticação através do parâmetro cli do endpoint login.cgi. A falha foi divulgada publicamente em 2016, mas só recebeu CVE e entrou no catálogo KEV da CISA em 2022-2024, após anos de exploração documentada por botnets IoT. O impacto real depende muito da revisão de hardware específica — segundo o próprio fabricante, a maioria das SKUs vendidas nos EUA usa firmware diferente e não seria afetada.
Detalhamento técnico
O binário ayecli, localizado no firmware do dispositivo, processa comandos administrativos listados em /etc/ayecli/ayecli.cli e é invocado internamente como ayecli -c 'comando'. O endpoint login.cgi passa o valor do parâmetro cli diretamente para essa chamada sem sanitização, e usa o caractere $ como delimitador de substituição. Isso é uma falha clássica de neutralização incompleta de elementos especiais usados em comando de SO (CWE-77): o valor do parâmetro HTTP acaba dentro de uma string que é interpretada por um shell ou parser de comando.
Como a string é fechada com aspas simples antes de $, um atacante pode fechar a aspas antecipadamente, inserir ponto-e-vírgula seguido de um comando arbitrário, e reabrir as aspas para manter a sintaxe válida — efetivamente escapando do contexto original de argumento e executando qualquer comando que o binário/shell subjacente aceite, com os privilégios do processo (tipicamente root em firmware embarcado de roteador).
O vetor foi descoberto observando o fluxo de erro de login: uma tentativa de autenticação com credenciais incorretas já gera uma redireção contendo cli=access login encrypted $, expondo a estrutura do parâmetro e como ele é processado — o que tornou a descoberta e a exploração triviais, sem necessidade de engenharia reversa do firmware.
Não é necessária sessão, cookie ou token: a requisição é um GET simples ao login.cgi, o que explica o AC:L/PR:N/UI:N do vetor CVSS.
Como é explorada
Exploração é uma requisição HTTP GET não autenticada ao login.cgi com o parâmetro cli manipulado, sem necessidade de qualquer sessão prévia — basta acesso de rede à interface web de administração do dispositivo (por padrão, LAN, mas exposta à internet em configurações incorretas de port-forwarding/UPnP ou em dispositivos com management remoto habilitado). Não há complexidade de exploração relevante: existe módulo Metasploit público (rank 'Great') que automatiza checagem de versão via /ayefeaturesconvert.js e execução de comando via cmdstager (download de payload via wget), além de PoC manual publicada em 2016.
O resultado final é execução arbitrária de comando no dispositivo, geralmente com privilégios equivalentes a root no ambiente embarcado — suficiente para extrair credenciais de administrador, senha de Wi-Fi, reconfigurar DNS, instalar payload persistente ou incorporar o dispositivo a uma botnet.
A CVE está no catálogo KEV da CISA e a própria descrição oficial afirma exploração ativa 'in the wild' entre 2016 e 2022 — consistente com o padrão de uso desse tipo de falha em campanhas de botnet IoT que escaneiam a internet por endpoints de administração expostos. Não há registro nas fontes consultadas de uma campanha nomeada especificamente associada a esta CVE, apenas a confirmação de exploração ativa via inclusão no KEV.
Versões
Como se proteger
O fabricante afirma que a vulnerabilidade afeta apenas a revisão de hardware Dx do DSL-2750B (SKU não-EUA, marca D-Link), em firmware v1.04.xx e anteriores, corrigida na v1.05 (EU). Segundo o advisory SAP10088, as demais revisões e SKUs (T1/T2 Verizon & D-Link, DSL-2750B-SG T1, DSL-2750B-US T1, revisões Ax/Bx/Cx/Ex/Fx/Tx não-EUA) não seriam afetadas e não têm correção — 'fix not required'. Isso diverge da divulgação original de 2016, que descreveu a falha em firmware 1.01 a 1.03 sem especificar revisão de hardware, o que gera ambiguidade sobre exatamente quais unidades no campo estão realmente expostas. Antes de descartar o risco com base na tabela do fabricante, confirme a revisão de hardware impressa na etiqueta física do equipamento — não confie apenas no modelo comercial.
Se a atualização de firmware não for possível (produto já em fim de vida, sem suporte do provedor de serviço que o distribuiu), a mitigação real é isolar a interface de administração: desabilitar gerenciamento remoto/WAN, bloquear a porta HTTP de administração no firewall, remover port-forwarding para o dispositivo e segmentar a rede local para impedir acesso de hosts não confiáveis ao login.cgi. Trocar apenas a senha de admin não mitiga nada, porque a falha é explorada antes ou independentemente de autenticação bem-sucedida (o vetor original é acionado até por login com credenciais erradas).
Dado o histórico de exploração ativa e o fato de o produto estar em fim de vida em vários canais de distribuição, a CISA recomenda aplicar a mitigação do fornecedor ou descontinuar o uso do dispositivo quando não houver correção disponível.
Como detectar
Em logs de servidor web do dispositivo ou de proxy/IDS na frente dele, procure requisições GET a /login.cgi com o parâmetro cli contendo aspas simples, ponto-e-vírgula ou outros metacaracteres de shell fora do padrão esperado de comandos legítimos (ex.: sequências como show';...;' ou uso de $ combinado com aspas). Requisições anteriores a /ayefeaturesconvert.js seguidas de acesso a login.cgi são um indicador de reconhecimento automatizado, padrão usado pelo módulo Metasploit público para checar a versão do firmware antes de explorar.
Como o vetor pode ser acionado até por tentativas de login com credenciais erradas (o parâmetro cli aparece na própria resposta de erro padrão), não há uma assinatura única e confiável que distinga uso normal de exploração — a análise precisa focar no conteúdo do parâmetro cli, não apenas na presença da requisição a login.cgi.