
Exploração e análise do CVE-2023-3460, uma escalada de privilégios crítica no plugin Ultimate Member para WordPress, com ambiente de reprodução e orientações de mitigação.
| CVE ID | Pontuação CVSS | Descoberta | Plugin Afetado | Tipo de Vulnerabilidade |
|---|---|---|---|---|
| CVE-2023-3460 | 07/04/2023 | Ultimate Member | Acesso de Administrador Não Autorizado |
Este estudo centra-se na CVE¹-2023-3460, uma vulnerabilidade crítica que afeta o plugin "Ultimate Member" do WordPress, permitindo uma escalada de privilégios não autorizada. Este plugin é amplamente utilizado para a gestão de perfis em sites WordPress. Esta vulnerabilidade apresenta um risco major porque permite a um atacante obter direitos de administrador e, portanto, o controlo total do site. É por isso que esta falha foi classificada como crítica e avaliada em 9.1 na escala CVSS pelo NIST².
A CVE-2023-3460 explora uma falha na gestão de funções e permissões pelo plugin. No WordPress, a função WP_Capabilities³ é utilizada para gerir as funções e permissões dos utilizadores. Esta função permite aos administradores definir capacidades específicas para cada função de utilizador. No entanto, uma má utilização desta função pode conduzir a vulnerabilidades de elevação de privilégios.
No caso do Ultimate Member, a vulnerabilidade permite a um atacante contornar a verificação das capacidades WP e obter um acesso de nível administrador ao site. O plugin funciona utilizando uma lista predefinida de chaves de metadados de utilizador que não deveriam ser manipuladas pelos utilizadores. No entanto, esta abordagem de segurança, baseada em listas de bloqueio, é frequentemente insuficiente, pois deixa possibilidades de contorno.
O WordPress gere as funções e permissões dos utilizadores através de uma estrutura chamada wp_capabilities. Esta estrutura é uma representação serializada das diferentes funções e permissões concedidas aos utilizadores. Por exemplo, um administrador terá um conjunto de capacidades diferente de um editor ou de um colaborador. Estas capacidades são armazenadas na base de dados do WordPress sob a forma de arrays serializados na tabela wp_usermeta.
A falha CVE-2023-3460 tem origem na implementação da gestão de funções e permissões pelo Ultimate Member. O plugin opera utilizando uma lista predefinida de chaves de metadados de utilizador que os utilizadores não deveriam manipular. Esta lista é utilizada para verificar se os utilizadores tentam registar estas chaves durante a criação de uma conta. Esta abordagem é um anti-padrão de segurança comum, onde o bloqueio de entradas conhecidas como nocivas (listas de bloqueio) pode parecer intuitivo, mas revela-se mais complexo do que o esperado e deixa frequentemente espaço para contornos de segurança.
Aqui, o Ultimate Member utiliza uma verificação insuficiente dos metadados submetidos durante o registo de utilizadores. O plugin utiliza uma função chamada is_metakey_banned para verificar se os metadados submetidos pelo utilizador são permitidos. Esta função verifica se os metadados submetidos estão presentes na lista de metadados banidos. Se estiverem, a função retorna true e o registo do utilizador é bloqueado. Caso contrário, a função retorna false e o registo do utilizador é permitido.
No entanto, o WordPress aceita alguns caracteres acentuados como caracteres por defeito. Se um utilizador submeter metadados com caracteres acentuados, a função is_metakey_banned não os detetará e o registo do utilizador será permitido.
O plugin Ultimate Member é amplamente utilizado em diversos ambientes, desde pequenos blogs pessoais a grandes sites de comércio eletrónico. Nenhuma premissa específica pode ser feita sobre as competências em segurança informática dos utilizadores finais ou dos administradores dos sites.
Os servidores que alojam os sites WordPress estão geralmente localizados em centros de dados seguros. Para sites pessoais, a segurança física depende do ambiente individual do utilizador.
Assume-se que o plugin Ultimate Member está instalado e configurado corretamente de acordo com as instruções oficiais. O site WordPress é suposto ser mantido atualizado, com medidas de segurança básicas em vigor.
7.5 As funções de segurança
Enquanto administrador, eis medidas concretas que podem ser tomadas para mitigar os riscos associados a esta vulnerabilidade.
Validação das Entradas do Utilizador: Implementar validações no lado do servidor para verificar todas as entradas do utilizador, especialmente aquelas que modificam metadados como wp_capabilities. Utilizar expressões regulares ou listas de validação (whitelists) em vez de listas de bloqueio para controlar as entradas.
CAPTCHA e Limites de Taxa: Integrar CAPTCHAs e limites de taxa nos formulários de registo para prevenir ataques automatizados. Verificações no Lado do Cliente: Embora as validações no lado do cliente não sejam suficientes por si só, podem ajudar a prevenir ataques automatizados e a melhorar a experiência do utilizador.
Monitorização dos Logs: Implementar um sistema de monitorização de logs para detetar qualquer modificação suspeita das funções de utilizador ou tentativas de injeção de metadados. Isto pode ser feito utilizando ferramentas de análise de logs.
Firewall de Aplicação Web (WAF): Configurar um WAF⁴ para bloquear ataques conhecidos e desconhecidos, incluindo ataques por injeção de código malicioso. Sistemas de Deteção de Intrusão (IDS/IPS)⁵: Implementar um IDS/IPS para detetar tentativas de exploração da vulnerabilidade.
Revisão das Funções de Utilizador: Examinar regularmente as funções atribuídas aos utilizadores para detetar qualquer elevação de privilégios anormal. Restrição de Permissões: Limitar as permissões concedidas por defeito aos novos utilizadores e exigir validação administrativa para a atribuição de funções elevadas, seguindo o princípio do menor privilégio. Ver detalhes sobre este princípio aqui.
Aplicação Rápida das Atualizações: Fazer atualizações de segurança regulares para os plugins e para o próprio WordPress.
Formar os programadores nas boas práticas de segurança mencionadas anteriormente e sensibilizá-los para os riscos / impactos de uma má implementação.
Um Makefile está disponível para o ajudar a lançar a exploração da falha. Pode utilizá-lo da seguinte forma:
make up para lançar o WordPress com todas as instalações necessárias. Após um tempo de espera, isto iniciará um servidor WordPress, configurá-lo-á e instalará a versão 2.6.5 do plugin Ultimate Member.
Ser-lhe-á então possível ligar-se ao WordPress na página Login com as credenciais admin:password. Ao ir ao separador Users, poderá ver
que apenas o utilizador admin está presente.

