
Upload arbitrário de ficheiros sem autenticação -> RCE no WPLP Cookie Consent (gdpr-cookie-consent) <= 4.4.1 - write-up técnico e PoC
Prova de conceito e análise técnica para CVE-2026-75865, um upload arbitrário de arquivos não autenticado que leva à execução remota de código no plugin WPLP Cookie Consent – Cookie Banner & Consent Management for GDPR, CCPA & Google Consent Mode para WordPress (slug gdpr-cookie-consent), afetando todas as versões até e incluindo 4.4.1.
| Fatos-chave |
|---|
| CVE | CVE-2026-75865 |
| Severidade | Crítica — CVSS 3.1 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Fraquezas | CWE-862 (Autorização Ausente) + CWE-434 (Upload Irrestrito de Arquivo com Tipo Perigoso) |
| Versões afetadas | gdpr-cookie-consent ≤ 4.4.1 |
| Corrigido em | 4.4.2 |
| Atribuidor do CVE | Wordfence |
| Publicado | 2026-09-01 |
| Descoberto por | Supakiad S. (m3ez) |
Os endpoints REST do "conector" SaaS do plugin autenticam solicitações delegando ao aplicativo SaaS do fornecedor, que valida um JWT Bearer — mas o plugin apenas verifica se o endpoint de validação responde com HTTP 200. Não há vínculo de propriedade entre o JWT e o site de destino, portanto qualquer token válido emitido pelo SaaS (por exemplo, de uma conta gratuita) é aceito.
A função saas_upload_logo() então grava um blob base64 fornecido pelo atacante no diretório público wp-content/uploads/ sob um nome de arquivo fornecido pelo atacante, sem qualquer validação de conteúdo ou extensão. O token de API armazenado (master_key) que também protege o endpoint não é realmente secreto: a própria rota /store-auth do plugin o sobrescreve a partir dos parâmetros da solicitação após a mesma verificação JWT, portanto toda a cadeia — de solicitação não autenticada a um payload executado na raiz web — requer apenas uma URL de destino e uma conta SaaS gratuita.
A vulnerabilidade foi corrigida na versão 4.4.2 removendo o endpoint de upload por completo e reformulando o modelo de confiança do conector (vínculo de propriedade do JWT, hash_equals(), assinatura HMAC de solicitações).
Análise técnica completa: REPORT.md
| Arquivo | Descrição |
|---|---|
REPORT.md | Análise técnica detalhada: análise de causa raiz com código referenciado por linha, comparação da correção 4.4.1 → 4.4.2, cadeia de exploração, detecção e mitigação |
cve_2026_75865.py | Script PoC — verifica uma lista de alvos, detecta sites vulneráveis e executa a cadeia completa (enumeração de admin → sobrescrita da master-key → upload do payload → verificação) com saída em tempo real |
payload.php | Payload benigno mínimo usado por padrão: imprime uma string de marcador e suporta auto-remoção (?delete=1) |
git clone https://github.com/ghostpels/CVE-2026-75865.git
cd CVE-2026-75865
pip install requests # colorama é opcional (logs coloridos)
# 1. Salve um JWT SaaS válido (qualquer conta em app.wplegalpages.com) em jwt.txt
# 2. Crie uma lista de alvos e execute apenas contra sistemas que você está autorizado a testar:
python cve_2026_75865.py -l targets.txt -o vuln.txt -t 40 --marker CVE-2026-75865-POC
As URLs de payload verificadas são anexadas a vuln.txt em tempo real, uma por linha, assim que cada alvo é verificado.
| Opção | Padrão | Descrição |
|---|---|---|
-l, --list | (obrigatório) | Lista de alvos, uma URL por linha |
-o, --output | vuln.txt | URLs de payload verificadas, anexadas em tempo real |
-t, --threads | 40 | Workers concorrentes |
--shell | payload.php | Arquivo de payload ao lado do script; nome enviado = seu nome base |
--filename | — | Nome de arquivo enviado personalizado (sua extensão é tentada primeiro, depois --exts) |
--exts | php,phtml,php5,php74,php7,php3,php4,phar | Extensões alternativas quando a primária é bloqueada |
--jwt-file | jwt.txt | JWT SaaS, primeira linha não vazia |
--marker | — | String que deve aparecer na resposta do payload para ser considerada válida |
--timeout | 15 | Tempo limite por solicitação (segundos) |
-k, --insecure | desativado | Desabilitar verificação TLS |
-v, --verbose | desativado | Mostrar detalhes de erros de conexão |
Este repositório é publicado apenas para fins educacionais e de pesquisa de segurança defensiva. Use a ferramenta exclusivamente contra sistemas que você possui ou para os quais possui permissão escrita explícita para testar. O autor não é responsável por qualquer uso indevido ou dano causado por este material.