Uma RCE raramente é uma família de falhas por si só: é o resultado mais grave que vários tipos de erro podem alcançar. Quando um invasor consegue fazer o PHP executar o código dele, ele age com as permissões do site: lê o wp-config.php e, portanto, os acessos ao banco de dados, cria contas, instala um backdoor ou usa o servidor para enviar spam. É por isso que as falhas de RCE sem autenticação recebem quase sempre as pontuações mais altas.
Os caminhos que levam a uma RCE
- Injeção de código (CWE-94): o programa monta código a partir de um dado externo, por exemplo com
eval(). Segundo a OWASP, o invasor fica limitado apenas pelo que a linguagem permite fazer. - Injeção de comandos: um dado é passado para um shell do sistema, via
exec(),system()ou equivalente. O invasor desvia comandos existentes em vez de escrever PHP. - Upload de arquivo: um formulário aceita um arquivo
.phpe o guarda em uma pasta acessível pela web. - Inclusão de arquivos e desserialização: dois mecanismos detalhados nas definições de inclusão de arquivos e de desserialização insegura.
- Falhas da linguagem ou do servidor: o próprio PHP, ou uma biblioteca do sistema que ele usa.

Exemplos reais
- WP File Manager, CVE-2020-25213: antes da versão 6.9, o plugin renomeava um arquivo de exemplo da biblioteca elFinder com a extensão
.php, o que permitia que invasores remotos enviassem e executassem código PHP. Pontuação CVSS 3.1: 10. - PHP-CGI no Windows, CVE-2024-4577: uma injeção de argumentos ligada à conversão de caracteres do Windows, no PHP antes das versões 8.1.29, 8.2.20 e 8.3.8 em modo CGI. Nossa explicação dessa falha do PHP-CGI detalha quais servidores foram afetados.
- glibc iconv, CVE-2024-2961: uma falha em uma biblioteca do sistema, que se tornou explorável por meio do PHP, explicada no nosso artigo sobre a falha do iconv.
No WordPress: reduzir o risco e o impacto
- Atualize rapidamente os plugins que lidam com arquivos (gerenciadores de arquivos, formulários com anexos, importação e exportação, backups).
- Impeça a execução de PHP em
wp-content/uploadsno nível do servidor web: essa pasta só deve conter mídia. - Adicione
define( 'DISALLOW_FILE_EDIT', true );aowp-config.phppara desativar o editor de arquivos do painel. - Mantenha uma versão do PHP com suporte e pergunte à hospedagem como ela configura
disable_functionseopen_basedir: o reforço de segurança do PHP limita o que um código injetado consegue fazer. - Um firewall de aplicação web bloqueia parte das tentativas conhecidas, sem substituir a atualização.
O WP Masquerade não bloqueia a exploração de uma RCE: ele não é nem firewall nem antivírus. Depois de uma invasão, porém, a sua verificação de integridade aponta os arquivos do núcleo do WordPress modificados, ausentes ou desconhecidos, um dos lugares onde os invasores escondem o código deles. Os arquivos dos plugins e do tema precisam ser verificados por outros meios.