针对 CVE-2026-75865 的概念验证与技术分析,该漏洞为 WordPress 插件 WPLP Cookie Consent – Cookie Banner & Consent Management for GDPR, CCPA & Google Consent Mode(slug gdpr-cookie-consent)中一个未经验证的任意文件上传漏洞,可导致远程代码执行,影响所有版本直至并包括 4.4.1。
| 关键信息 | |
|---|---|
| CVE | CVE-2026-75865 |
| 严重性 | 严重 — CVSS 3.1 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| 弱点类型 | CWE-862(缺少授权)+ CWE-434(危险类型文件的不受限上传) |
| 受影响版本 | gdpr-cookie-consent ≤ 4.4.1 |
| 修复版本 | 4.4.2 |
| CVE 分配方 | Wordfence |
| 发布时间 | 2026-09-01 |
| 发现者 | Supakiad S. (m3ez) |
该插件的 SaaS“连接器”REST 端点通过将请求委托给厂商的 SaaS 应用来验证身份,该应用会校验 Bearer JWT——但插件仅检查验证端点是否返回 HTTP 200。JWT 与目标站点之间不存在所有权绑定,因此 SaaS 签发的任何有效令牌(例如来自免费账户的令牌)都会被接受。
随后,saas_upload_logo() 函数会将攻击者提供的 base64 数据块写入公开的 wp-content/uploads/ 目录,文件名同样由攻击者指定,且不进行任何内容或扩展名验证。用于保护该端点的存储 API 令牌(master_key)实际上并非机密:插件自身的 /store-auth 路由在通过相同的 JWT 检查后,会使用请求参数覆盖该令牌。因此,从未经认证的请求到在 Web 根目录中执行载荷的完整攻击链,仅需一个目标 URL 和一个免费 SaaS 账户即可完成。
该漏洞已在 4.4.2 版本中修复,修复方式为完全移除上传端点并重构连接器信任模型(JWT 所有权绑定、hash_equals()、HMAC 请求签名)。
完整技术分析:REPORT.md
| 文件 | 描述 |
|---|---|
REPORT.md | 详细技术分析:带行号引用的根因分析、4.4.1 → 4.4.2 修复对比、利用链、检测与缓解措施 |
cve_2026_75865.py | PoC 脚本 — 扫描目标列表、检测易受攻击站点,并运行完整攻击链(管理员枚举 → master-key 覆盖 → 载荷上传 → 验证),带实时输出 |
payload.php | 默认使用的最小良性载荷:输出标记字符串并支持自删除(?delete=1) |
git clone https://github.com/ghostpels/CVE-2026-75865.git
cd CVE-2026-75865
pip install requests # colorama 为可选依赖(彩色日志)
# 1. 将有效的 SaaS JWT(app.wplegalpages.com 上的任意账户)保存到 jwt.txt
# 2. 创建目标列表,仅对你有权测试的系统运行:
python cve_2026_75865.py -l targets.txt -o vuln.txt -t 40 --marker CVE-2026-75865-POC
验证通过的载荷 URL 会实时追加到 vuln.txt 中,每行一个,每个目标验证完成后立即写入。
本仓库仅用于教育和防御性安全研究。请仅对您拥有或已获得明确书面授权测试的系统使用该工具。作者不对因使用本材料造成的任何滥用或损害负责。
| 选项 | 默认值 | 描述 |
|---|
-l, --list | (必填) | 目标列表,每行一个 URL |
-o, --output | vuln.txt | 验证通过的载荷 URL,实时追加 |
-t, --threads | 40 | 并发工作线程数 |
--shell | payload.php | 脚本同目录下的载荷文件;上传文件名 = 其基本名称 |
--filename | — | 自定义上传文件名(优先尝试其扩展名,然后使用 --exts) |
--exts | php,phtml,php5,php74,php7,php3,php4,phar | 当主要扩展名被阻止时的备用扩展名 |
--jwt-file | jwt.txt | SaaS JWT,取首个非空行 |
--marker | — | 载荷响应中必须出现的字符串,用于判定有效 |
--timeout | 15 | 每次请求的超时时间(秒) |
-k, --insecure | 关闭 | 禁用 TLS 验证 |
-v, --verbose | 关闭 | 显示连接错误详情 |