
CVE-2026-3844 — Upload arbitrário de arquivos não autenticado para RCE no Breeze Cache (WordPress). CVSS 9.8 CRÍTICO. Scanner em massa + injetor automático de shell com multi-threading.
╔════════════════════════════════════════════════════════════╗
║ CVE-2026-3844 ║
║ Breeze Cache <= 2.4.4 Arbitrary File Upload ║
║ Unauthenticated RCE | Authorized Lab Use Only ║
╚════════════════════════════════════════════════════════════╝
CVE-2026-3844 é uma vulnerabilidade de upload arbitrário de arquivos que afeta versões vulneráveis do
plugin WordPress Breeze Cache. Quando a hospedagem local de Gravatars está habilitada, o Breeze pode buscar URLs
de avatar e armazenar o arquivo baixado em um diretório de cache acessível pela web sem validar suficientemente
o tipo de arquivo.
| Campo | Detalhe |
|---|---|
| CVE | CVE-2026-3844 |
| Produto | Breeze Cache, plugin de cache do WordPress |
| Fornecedor | Cloudways |
| Tipo de vulnerabilidade | Upload de arquivo sem restrições |
| CWE | CWE-434 |
| Gravidade | Crítica, CVSS 9.8 |
| Autenticação | Não exigida |
| Versões afetadas | Breeze Cache <= 2.4.4 |
| Versão corrigida | 2.4.5 ou posterior |
| Configuração necessária | Host Files Locally - Gravatars habilitado |
Attacker-controlled avatar URL
|
v
WordPress renders an avatar
|
v
Breeze Gravatar local-cache handler
|
v
download_url() fetches the remote file
|
v
File is saved under wp-content/cache/breeze-extra/gravatars/
|
v
Web-accessible uploaded file
O comportamento vulnerável está no fluxo de cache de Gravatars do Breeze:
src do avatar é aceita pelo manipulador de Gravatars do Breeze.download_url() do WordPress.Área vulnerável relevante:
inc/class-breeze-cache-cronjobs.php
fetch_gravatar_from_remote()
Requisitos do alvo:
<= 2.4.4.Host Files Locally - Gravatars habilitado.Anotações para laboratório local:
git clone https://github.com/AnggaTechI/CVE-2026-3844.git
cd CVE-2026-3844
python3 --version
Nenhum pacote Python de terceiros é necessário. O script utiliza apenas módulos da biblioteca padrão do Python.
Execute a ferramenta:
python3 exploit.py
Exemplo de alvo único:
[*] Target URL or file: http://localhost/lab-wp
Exemplo de lista de alvos:
[*] Target URL or file: targets.txt
[*] Threads (default 30): 30
[*] Auto-inject on vulnerable? [y/N]: n
Exemplo de saída:
[+] Loaded 1 target(s)
[+] Scanning 1 targets with 30 threads
[+] [1/1] localhost/lab-wp -> v2.4.4 gravatar=ON
[+] VULNERABLE: 1/1
[+] Saved: result.txt
O script verifica se o alvo parece ser WordPress, lê os metadados do plugin Breeze e compara a versão detectada com a faixa vulnerável.
O script tenta inferir se a hospedagem local de Gravatars está habilitada verificando referências ao cache
breeze-extra/gravatars do Breeze.
Quando a injeção automática está habilitada, o script tenta verificar a explorabilidade implantando um payload de teste gerado e verificando seu marcador.
Para laboratórios locais, o script pode usar acesso direto ao sistema de arquivos quando consegue identificar a raiz do WordPress. Para testes remotos autorizados, ele inicia um servidor de payload temporário e tenta acionar o fluxo de cache de Gravatars do Breeze.
Dependendo da configuração do WordPress, os arquivos em cache podem aparecer em uma destas formas:
/wp-content/cache/breeze-extra/gravatars/<filename>
/wp-content/cache/breeze-extra/gravatars/1/<filename>
O primeiro caminho é comum em instalações normais de WordPress de site único. O segundo pode aparecer quando um ID de blog/site é incluído.
Use esta lista ao testar em um laboratório WordPress local:
2.4.4 está instalado.Host Files Locally - Gravatars está habilitado.wp-content/cache/breeze-extra/gravatars/.wp-content do WordPress.gravatar=OFF
O plugin pode estar ativo, mas o Breeze ainda não gerou os arquivos de cache local de Gravatars. Visite uma página que renderize avatares ou chame um caminho de renderização de avatares do WordPress no laboratório.
not vulnerable
Causas comuns são versões corrigidas do Breeze, Breeze não instalado, WordPress não detectado na URL,
ou o caminho do alvo sem um subdiretório como /lab-wp.
Injection failed
A configuração de Gravatars pode estar desabilitada, o site pode não renderizar avatares publicamente, o caminho de cache pode não ser gravável, ou a URL do payload remoto pode não ser acessível pelo servidor WordPress.
Este repositório é destinado à educação, reprodução em laboratório local e testes de segurança autorizados. Não o execute contra sistemas que você não possui ou para os quais não tem permissão explícita para testar.