CVE-2018-6530
Patch now. It under exploitation confirmed by CISA and has a working public exploit.
The vendor D-Link published an advisory stating the fix under CVE-2018-20114 properly patches KEV entry CVE-2018-6530. If the device is still supported, apply updates per vendor instructions. If the affected device has since entered its end-of-life, it should be disconnected if still in use.
Summary
Injeção de comando via soap.cgi em quatro linhas de roteadores D-Link (DIR-880L, DIR-868L, DIR-865L, DIR-860L), permitindo execução de comandos arbitrários no sistema operacional do dispositivo sem autenticação. É uma das falhas de IoT mais exploradas em campanhas de botnet — está no catálogo KEV da CISA e tem exploração ativa confirmada, apesar de a descrição oficial do fornecedor não detalhar mecanismo nem impacto.
Technical detail
A falha (CWE-78) está na função soapcgi_main, dentro do binário /htdocs/cgibin que implementa o endpoint soap.cgi. O código lê a variável de ambiente REQUEST_URI, verifica se a query string começa com "?service=" e, se sim, trata tudo que vem depois desse prefixo como o parâmetro controlType — sem qualquer sanitização de caracteres.
Esse valor é então usado dentro de um sprintf() para montar um caminho de arquivo ("/var/run/%s_%d.sh"), que é escrito em disco com um comando de auto-remoção e, na sequência, passado diretamente para system(). Como controlType é concatenado sem escaping na string executada por system() — que por sua vez invoca um shell —, qualquer caractere de metacaractere de shell (`;`, `|`, `` ` ``, `$()`, `&&`) presente no parâmetro service é interpretado pelo shell e executado como comando adicional.
O atacante controla integralmente o valor do parâmetro service na query string da requisição a soap.cgi. Segundo a análise de Kaixiang Zhang (pesquisador que reportou a falha), o corpo XML da requisição SOAP e o cabeçalho SOAPAction não precisam ser válidos — o parser aceita qualquer conteúdo, inclusive inválido, desde que o parâmetro service esteja presente na URL. Isso reduz o pré-requisito de exploração a uma única requisição HTTP bem formada na camada de transporte.
O CVSS oficial (AV:N) trata a falha como explorável remotamente pela rede, mas o próprio pesquisador classifica a vulnerabilidade como "LAN - revA/B" em sua tabela de resumo, e o PoC publicado é direcionado a um IP privado (192.168.100.1). Isso sugere que a exposição real depende de o serviço de gerenciamento/SOAP estar acessível — via LAN por padrão, ou via WAN se o dispositivo tiver administração remota habilitada, cenário comum em roteadores mal configurados ou expostos por UPnP/port-forwarding automático.
How it’s exploited
O vetor é uma requisição HTTP (GET ou POST) para /soap.cgi contendo `?service=` seguido do payload de injeção na própria query string, sem necessidade de autenticação, sessão ou cookie válido. O PoC publicado demonstra encadear múltiplos comandos via `;` para liberar todas as políticas de iptables (INPUT/FORWARD/OUTPUT/PREROUTING/POSTROUTING para ACCEPT) e depois iniciar um `telnetd` em porta alta (9999 no exemplo), entregando um shell root não autenticado acessível diretamente por telnet após a exploração.
A complexidade de exploração é baixa: não há necessidade de bypass de autenticação, CSRF token, ou conhecimento de estado interno do dispositivo — apenas o processo do serviço web precisa estar acessível na interface de rede alcançável pelo atacante. Como o binário cgibin normalmente roda com privilégios elevados (frequentemente root) em firmware embarcado, o impacto final é controle total do dispositivo: leitura/gravação de configuração, pivotagem para a rede interna, e persistência via reinício de serviços ou modificação de firmware.
O ingresso no catálogo KEV da CISA em 2022 confirma exploração ativa in-the-wild, padrão consistente com o histórico de CVEs de soap.cgi da D-Link sendo incorporadas a botnets de IoT (variantes Mirai e derivados) que escaneiam a internet em massa por dispositivos com essa interface exposta.
Versions
How to protect
O fornecedor publicou notas de patch de firmware específicas por modelo (DIR-880L REVA, DIR-865L REVA, DIR-868L REVA, DIR-860L REVA), referenciadas nos avisos oficiais em FTP da D-Link. A CISA, no entanto, aponta uma nuance importante: o próprio fornecedor declara que a correção definitiva para esta entrada do KEV (CVE-2018-6530) foi entregue sob o identificador CVE-2018-20114, ou seja, o patch relevante pode estar documentado sob esse outro CVE, não apenas nos boletins vinculados diretamente a CVE-2018-6530. Vale checar o SAP10105 (advisory da D-Link) para confirmar qual build de firmware corrige o problema no seu modelo/revisão exata.
Se a atualização de firmware não for viável — cenário comum, já que DIR-860L, DIR-865L, DIR-868L e DIR-880L estão em fim de vida ou próximos disso —, a orientação da própria CISA é desconectar o dispositivo da rede caso ele já tenha atingido EOL. Como paliativo técnico caso o dispositivo precise permanecer em uso: desabilitar acesso remoto/administração via WAN, restringir acesso à interface de gerenciamento (porta HTTP/HTTPS do soap.cgi) apenas a hosts confiáveis na LAN, e bloquear a porta de gerenciamento no perímetro caso UPnP ou port-forwarding esteja habilitado.
Não funciona como mitigação: apenas trocar a senha de administração ou desabilitar UPnP não resolve, pois o PoC demonstrado não depende de sessão autenticada nem de UPnP — a falha está no parser HTTP do binário cgibin em si. Qualquer controle que não impeça o acesso de rede ao endpoint /soap.cgi não neutraliza o vetor.
How to detect
Em logs de servidor web/proxy, procurar requisições para /soap.cgi com o parâmetro `service=` contendo metacaracteres de shell (`;`, `|`, `` ` ``, `$(`, `&&`) ou strings como `iptables`, `telnetd`, `busybox` no valor do parâmetro — padrão do PoC público e de variantes usadas por botnets de IoT. Também é sinal de alerta qualquer POST para soap.cgi com corpo XML malformado ou cabeçalho SOAPAction inválido/genérico, já que a exploração não exige XML ou SOAPAction válidos.
Não há um indicador de comprometimento pós-exploração universal documentado além do que o próprio PoC evidencia (processos telnetd em portas não padrão, regras de firewall zeradas). Como o binário cgibin normalmente não gera log de aplicação detalhado em firmware embarcado, a detecção depende primariamente de captura de tráfego de rede ou IDS/WAF na frente do dispositivo — sinal fraco ou inexistente para quem só depende de logs do próprio roteador.