Full Path Disclosure (FPD) no WordPress é muito comum. É importante você tomar conhecimento sobre essa vulnerabilidade e assim evitá-la para manter seu WordPress Seguro.
Além da falta de conhecimento a respeito por parte dos desenvolvedores, é comum uma discussão se FPD é um erro de código ou configuração.
A vulnerabilidade Full Path Disclosure, quando ocorrida, expõe o caminho completo de um determinado arquivo e o usuário em seu servidor.
Essas duas informações facilitam a vida de um atacante. Primeiro ele saberá onde os arquivos estão e suas tentativas serão direcionadas. Segundo ele, poderá realizar um ataque de força bruta e ganhar acesso ao servidor.
Como dica de segurança para WordPress considere evitar essa vulnerabilidade em seus sites.
É melhor realizar algumas tratativas de segurança do que continuar na discussão sobre quem causa a vulnerabilidade de FPD: o código ou a configuração do servidor.
A vulnerabilidade Full Path Disclosure no core do WordPress
- http://localhost/wordpress/wp-includes/ms-settings.php
- http://localhost/wordpress/wp-includes/rss-functions.php
- http://localhost/wordpress/wp-includes/rss.php
- http://localhost/wordpress/wp-includes/template-loader.php
A lista acima é um exemplo de arquivos do core do WordPress que, ao serem acessados diretamente, ocasionam a vulnerabilidade Full Path Disclosure.
Há vários outros arquivos que contribuem para esta situação. Observe nas imagens abaixo as informações exibidas na tela ao acessarmos diretamente os arquivos /wp-includes/ms-settings.php e /wp-includes/rss-functions.php, por exemplo.
Como proteger o core do WordPress contra a FPD
É importante compreender que todos os arquivos do WordPress que residem na pasta /wp-includes/ não devem ser acessados diretamente e, quando isso acontece, eles não tem a disposição algumas funções, variáveis e constantes que precisam para realizarem seus trabalhos.
Na falta desses elementos erros fatais em PHP acontecem, paralisam a execução do script e printam a mensagem relacionada expondo informações do servidor.
Faça uso do código abaixo em seu arquivo .htaccess, para quem utiliza o Apache como servidor web, para que os arquivos PHP em /wp-includes/ não sejam acessados diretamente.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
A vulnerabilidade Full Path Disclosure em plugins e temas
Assim como os arquivos do core do WordPress podem ser acessados diretamente, os arquivos de plugins e temas também podem.
É importante que os desenvolvedores desenvolvam suas soluções livres de FPD e que não fiquem na dependência de configurações do ambiente para não exibir erros.
Desenvolva plugins e temas WordPress livres da Vulnerabilidade Full Path Disclosure.
Tweet
Considere fazer uso do código abaixo em todos os arquivos do seu plugin ou tema. Ele verificará se o ambiente do WordPress está disponível e, caso não esteja, o script será paralisado.
<?php if ( !function_exists( 'add_action' ) ) exit; ?>
Código ou configuração: qual o verdadeiro vilão?
Aprofundar a discussão considero um gasto de energia para a tentativa de encontrar um culpado, se livrar da responsabilidade e postergar, ou deixar pra lá, a vulnerabilidade Full Path Disclosure em sua instalação WordPress.
O time de segurança do WordPress considera o assunto como um problema de configuração do servidor, afirmando que erros não devem ser exibidos em ambiente de produção.
Concordo, mas acredito que o software deve caminhar para uma direção com menos, ou nenhuma, vulnerabilidade em seus códigos, independentemente do seu tipo e grau.
Portanto, considere fazer uso da diretiva demonstrada no arquivo .htaccess para proteger os arquivos do core do WordPress.
Desenvolva seus plugins e temas com o assunto em mente e o evite com o código demonstrado, além de configurar o sistema de debug da plataforma para não exibir os erros na tela assim como definir as diretivas do PHP para esse cenário.
Com essas práticas ficaremos livres das vulnerabilidades de Full Path Disclosure ou FPD.