Nota: se tiver docker-compose e não docker compose, pode modificar o Makefile em conformidade (variável DOCKER_COMPOSE= docker-compose).
Depois, pode lançar a exploração da falha:
make exploit
Poderá então ligar-se ao WordPress em Login com as credenciais fornecidas pelo exploit e observar no separador Users que um novo utilizador foi criado com a função Administrator.

make down para parar o servidor WordPress e eliminar os dados.
make exploit executa o script exploit.py. Este script atua em várias etapas:
Detalhes Técnicos do Exploit1. Verificação da Vulnerabilidade: Antes de proceder à exploração, o script verifica se a versão do plugin Ultimate Member instalada no site alvo é vulnerável, ou seja, inferior à versão 2.6.7.
2. Recuperação do Nonce de Segurança: O script recupera um nonce de segurança³ da página de registo do site alvo. Este nonce é necessário para que o pedido de registo seja aceite pelo WordPress. O nonce é recuperado analisando o código HTML da página de registo.
3. Exploração da Vulnerabilidade: O script submete então um pedido POST à página de registo, incluindo um parâmetro manipulado (wp_càpabilities[administrator]=1). Este parâmetro utiliza um caractere acentuado (à) para contornar os controlos de segurança do plugin e serializar incorretamente os dados, atribuindo assim a função de administrador ao novo utilizador criado.
4. Confirmação do Exploit: Após o envio do pedido, o script verifica se a operação foi bem-sucedida analisando a resposta do servidor.
| Ameaças | B1 (Confidencialidade dos dados do utilizador) | B2 (Integridade do site Web) | B3 (Integridade do plugin Ultimate Member) |
|---|
| M1 Acesso não autorizado | X | X | X |
| M2 Injeção de código malicioso | X | X | |
| M3 Fuga de dados | X | ||
| M4 Deterioração da reputação | X |
| Nome | Link |
|---|
| NIST CVE-2023-3460 | https://nvd.nist.gov/vuln/detail/CVE-2023-3460 |
| Ultimate Member Github | https://github.com/ultimatemember/ultimatemember |
| Versão do pacote utilizado para a exploração 2.6.5 | https://wordpress.org/plugins/ultimate-member/advanced/ |
| Patch do exploit | https://github.com/ultimatemember/ultimatemember/commit/fae47c6065ce07e9a8b44501002fa5b4f16d2456 |
| Review do exploit | https://thesecmaster.com/how-to-fix-cve-2023-3460-a-privilege-escalation-vulnerability-in-ultimate-member-wordpress-plugin/ |
| OWASP Top 10 Application Security Risks | https://owasp.org/www-project-top-ten/ |