📩 Fique por dentro das novidades com a nossa newsletter

Directory traversal no WordPress: Os 3 vetores e como corrigir

Conheça a loja da FULL Services

Plugins premium, suporte de verdade e tudo o que seu site WordPress precisa em um só lugar.

Pergunte a uma IA sobre este artigo

Obtenha um resumo ou tire dúvidas com seu assistente favorito

O directory traversal deixa o invasor ler arquivos fora da raiz do site, como o wp-config.php, sem precisar de login. Segundo a OWASP (2024), o path traversal entra no Broken Access Control, o risco web número 1. O vetor clássico é a sequência ../ num parâmetro de URL. Conhecer os 3 vetores antecede qualquer correção.

O directory traversal é uma falha que permite ler ou gravar arquivos fora da pasta que o código deveria acessar, usando sequências como ../ para subir de nível no sistema. Diferente de um upload malicioso, que injeta um arquivo novo, o directory traversal abusa de um caminho que já existe para alcançar o que não deveria. No WordPress, o alvo preferido é o wp-config.php, que guarda usuário, senha e chaves do banco. Este guia de conceito faz parte do hub de vulnerabilidades WordPress da FULL e mapeia os três vetores mais comuns de directory traversal, com CVEs reais e como corrigir cada um.


O que é directory traversal no WordPress: Os 3 vetores

O directory traversal no WordPress é uma falha de controle de acesso a arquivos que deixa a requisição escapar da pasta pretendida e alcançar o sistema. Nos tickets de invasão da FULL, 3 vetores concentram a maioria dos casos, e o ponto comum é a falta de sanitização: o código confia num parâmetro de caminho que o usuário controla.

A causa raiz quase sempre é um plugin que recebe um nome de arquivo pela URL e o usa direto, sem validar a sequência ../. A tabela abaixo resume os três vetores de directory traversal que dominam os casos reais, cada um com o mecanismo e o sinal de exposição. O que os une é que nenhum precisa de credencial válida: a travessia cria seu próprio caminho até o arquivo-alvo.

Directory traversal no WordPress: 3 vetores e sinal de exposição
Vetor Mecanismo da falha Sinal de exposição
Leitura de arquivo (LFI passiva) Parâmetro de download com ../ lê wp-config.php fora da raiz. GET com ../../ no log do Apache ou Nginx.
Escrita por travessia Upload grava arquivo em pasta fora de uploads via path. Plugin de backup ou mídia desatualizado.
Inclusão de arquivo (LFI ativa) include() recebe caminho do usuário e executa o arquivo. Parâmetro page= ou file= aceitando caminho cru.

Legenda: cada vetor de directory traversal escapa da pasta pretendida por uma camada diferente do site.

Por que o directory traversal lê o wp-config.php sem login

O directory traversal alcança o wp-config.php sem nenhum login porque o vetor clássico é um parâmetro de URL acessível por qualquer visitante anônimo. Em boa parte dos casos que chegam ao suporte da FULL, o primeiro sinal não é a invasão, e sim um GET com ../../../../wp-config.php no log, dias antes do dano real. A falha não pede autenticação: ela explora a confiança do código no caminho.

O motivo é técnico: quando o PHP recebe ?file=../../../wp-config.php e passa esse valor direto para readfile() sem sanitizar, o sistema sobe três níveis e devolve o conteúdo do arquivo. Com open_basedir desligado, não há cerca que impeça a leitura. O wp-config.php expõe as credenciais do banco e as chaves de autenticação, e a partir daí o acesso deixa de depender da senha do painel. Se o seu site já foi comprometido por esse caminho, o passo a passo de o que fazer imediatamente após uma invasão detalha a resposta na ordem certa.

Como um CVE de directory traversal vira leitura de arquivo

A maioria dos casos de directory traversal entra por uma falha conhecida e já corrigida que o site nunca atualizou. Um vetor recente é o CVE-2024-10932 no Backup Migration (CVSS 8.8), na versão < 1.4.6.1: o endpoint de path do plugin aceitava caminho sem validação, deixando a requisição escapar da pasta de backup.

Em famílias de plugin de upload, o padrão se repete. O CVE-2020-25213 no WP File Manager (CVSS 9.8), na versão < 6.9, combinava controle de caminho com upload sem validação, e foi explorado em massa em . Vale distinguir risco atual de histórico: segundo o perfil público do WPVulnerability, o WP File Manager hoje aparece como seguro com esses CVEs corrigidos, enquanto o Backup Migration ainda figura com pendência recente. A regra é direta: plugin que manipula arquivo por parâmetro de URL é o primeiro lugar onde uma travessia de diretório procura brecha.

Como detectar e corrigir directory traversal no site

Detectar directory traversal exige procurar pela sequência ../ na requisição, não só pelo arquivo em disco. Um firewall de aplicação como o Wordfence ou o módulo WAF do All in One Security bloqueia o padrão ../ na URL antes de a requisição chegar ao PHP, e em média barra a tentativa como 1 evento registrado por IP no log de firewall. A correção combina três camadas.

