← voltar
CVE-2020-13671highsob ataqueCWE-434

CVE-2020-13671

51Vexday Risk Score

Priorize a correção. Ela está sob exploração confirmada pelo CISA.

ssvc Actcvss 8.8epss 4.3%
da publicação à arma
Publicada no NVD20 de nov.
CISA KEV+424d
probabilidade de exploração
4.3%top 10% das CVEs
exploração observada
simCISA + VulnCheck
Ação exigida pela CISAprazo federal: 2022-07-18

Apply updates per vendor instructions.

Resumo

Falha no núcleo do Drupal (CWE-434, Unrestricted Upload of File) faz com que nomes de arquivos enviados com extensões duplas — como arquivo.php.txt — não sejam sanitizados corretamente pelo mecanismo de "munging" (inserção de underscore antes da extensão perigosa). Dependendo da configuração do servidor web, isso pode fazer o arquivo ser servido com MIME type errado ou executado como PHP. Exige um usuário autenticado com permissão de upload, então não é uma falha pré-autenticação — mas está no catálogo KEV da CISA, confirmando exploração real.

Detalhamento técnico

O Drupal core tenta neutralizar uploads perigosos inserindo um underscore antes de extensões consideradas executáveis (ex: .php, .pl, .cgi), transformando arquivo.php.txt em arquivo.php_.txt. O SA-CORE-2020-012 documenta que essa lista de extensões perigosas estava incompleta e que a lógica de munging falhava para nomes com múltiplas extensões em certas combinações, permitindo que o arquivo final passasse pela sanitização sem o underscore protetor. O advisory do próprio Drupal lista explicitamente as extensões que devem ser tratadas como perigosas mesmo seguidas de outra extensão: phar, php, pl, py, cgi, asp, js, html, htm, phtml — deixando claro que a lista anterior no core não cobria todos esses casos.

O atacante controla o nome do arquivo enviado através de qualquer campo de upload do site (campo de arquivo em conteúdo, comentário, formulário, etc.) para o qual tenha permissão. O impacto final depende inteiramente da configuração de hospedagem: em servidores Apache (ou outros) configurados para executar arquivos com base em qualquer extensão reconhecida na cadeia do nome — não apenas a última — um arquivo como imagem.php.jpg pode ser interpretado e executado como PHP, mesmo que a extensão final pareça inofensiva. Em configurações que não fazem esse tipo de handling multi-extensão, o resultado prático se limita a servir o arquivo com Content-Type incorreto, o que ainda abre espaço para XSS refletido/armazenado se o navegador ou proxy tentar renderizar o conteúdo como HTML.

O vetor CVSS (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) reflete essa combinação: rede, baixa complexidade, mas privilégio baixo obrigatório (PR:L) — ou seja, é preciso estar autenticado com permissão de upload no site, não é uma falha anônima.

Como é explorada

Para explorar, o atacante precisa de uma conta autenticada com permissão de enviar arquivos em algum ponto do site — um campo de upload de conteúdo, um formulário de comentário com anexo, um módulo de webform, etc. Não há vetor pré-autenticação documentado pelo fornecedor. O atacante nomeia o arquivo com uma extensão dupla que escapa da lista de munging vigente na versão vulnerável (por exemplo, combinando uma extensão executável com uma extensão "segura" sem underscore entre elas) e o envia através do fluxo normal de upload do site.

O resultado depende da pilha de hospedagem: em ambientes onde o servidor web (tipicamente Apache com handlers configurados para múltiplas extensões, via mod_mime ou similar) decide executar o arquivo com base em qualquer extensão reconhecida na cadeia do nome, o arquivo enviado é processado como script PHP, dando execução de código no contexto do servidor web. Em ambientes sem esse comportamento, o impacto se reduz a servir o arquivo com Content-Type incorreto, o que pode viabilizar XSS armazenado se o conteúdo for renderizado como HTML pelo navegador.

O advisory classifica o risco como AC:Basic/A:User — ou seja, a complexidade de ataque é considerada básica pelo próprio Drupal, mas ainda exige uma conta de usuário com privilégio de upload. A presença no catálogo KEV da CISA (adicionada em 18/01/2022, com prazo de correção em 18/07/2022) confirma exploração ativa documentada, embora a CISA não detalhe campanhas específicas nem associação com ransomware.

Versões

Afetadas
Drupal core >=7.0 =8.0.0 =8.9.0 =9.0.0 <9.0.8 (versões 8.x anteriores a 8.8 são end-of-life e não recebem cobertura de segurança, segundo o fornecedor).
Corrigidas em
7.74, 8.8.11, 8.9.9, 9.0.8.

Como se proteger

A correção definitiva é atualizar para as versões corrigidas: Drupal 7.74, 8.8.11, 8.9.9 ou 9.0.8, dependendo do branch em uso. O próprio advisory recomenda adicionalmente auditar todos os arquivos já enviados ao site em busca de extensões maliciosas — procurando especificamente arquivos com mais de uma extensão (padrão nome.ext1.ext2) sem underscore entre elas, prestando atenção a phar, php, pl, py, cgi, asp, js, html, htm e phtml precedendo qualquer outra extensão.

Quem não pode atualizar imediatamente deve revisar a configuração do servidor web para impedir a execução de scripts com base em extensões intermediárias do nome do arquivo (evitar handlers que processam qualquer extensão reconhecida na cadeia, não apenas a última), e restringir ao mínimo quais papéis de usuário têm permissão de upload de arquivos no site — já que a falha exige essa permissão como pré-requisito. Branches do Drupal 8 anteriores a 8.8 são end-of-life e não recebem correção de segurança; sites nessas versões precisam migrar de branch, não apenas aplicar patch.

Não funciona como mitigação apenas bloquear extensões no campo de upload do formulário sem revisar a configuração de execução do servidor — o problema central é a interpretação do nome do arquivo pelo servidor web, não somente a validação no lado do Drupal.

Como detectar

Auditar o diretório de arquivos enviados por usuários buscando nomes com mais de uma extensão sem underscore separador, com atenção especial a arquivos cuja extensão intermediária seja phar, php, pl, py, cgi, asp, js, html, htm ou phtml seguida de outra extensão (padrão nome.php.txt, nome.phtml.jpg etc.) — essa é a assinatura textual recomendada pelo próprio advisory do Drupal. Em logs de servidor web, procurar requisições a esses arquivos que resultaram em execução de script (código de status e tempo de resposta atípicos para um recurso estático) ou em Content-Type divergente do esperado para a extensão final. Não há assinatura de rede confiável para o tráfego de exploração em si, já que o upload passa pelo fluxo normal e legítimo de formulário do site.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
Drupal core does not properly sanitize certain filenames on uploaded files, which can lead to files being interpreted as the incorrect extension and served as the wrong MIME type or executed as PHP for certain hosting configurations. This issue affects: Drupal Drupal Core 9.0 versions prior to 9.0.8, 8.9 versions prior to 8.9.9, 8.8 versions prior to 8.8.11, and 7 versions prior to 7.74.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
Drupal · Drupal Core