CVE-2016-10174
Patch now. It under exploitation confirmed by CISA and has a working public exploit.
Apply updates per vendor instructions.
Summary
CVE-2016-10174 é um buffer overflow stack-based no parâmetro hidden_lang_avi do endpoint /apply.cgi?/lang_check.html do roteador NETGEAR WNR2000v5, que faz parte de uma cadeia de três falhas descobertas por Pedro Ribeiro (Agile Information Security) em dezembro de 2016. Isolada, a falha já permite RCE não autenticado; combinada com um bypass de controle de acesso (apply_noauth.cgi) e um gerador de token previsível, vira uma cadeia completa de takeover do dispositivo sem credenciais. Está no catálogo KEV da CISA por exploração confirmada, tem PoC pública e módulo Metasploit — mas o impacto real está concentrado em roteadores domésticos legados, muitos já fora de suporte.
Technical detail
O servidor web embarcado do WNR2000 (uhttpd) não implementa apply.cgi como um script CGI de verdade: é uma string mágica que o binário do uhttpd reconhece e roteia internamente para funções administrativas (trocar configuração de WLAN, reiniciar, restaurar padrão de fábrica etc.). Uma dessas rotas, invocada via /apply.cgi?/lang_check.html (ou sua variante não autenticada /apply_noauth.cgi?/lang_check.html), processa o parâmetro hidden_lang_avi copiando seu valor para um buffer de tamanho fixo na pilha sem validar o tamanho da entrada — um overflow clássico de pilha (CWE-119/CWE-121, conforme classificado pela CISA). Como o firmware roda em MIPS embarcado sem as mitigações modernas de userland (ASLR/NX consistentes) típicas de Linux desktop, sobrescrever o buffer permite controlar o fluxo de execução e, em última instância, executar código arbitrário no contexto do processo do servidor web (tipicamente root em firmware de roteador SOHO).
O atacante controla integralmente o conteúdo e, dentro do limite do buffer, o tamanho da string enviada em hidden_lang_avi. Não há sanitização de tipo, comprimento ou caracteres nesse parâmetro antes da cópia — a falha é de implementação C de baixo nível, não de lógica de autorização (essa é uma vulnerabilidade separada, tratada pelo pesquisador na mesma cadeia).
How it’s exploited
A rota apply.cgi normalmente exige autenticação de administrador via HTTP Basic Auth. O pulo do gato descoberto pelo pesquisador é que o mesmo binário do uhttpd também responde a apply_noauth.cgi, que executa as mesmas funções sem exigir credenciais — incluindo lang_check.html, o endpoint vulnerável ao overflow. Algumas dessas funções administrativas são protegidas por um valor de "timestamp" enviado na URL, funcionando como um anti-CSRF token gerado por uma função de PRNG (baseada em random()/srandom() do libc) semeada de forma previsível; o pesquisador demonstrou que esse token pode ser identificado em menos de 1000 tentativas sem conhecimento prévio do dispositivo.
Na prática, a exploração completa e não autenticada encadeia: (1) requisição não autenticada a apply_noauth.cgi para acessar a rota administrativa sem login; (2) previsão/força bruta do timestamp anti-CSRF explorando a debilidade do PRNG; (3) envio do payload de overflow no parâmetro hidden_lang_avi para obter execução de código. Por padrão o gerenciamento remoto (WAN) está desabilitado no WNR2000v5, então a exploração via internet só é possível se o administrador ativou essa opção — quando isso ocorre, o dispositivo fica exposto e pesquisadores encontraram mais de 10.000 unidades com gerenciamento remoto ligado no Shodan no momento da divulgação. Sem gerenciamento remoto, o ataque é restrito à LAN, o que ainda é relevante em cenários de rede comprometida, IoT malicioso na mesma rede, ou ataques CSRF/drive-by via navegador de uma máquina interna. A presença no catálogo KEV da CISA confirma exploração ativa registrada, embora as fontes disponíveis não detalhem quem ou em que campanha.
Versions
How to protect
O fornecedor lançou atualizações de firmware de produção para WNR2000v3, WNR2000v4 e WNR2000v5 (advisory PSV-2016-0255, atualizado em 26/01/2017 com os links de firmware definitivos). As fontes consultadas não trazem o número exato da versão de firmware corrigida — o usuário deve baixar a versão mais recente disponível no Download Center da NETGEAR para o modelo específico e confirmar pelas release notes que ela cobre PSV-2016-0255 / CVE-2016-10174. A NETGEAR afirma que, a partir de dezembro de 2017, todos os modelos listados no advisory já tinham correção disponível.
Como controle compensatório quando a atualização não é possível imediatamente: desabilitar o gerenciamento remoto (WAN) elimina o vetor via internet, mas não protege contra exploração dentro da própria LAN — não é mitigação completa, apenas reduz a superfície. Isolar o roteador de dispositivos não confiáveis na rede interna (segmentação, VLAN de gerenciamento) reduz o risco residual. Trocar a senha padrão de administrador não mitiga esta CVE específica, já que a exploração do buffer overflow via apply_noauth.cgi não depende de autenticação — esse é o mito a descartar aqui: a falha contorna justamente o controle de credenciais.
How to detect
Em logs de servidor web/proxy, procurar requisições a /apply.cgi?/lang_check.html ou /apply_noauth.cgi?/lang_check.html com o parâmetro hidden_lang_avi contendo valor anormalmente longo ou com bytes não imprimíveis — indicativo de tentativa de overflow. Um padrão anterior no mesmo fluxo de ataque é volume elevado de requisições repetidas a endpoints que retornam o parâmetro "timestamp=" (como /lang_check.html ou /PWD_password.htm), sugerindo tentativa de prever o token do PRNG por força bruta, e requisições a /BRS_netgear_success.html, usada no reconhecimento para vazar o número de série do dispositivo. Não há assinatura oficial de IDS/IPS citada nas fontes consultadas; a ausência de log administrativo detalhado nesses roteadores SOHO também limita a capacidade forense pós-incidente.