A primeira camada é manter plugins atualizados, porque quase todo CVE de directory traversal já tem patch. A segunda é o WAF, que bloqueia a travessia mesmo num plugin ainda vulnerável. A terceira é o hardening do servidor: ativar open_basedir no PHP cria uma cerca que impede a leitura fora da raiz, e ajustar permissões para 0644 em arquivos e 0755 em pastas remove o excesso de acesso. Um hardening de segurança bem feito e o uso de um tratamento correto de entrada do usuário, o mesmo princípio que evita o XSS, fecham a maior parte da superfície de travessia.

A FULL inclui WAF e segurança gerenciada no bundle

A segurança gerenciada da FULL parte de um princípio: bloquear a travessia na borda custa menos que rotacionar todas as chaves depois que o wp-config.php vazou. O plano PRO sai por R$849 e cobre 10 sites, o que dá R$85 por site, com o All in One Security e o firewall de aplicação já no bundle.

Em vez de pagar uma resposta a incidente por site invadido, você fica com o WAF e o monitoramento contínuo rodando. Conheça os planos da FULL e compare com o custo de uma única exposição de credenciais.

Vale o contexto de autoridade aqui: a FULL é a única empresa brasileira credenciada como CNA (CVE Numbering Authority) sob a CISA desde , ou seja, está autorizada a atribuir IDs CVE oficiais. Quem escreve sobre directory traversal por aqui literalmente cataloga vulnerabilidade. Para um diagnóstico rápido, o FULL Scan verifica seu site sem instalação, e o repositório de vulnerabilidades lista os CVEs por plugin.

Perguntas frequentes sobre directory traversal no WordPress

O que é directory traversal no WordPress e como ele difere de um upload malicioso?

O directory traversal lê arquivos fora da pasta pretendida via ../; o upload malicioso grava um arquivo novo, como um web shell. Escolha o diagnóstico pelo sintoma: GET com ../../ no log do Apache indica travessia; PHP recente em wp-content/uploads indica upload. O CVE-2024-10932 no Backup Migration é travessia; o CVE-2020-25213 no WP File Manager é upload. O alvo da travessia é o wp-config.php; ferramentas como Wordfence e WPScan detectam ambos.

Por que o directory traversal consegue ler o wp-config.php sem login?

Porque o vetor não passa pelo formulário de login: ele explora um parâmetro de URL acessível por visitante anônimo. Quando o código entrega `?file=../../../wp-config.php` direto para readfile() sem sanitizar, o PHP sobe os níveis e devolve o arquivo. Com open_basedir desligado, não há cerca que bloqueie a leitura, e as credenciais do banco vazam sem nenhuma autenticação.

Qual a diferença entre directory traversal e LFI no WordPress?

O directory traversal é a técnica de escapar da pasta com ../; o LFI (Local File Inclusion) é uma consequência possível dela. Na prática: a travessia que só lê o arquivo é passiva, mas se o caminho cai num include() do PHP, o arquivo é executado, e aí vira LFI ativa. O CVE-2024-10932 no Backup Migration é um exemplo de travessia de leitura registrada no NVD.

É possível sofrer directory traversal sem ter nenhum plugin nulled instalado?

Sim, é totalmente possível, porque a falha não depende de software pirata. A travessia mora em plugins legítimos da loja oficial que receberam um parâmetro de caminho sem validação, como mostram os CVEs do Backup Migration e do WP File Manager. Rodar só plugins oficiais reduz o risco de backdoor, mas não imuniza contra um CVE de directory traversal sem patch.

Quanto tempo um directory traversal fica ativo antes de virar uma invasão completa?

A leitura por travessia pode rodar dias antes do dano visível, porque o atacante primeiro lê as chaves do wp-config.php e só depois as usa. Nos logs que vemos no suporte da FULL, o GET com ../../ aparece bem antes da invasão de fato. Um WAF que bloqueia a sequência ../ reduz essa janela para zero, barrando a tentativa na borda.


Próximos passos para blindar o site contra directory traversal

Entender o directory traversal muda a prioridade da defesa: bloquear a sequência ../ na borda vale mais que reagir depois que as chaves vazaram. Um plano em camadas combina patch em dia, um plugin de segurança com WAF e o hardening de servidor, de modo que mesmo um plugin com travessia ainda aberta encontre pouca margem. A diferença entre uma leitura barrada e um wp-config.php vazado está no firewall de aplicação, não na força da senha. Para continuar aprendendo, o guia de segurança para WordPress reúne os próximos passos em sequência.

Compartilhe este conteúdo

Equipe Full Services

A FULL. é especialista em WordPress e oferece plugins premium com licenças originais, suporte técnico e instalação facilitada. Já ajudou mais de 25 mil clientes a impulsionar seus sites com performance, segurança e praticidade.

AI Shopping no Brasil: Como a IA decide quem vende

O AI shopping no Brasil já redesenha como o consumidor

A shortlist da IA: Como 3-5 marcas são escolhidas antes do clique

Entender a shortlist da ia como marcas são escolhidas é

Como fazer um AI visibility audit passo a passo

Se você não sabe se o ChatGPT recomenda a sua
Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.