Segurança web

Execução remota de código (RCE)

Definição

A execução remota de código (RCE, Remote Code Execution) é uma falha que permite a um invasor fazer um servidor executar as instruções dele, pela rede, sem ter acesso legítimo. É uma das falhas mais graves, porque muitas vezes leva ao controle completo do site.

Execução remota de código (RCE), Segurança web

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 .php e 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.
Cenário de RCE por upload em cinco etapas: o invasor envia um arquivo .php por um formulário que não verifica nem o tipo nem as permissões, o plugin o salva em wp-content/uploads, o invasor acessa o endereço dele, o PHP executa o código com as permissões do site e o invasor instala um backdoor e uma conta de administrador
O cenário mais comum no WordPress: um arquivo PHP colocado onde ele nunca deveria poder ser executado.

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.
Vídeo (em inglês): “What is Remote Code Execution (RCE)?” (Indusface)

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/uploads no nível do servidor web: essa pasta só deve conter mídia.
  • Adicione define( 'DISALLOW_FILE_EDIT', true ); ao wp-config.php para desativar o editor de arquivos do painel.
  • Mantenha uma versão do PHP com suporte e pergunte à hospedagem como ela configura disable_functions e open_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.

Para saber mais

  • Artigo CVE-2024-4577: a falha do PHP-CGI no Windows explicada
  • Artigo CVE-2024-2961: a falha glibc iconv que mira o PHP
  • Página Verificação de integridade do WordPress

Fontes

  1. MITRE CWE-94: Improper Control of Generation of Code (Code Injection) (link externo, abre em uma nova aba)
  2. OWASP: Code Injection (link externo, abre em uma nova aba)
  3. CVE Record: CVE-2020-25213 (link externo, abre em uma nova aba)
  4. CVE Record: CVE-2024-4577 (link externo, abre em uma nova aba)

Todas as definições

Segurança WordPress, sem ruído

Um e-mail quando importa: novos ataques observados, atualizações do plugin e guias práticos. Sem spam, cancelamento com um clique.

Comece de graça e mude para o Pro quando estiver pronto

A versão gratuita já oculta o WordPress e muda o endereço da página de login. O Pro acrescenta aliases, verificação em duas etapas e monitoramento.