CVE-2021-20038
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply updates per vendor instructions.
Resumo
Buffer overflow baseado em pilha no servidor httpd (Apache modificado) dos appliances SonicWall SMA 100, explorável sem autenticação via módulo mod_cgi. Permite execução de código remoto como usuário 'nobody' e está confirmado em exploração ativa — consta no catálogo KEV da CISA e tem exploit público (badblood, da Rapid7). O CVSS 9.8 é justificado: não exige autenticação, não exige configuração especial, só acesso de rede à interface HTTPS do appliance.
Detalhamento técnico
A falha (CWE-121) está numa versão customizada da função cgi_build_command dentro de mod_cgi.so, carregada pelo httpd que roda em /usr/src/EasyAccess/bin/httpd nos appliances SMA 100. Essa função monta as variáveis de ambiente do CGI concatenando-as com strcat em um buffer alocado na pilha, dentro da função cgi_handler, sem qualquer verificação de limite. O buffer declarado tem 202 bytes, mas a profundidade real até corromper dados críticos da pilha é maior, pois há outras variáveis empilhadas depois dele.
O atacante controla o conteúdo da QUERY_STRING enviada na requisição HTTP — esse valor acaba entrando como uma das variáveis de ambiente concatenadas. Uma QUERY_STRING longa (a Rapid7 demonstrou o crash com cerca de 1798 caracteres 'A') sobrescreve a pilha e, em tese, permite redirecionar o fluxo de execução para um endereço controlado pelo atacante.
O que normalmente dificultaria a exploração — ASLR — está mitigado por três fatores no próprio ambiente: o endereço base do processo httpd não é randomizado; o processo é reiniciado automaticamente após cada crash, dando ao atacante múltiplas tentativas para calibrar endereços; e o sistema é 32 bits, com entropia de ASLR baixa o suficiente para tornar viável adivinhar endereços de bibliotecas por força bruta. Isso torna um exploit confiável plausível, como demonstrado publicamente.
O processo httpd roda como usuário 'nobody', então a execução inicial de código não é root direto. A Rapid7 notou que o payload de exploração testado conseguia elevar para root via su usando uma senha fixa ('password') presente no sistema — ou seja, o salto de 'nobody' para root, embora seja um passo adicional, é trivial no firmware testado.
Como é explorada
O vetor é uma única requisição HTTP(S) para a interface do appliance (porta 443), sem necessidade de autenticação, sessão válida ou configuração não padrão — basta que a interface de gerenciamento/VPN esteja acessível na rede. O atacante envia uma QUERY_STRING excessivamente longa para o endpoint CGI vulnerável; o exemplo de PoC público demonstra o crash, mas transformar o crash em execução de código confiável exige calibrar o endereço de retorno na pilha, explorando a previsibilidade de endereços descrita acima (endereço base fixo do httpd + reinício automático após crash + baixa entropia ASLR em ambiente 32 bits).
Existe exploit funcional publicado (badblood, de Jake Baines/Rapid7) que automatiza essa calibração de endereços por tentativa e erro, abrindo uma shell reversa/bind shell como 'nobody' ao final. A própria ferramenta reconhece o banner HTTP 'Server: SonicWall SSL-VPN Web Server' como identificador confiável de exposição — a Rapid7/Baines estimaram cerca de 22 mil instâncias expostas na internet em janeiro de 2022.
O CVE está no catálogo KEV da CISA, confirmando exploração ativa observada, não apenas teórica. Dado o histórico de campanhas contra appliances de acesso remoto (VPN/SSL-VPN edge devices), esse tipo de alvo tende a atrair tanto pesquisadores quanto grupos de ransomware que buscam ponto de entrada inicial em redes corporativas.
Versões
Como se proteger
A correção veio via atualização de firmware anunciada pelo fornecedor no advisory SNWLID-2021-0026, com patches liberados a clientes e parceiros de canal em 7 de dezembro de 2021. As fontes disponíveis não especificam o número exato da versão de firmware corrigida (apenas confirmam que a falha afeta 10.2.0.8-37sv, 10.2.1.1-19sv, 10.2.1.2-24sv e versões anteriores) — consulte o advisory oficial da SonicWall para o número exato de build corrigido antes de considerar o ambiente remediado.
Se a atualização imediata não for possível, o controle compensatório real é restringir o acesso de rede à interface de gerenciamento/SSL-VPN do SMA 100 apenas a origens confiáveis (VPN de gestão, allowlist de IP), já que a falha não exige autenticação — qualquer host que alcance a porta 443 do appliance é um vetor. Colocar a interface atrás de um WAF que limite o tamanho de QUERY_STRING pode reduzir a superfície, mas não é confirmado como mitigação suficiente pelo fornecedor nem pelos pesquisadores, apenas dificulta o payload padrão.
O CISA KEV determinou prazo de correção até 2022-02-11 (adicionado em 2022-01-28) para agências federais dos EUA — um bom proxy de urgência para qualquer organização. Não existe mitigação de configuração local documentada nas fontes analisadas (não há flag para desabilitar mod_cgi sem quebrar funcionalidade do appliance); a única ação com efetividade comprovada é a atualização de firmware.
Como detectar
O banner HTTP 'Server: SonicWall SSL-VPN Web Server' identifica instâncias expostas (útil para inventário/exposição, não para detectar tentativa de ataque). Em logs de acesso web, procure requisições com QUERY_STRING anormalmente longa (centenas a milhares de caracteres, frequentemente repetitivos como sequências de 'A' em ferramentas de teste/PoC) direcionadas ao endpoint CGI do appliance. Reinícios inesperados e repetidos do processo httpd no appliance (sem correlação com atualização ou manutenção) são indício de tentativas de calibração de endereço via crash controlado, comportamento característico do exploit público. Não há assinatura única e confiável documentada pelas fontes consultadas além desses indicadores indiretos — ausência de log de exploração bem-sucedida não garante que o appliance não foi comprometido, dado que o exploit busca abrir shell reversa/bind shell diretamente.