CVE-2020-25213
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply updates per vendor instructions.
Resumo
O plugin File Manager (wp-file-manager) para WordPress, com mais de 700 mil instalações ativas, distribuía um arquivo de exemplo do framework elFinder renomeado para .php dentro de sua própria pasta de plugin, expondo um conector que processa comandos do elFinder sem autenticação. Isso permite que qualquer visitante anônimo do site envie ou grave arquivos PHP no servidor, resultando em execução remota de código completa. A falha foi explorada em massa por botnets antes mesmo de o fornecedor lançar a correção, o que a coloca no catálogo KEV da CISA.
Detalhamento técnico
O elFinder é um framework de gerenciador de arquivos web usado como dependência pelo wp-file-manager. Ele distribui, como parte de seu pacote de exemplos, um arquivo `connector.minimal.php` que instancia `elFinderConnector` e chama `$connector->run()` sem qualquer camada de autenticação — esse arquivo é documentado no projeto elFinder como exemplo de referência, não para uso em produção. O wp-file-manager simplesmente copiava esse arquivo para `lib/php/connector.minimal.php` dentro da própria estrutura do plugin, tornando-o acessível via HTTP a qualquer usuário, autenticado ou não.
Dentro de `run()`, o código lê `$_GET`/`$_POST` (ou o corpo bruto da requisição, para contornar limites de `max_input_vars`) e monta o array `$src`, do qual extrai `$src['cmd']` e passa como argumento para `elFinder::exec()`, definido em `lib/php/elFinder.class.php`. Esse método aceita uma lista fixa de comandos legítimos do protocolo elFinder — entre eles `upload`, `mkfile` e `put` — desde que o atacante forneça os parâmetros de 'volume alvo' esperados por cada comando.
O problema de fundo é CWE-434 (upload irrestrito de arquivo com tipo perigoso, segundo classificação da CISA): não há validação de que o volume de destino ou a extensão do arquivo gravado seja segura para execução PHP. O atacante controla o conteúdo do arquivo (via `upload` multipart ou via `mkfile`+`put` para escrever conteúdo arbitrário em um arquivo novo) e o nome/extensão do arquivo resultante, permitindo depositar um webshell diretamente em `wp-content/plugins/wp-file-manager/lib/files/`, pasta que fica dentro da document root do WordPress e é servida diretamente pelo Apache/PHP-FPM.
Como é explorada
O vetor é uma requisição HTTP (GET ou POST) não autenticada diretamente ao endpoint `wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php`, presente em qualquer instalação do plugin nas versões vulneráveis, sem necessidade de login, permissão especial ou configuração não padrão — basta o plugin estar instalado e ativo. Não há complexidade de exploração relevante: o comando elFinder `upload` (envio multipart de arquivo) ou a combinação `mkfile`+`put` (criação de arquivo seguida de gravação de conteúdo) bastam para depositar um arquivo PHP dentro de `lib/files/`, que em seguida é acessado via outra requisição HTTP para disparar a execução.
A exploração massiva ocorreu em agosto e setembro de 2020, antes da publicação da correção 6.9: pesquisadores da Seravo detectaram tráfego automatizado (user-agent `python-requests`) fazendo POST ao conector minimal em sites comprometidos, indicando varredura e exploração por botnet em escala, não ataques direcionados. Um PoC público em Python (repositório w4fz5uck5/wp-file-manager-0day) automatiza esse envio, e a vulnerabilidade tem módulo Metasploit e template Nuclei, o que a torna trivial de varrer e explorar mesmo por atacantes com pouca sofisticação.
O resultado final é execução arbitrária de código PHP no contexto do processo web, equivalente a comprometimento total do site — leitura/escrita de qualquer arquivo acessível ao usuário do webserver, acesso ao banco de dados via `wp-config.php`, e possibilidade de usar o site como pivô para novos ataques. É esse cenário — RCE não autenticado e trivial — que justifica o CVSS 10.0.
Versões
Como se proteger
A correção do fornecedor é a versão 6.9 do wp-file-manager, lançada no mesmo dia em que a Seravo reportou a falha (início de setembro de 2020); essa versão remove ou neutraliza o conector de exemplo do elFinder exposto publicamente. Atualizar para 6.9 ou posterior resolve o problema — segundo a Seravo, tanto a versão free quanto a Pro do plugin estavam afetadas.
Se a atualização imediata não for possível, o paliativo eficaz é remover manualmente o plugin do servidor (excluir os arquivos, não apenas desativá-lo pelo painel do WordPress) — a Seravo enfatiza explicitamente que desativar o plugin pela interface administrativa NÃO bloqueia o acesso direto ao arquivo `connector.minimal.php` via HTTP, já que o arquivo permanece no disco e é servido independentemente do estado 'ativo/inativo' do plugin no banco de dados. Bloquear via WAF ou regra de servidor o acesso direto a `wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php` funciona como mitigação de rede enquanto a atualização não é aplicada, mas deve ser tratado como paliativo temporário, não substituto da correção.
Como o KEV da CISA lista esta CVE com exploração confirmada, qualquer instalação com versão anterior à 6.9 deve ser tratada como potencialmente já comprometida — recomenda-se, além de atualizar, buscar webshells já depositados em `lib/files/` e revisar logs de acesso ao conector antes de considerar o incidente encerrado.
Como detectar
O indicador mais direto é requisição HTTP (GET/POST) diretamente ao caminho `wp-content/plugins/wp-file-manager/lib/php/connector.minimal.php` (ou variantes como `connector.php`) partindo de IPs externos sem sessão autenticada de administrador — a Seravo observou em ambiente comprometido POSTs a esse endpoint com user-agent `python-requests/2.24.0`, típico de scripts automatizados, embora o user-agent seja trivialmente falsificável e não deva ser usado como assinatura confiável isoladamente. Outro sinal é a presença de arquivos PHP inesperados dentro de `wp-content/plugins/wp-file-manager/lib/files/`, diretório que normalmente armazena apenas os arquivos gerenciados pelo usuário do File Manager, não scripts executáveis.
Como há PoC público, módulo Metasploit e template Nuclei disponíveis, o tráfego de exploração pode variar significativamente em assinatura (parâmetros `cmd=upload`, `cmd=mkfile`, `cmd=put` no corpo da requisição), e não existe um único padrão de log garantido — organizações devem inspecionar todo acesso ao connector do File Manager anterior à atualização como potencialmente malicioso, dado o histórico de exploração automatizada em massa.