Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!
CVE-2022-1565 — Exploit de execução remota de código autenticado para o plugin WordPress WP All Import <= 3.6.7 (CVE-2022-1565). Envia arquivos arbitrários através de validação insegura de tipo de arquivo em wp_all_import_get_gz.php. | Kitploit
Exploit de execução remota de código autenticado para o plugin WordPress WP All Import <= 3.6.7 (CVE-2022-1565). Envia arquivos arbitrários através de validação insegura de tipo de arquivo em wp_all_import_get_gz.php.
WordPress Plugin WP All Import <= 3.6.7 - Execução Remota de Código (RCE) (Autenticado)
root@kitploit:~
Data: 05 de novembro de 2023
Autor do exploit: Việt HÙng (https://github.com/phanthibichtram12)
Site do fornecedor: https://www.wpallimport.com/
Link do software: https://wordpress.org/plugins/wp-all-import/advanced/ (role para baixo e selecione a versão)
Versão: <= 3.6.7 (testado: 3.6.7)
Testado em: WordPress 6.1 (independente do sistema operacional, pois este exploit NÃO fornece payload)
CVE: CVE-2022-1565
DESCRIÇÃO DA VULNERABILIDADE
O plugin WP All Import é vulnerável a upload arbitrário de arquivos devido à falta de validação de tipo de arquivo por meio do arquivo wp_all_import_get_gz.php nas versões até 3.6.7 inclusive.
Isso permite que atacantes autenticados com nível de administrador ou superior façam upload de arquivos arbitrários para o servidor do site afetado, o que pode levar à execução remota de código.
COMO O EXPLOIT FUNCIONA
1. Preparar o arquivo zip:
crie um arquivo PHP com seu payload (ex: shell reverso)
defina a variável "payload_file_name" com o nome deste arquivo (ex: "shell.php")
crie um arquivo zip com o payload
defina a variável "zip_file_to_upload" com o CAMINHO deste arquivo (ex: "/root/shell.zip")
2. Faça login com uma conta de administrador:
defina a variável "target_url" com a URL base do alvo (NÃO termine a string com barra /)
defina a variável "admin_user" com o nome de usuário da conta de administrador
defina a variável "admin_pass" com a senha da conta de administrador
3. Obtenha o wpnonce usando o método get_wpnonce_upload_file()
na verdade, existem 2 tipos de wpnonce:
o primeiro wpnonce será recuperado pelo método get_wpnonce_edit_settings() dentro da classe PluginSetting.
Este wpnonce nos permite alterar as configurações do plugin (veja passo 4)
o segundo wpnonce será recuperado pelo método get_wpnonce_upload_file() dentro da classe PluginSetting.
Este wpnonce nos permite fazer upload de arquivos
4. Verifique se o modo de segurança do plugin está ativado usando o método check_if_secure_mode_is_enabled() dentro da classe PluginSetting
se o Modo de Segurança estiver ativado, o conteúdo do zip será colocado em uma pasta com nome aleatório.
O exploit desativará o Modo de Segurança.
Ao desativar o Modo de Segurança, o conteúdo do zip será colocado na pasta principal (veja a variável payload_url).
O método chamado para ativar e desativar o Modo de Segurança é set_plugin_secure_mode(set_to_enabled:bool, wpnonce:str)
se o Modo de Segurança NÃO estiver ativado, o exploit fará o upload do arquivo, mas NÃO ativará o Modo de Segurança depois.
5. Faça upload do arquivo usando o método upload_file(wpnonce_upload_file: str)
após o upload, o servidor responderá com HTTP 200 OK, mas isso não significa que o upload foi concluído com sucesso.
A resposta conterá JSON parecido com isto:
{"jsonrpc":"2.0","error":{"code":102,"message":"Por favor, verifique se o arquivo enviado é um arquivo ZIP válido."},"is_valid":false,"id":"identificador"}
Como você pode ver, ele informa que houve um erro com código 102, mas pelos testes que realizei, o upload foi concluído
6. Reative o Modo de Segurança se ele estava ativado usando o método switch_back_to_secure_mode()
7. Ative o payload usando o método activate_payload()
você pode definir o método para ativar o payload.
A razão por trás dessa escolha é que este exploit NÃO fornece nenhum payload.
Como você pode usar um payload personalizado, talvez queira ativá-lo com uma requisição HTTP POST em vez de uma requisição HTTP GET, ou talvez queira passar parâmetros
POR QUE O EXPLOIT DESATIVA O MODO DE SEGURANÇA?
De acordo com o PoC desta vulnerabilidade fornecido pela WPSCAN, podemos recuperar os arquivos enviados acessando a "página de Importações Gerenciadas".
Não sei por quê, mas após enviar qualquer arquivo, não consegui ver o arquivo enviado nessa página (talvez seja necessária a versão Pro?).
Tive que encontrar uma alternativa e consegui explorando esta opção.
Durante os testes, percebi que estava enviando um arquivo XML inválido e era por isso que ele não aparecia na "página de Importações Gerenciadas"
De qualquer forma, esta forma de desativar o modo de segurança é um pouco mais "furtiva" porque o conteúdo enviado não aparece na página de administração.
Se você quiser ver o upload na página de administração, serão necessários mais passos.
ALGUM PROBLEMA AO EXPLORAR?
Para que o exploit seja eficaz, considere o seguinte:
verifique a target_url e as credenciais do administrador
verifique o caminho do arquivo zip e o nome do payload (eles podem ser diferentes)
se estiver testando localmente, tente definir verify_ssl_certificate como False
você pode usar print_response(http_response) para investigar mais