Vulnerabilidade de plug-in estendido de campos personalizados avançados do WordPress
Um comunicado foi publicado sobre uma vulnerabilidade no popular plugin Advanced Custom Fields: Extended WordPress com classificação 9,8, afetando até 100.000 instalações.
A falha permite que invasores não autenticados se registrem com privilégios de administrador e obtenham controle total de um site e de todas as configurações.
Campos personalizados avançados: plug-in estendido
O plugin Advanced Custom Fields: Extended é um complemento do popular plugin Advanced Custom Fields Pro. Ele é usado por proprietários e desenvolvedores de sites WordPress para ampliar o funcionamento dos campos personalizados, gerenciar formulários front-end, criar páginas de opções, definir tipos de postagem e taxonomias personalizadas e personalizar a experiência de administração do WordPress.
O plugin é amplamente utilizado, com mais de 100.000 instalações ativas, e é comumente implantado em sites que dependem de formulários front-end e fluxos de trabalho avançados de gerenciamento de conteúdo.
Quem pode explorar esta vulnerabilidade
Esta vulnerabilidade pode ser explorada por invasores não autenticados, o que significa que não há barreira de primeiro ter que atingir um nível de permissão mais alto antes de lançar um ataque. Se a versão afetada do plugin estiver presente com uma configuração específica, qualquer pessoa na Internet pode tentar explorar a falha. Esse tipo de exposição aumenta significativamente o risco porque elimina a necessidade de credenciais comprometidas ou acesso interno.
Exposição de escalonamento de privilégios
A vulnerabilidade é uma falha de escalonamento de privilégios causada pela falta de restrições de função durante o registro do usuário.
Especificamente, a função insert_user do plugin não limita quais funções de usuário podem ser atribuídas quando uma nova conta de usuário é criada por qualquer pessoa. Em circunstâncias normais, o WordPress deve controlar estritamente quais funções os usuários podem selecionar ou atribuir durante o registro.
Como esta verificação está faltando, um invasor pode enviar uma solicitação de registro que atribua explicitamente a função de administrador à nova conta.
Esse problema ocorre apenas quando a configuração do formulário do site mapeia um campo personalizado diretamente para o campo de função do WordPress. Quando essa condição for atendida, o plugin aceita o valor da função fornecido sem verificar se é seguro ou permitido.
A falha parece ser devido à validação insuficiente do lado do servidor do campo “Escolhas” do formulário. O plugin parece ter dependido do formulário HTML para restringir quais funções um usuário poderia selecionar. Por exemplo, o desenvolvedor pode criar um formulário de inscrição de usuário com apenas a função de “assinante” como opção. Mas não houve verificação no back-end para verificar se a função de usuário com a qual o assinante estava se inscrevendo correspondia às funções de usuário às quais o formulário deveria estar limitado.
O que provavelmente estava acontecendo é que um invasor não autenticado poderia inspecionar o HTML do formulário, ver o campo responsável pela função do usuário e interceptar a solicitação HTTP para que, por exemplo, em vez de enviar role=subscriber, o invasor pudesse alterar o valor para role=administrator. O código responsável pela ação insert_user pegou essa entrada e a passou diretamente para as funções de criação de usuários do WordPress. Não verificou se “administrador” era realmente uma das opções permitidas na lista “Opções” do campo.
O Changelog do plugin lista a seguinte entrada como um dos patches do plugin:
“Validação forçada de campos de front-end em relação às respectivas configurações de “Escolhas”.
Essa entrada no changelog significa que o plugin agora verifica ativamente os envios de formulários front-end para garantir que o valor enviado corresponda às “Escolhas” definidas no campo, em vez de confiar em qualquer valor postado.
Há também esta entrada no changelog:
“Módulo: Formulários – Adicionada medida de segurança para formulários permitindo seleção de função de usuário”
Esta entrada significa que o plug-in adicionou proteções do lado do servidor para evitar abusos quando um formulário front-end tem permissão para definir ou selecionar uma função de usuário do WordPress.
No geral, os patches do plug-in adicionaram controles de validação mais fortes para formulários front-end e os tornaram mais configuráveis.
O que os invasores podem ganhar
Se explorado com sucesso, o invasor obtém acesso de administrador ao site WordPress.
Esse nível de acesso permite que os invasores:
- Instale ou modifique plug-ins e temas
- Injetar código malicioso
- Crie contas de administrador backdoor
- Roubar ou manipular dados do site
- Redirecione visitantes ou distribua malware
Obter acesso de administrador é uma aquisição completa do site.
O comunicado do Wordfence descreve o problema da seguinte forma:
“O plugin Advanced Custom Fields: Extended para WordPress é vulnerável ao Privilege Escalation em todas as versões até 0.9.2.1, inclusive. Isso ocorre porque a função ‘insert_user’ não restringe as funções com as quais um usuário pode se registrar. Isso possibilita que invasores não autenticados forneçam a função de ‘administrador’ durante o registro e obtenham acesso de administrador ao site.”
Conforme descreve o Wordfence, o plug-in confia na entrada fornecida pelo usuário para funções de conta quando não deveria. Essa confiança permite que os invasores contornem as proteções normais do WordPress e concedam a si próprios o nível de permissão mais alto possível.
O Wordfence também relata ter bloqueado tentativas de exploração ativas direcionadas a esta vulnerabilidade, indicando que os invasores já estão investigando sites em busca de exposição.
Condições necessárias para exploração
A vulnerabilidade não pode ser explorada automaticamente em todos os sites que executam o plugin.
A exploração exige que:
- O site usa um formulário front-end fornecido pelo plugin
- O formulário mapeia um campo personalizado diretamente para a função de usuário do WordPress
Status do patch e o que os proprietários do site devem fazer
A vulnerabilidade afeta todas as versões até 0.9.2.1 inclusive. O problema é resolvido na versão 0.9.2.2, que introduz validação adicional e verificações de segurança em torno de formulários front-end e manipulação de funções de usuário.
A entrada para o changelog oficial do ACF Extended Basic 0.9.2.2:
- Módulo: Formulários – Validação forçada de campos front-end em relação às suas respectivas configurações de “Escolhas”
- Módulo: Formulários – Adicionada medida de segurança para formulários permitindo seleção de função de usuário
- Módulo: Formulários – Adicionado gancho acfe/form/validate_value para validar campos individualmente na frente
- Módulo: Formulários – Adicionado gancho acfe/form/pre_validate_value para ignorar a validação forçada
Os proprietários de sites que usam este plug-in devem atualizar imediatamente para a versão corrigida mais recente. Se a atualização não for possível, o plugin deverá ser desabilitado até que a correção possa ser aplicada.
Dada a gravidade da falha e a falta de autenticação necessária para explorá-la, atrasar a ação deixa os sites afetados expostos a uma aquisição completa.
Imagem em destaque da Shutterstock/Art Furnace
