bayu06802/CVE-2026-48908
GitHub: bayu06802/CVE-2026-48908
针对 Joomla SP Page Builder 组件未授权任意文件上传导致 RCE 漏洞(CVE-2026-48908)的自适应概念验证利用工具。
Stars: 0 | Forks: 0
# CVE-2026-48908 — SP Page Builder (Joomla) 未授权 RCE
针对 **CVE-2026-48908** 的概念验证漏洞利用程序。这是由 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`** 来处理上传自定义
图标字体包:
```
index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
```
在受影响的版本中,此任务**无需身份验证且无需有效的防 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,上传的 shell 随即**执行**。
PoC 始终会打包一个有效的图标字体结构(`selection.json`, `style.css`,
`fonts/.ttf`)以便上传被接受,随后再添加 shell。
**自适应机制 — 它会遍历一系列 php 可执行扩展名(从足迹最小的开始),然后是
`.htaccess` 回退机制,并在第一个真正运行代码的位置停止:**
1. **直接单文件上传** — 针对以下扩展名分别上传 `fonts/.`:
`php, php3, php4, php5, php7, pht, phtml, phar, PHP, pHp, Php`。**不使用 `.htaccess`。**
不同的 SP Page Builder 过滤器会拦截不同的集合,而不同的 Apache 配置会执行
不同的扩展名 — 因此这能找到目标允许的任何组合*并*运行。
2. **`fonts/.htaccess` + `fonts/.PHP`(回退机制)** — 仅在所有直接尝试均失败时使用。
投放的 `.htaccess`(`AddType … .PHP`)会在 `AllowOverride` 允许的情况下强制执行大写的 `.PHP`
(这正是 5.4.6 风格的主机所需要的)。
它会在**第一个执行代码的方法**处停止,并打印出成功着陆的方法。所有接受的上传都会被
跟踪,因此 `--cleanup` 会移除**所有**这些文件(多次尝试可能会留下只写目录)。
## 环境要求
```
pip install -r requirements.txt # requests
```
## 使用方法
```
# 确认漏洞并证明代码执行(运行 `id`)
python3 sppb_rce.py https://target.example
# 运行特定命令
python3 sppb_rce.py --url target.example -c "uname -a"
# 交互式伪 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` 提供,可带或不带协议。
### 示例(已脱敏)
```
[*] target : https://target.example
[*] endpoint : index.php?option=com_sppagebuilder&task=asset.uploadCustomIcon
[*] try .php -> rejected by filter
[*] try .php3 -> rejected by filter
...
[*] try .PHP -> uploaded, not executed
[*] try .htaccess+.PHP -> EXECUTED
[+] CODE EXECUTION CONFIRMED via '.htaccess+.PHP' (echo 7*6 -> 42)
[*] running: id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
------------------------------------------------------------
[*] cleanup: done (4 dirs)
```
### 结果(及退出代码)
PoC 始终会告知您关于目标的判定结果:
| 输出 | 含义 | 退出码 |
|---|---|---|
| `CODE EXECUTION CONFIRMED via ''` | **存在漏洞 — 完全的未授权 RCE** | 0 |
| `[~] PARTIALLY VULNERABLE — unauth file-write works, but PHP did NOT execute` | 仅文件写入成功(`AllowOverride None` / PHP 在 `/media` 中被禁用) | 3 |
| `[-] TARGET NOT VULNERABLE — SP Page Builder is patched (6.6.2+)` | 已修补 — 上传现在需要管理员认证 | 1 |
| `[-] TARGET NOT VULNERABLE — every upload was rejected, or SP Page Builder is absent/patched` | 无法利用 / 组件不存在 | 2 |
### 安全特性
- 投放的 Web shell **受每次运行的随机 token 保护**,对于没有该 token 的任何访问均返回
`404` — 它不是向全世界敞开的后门。
- `--cleanup` 会删除其创建的 payload 目录。
- 默认操作是无害的(`id`,算术标记)。
## 修复方案
1. **将 SP Page Builder 升级到 6.6.2 或更高版本**(在上传任务中添加了身份验证、授权和 CSRF 检查)。
这是主要的修复方案。
2. 在 Web 服务器上进行纵深防御:
- 通过 FPM pool 或 `php_admin_flag engine off` 在上传目录(`/media/`, `/images/`, `/tmp`)中禁用 PHP 执行。
- 对这些目录设置 `AllowOverride None`,以防止投放的 `.htaccess` 重新启用处理程序。
- 对上传扩展名使用不区分大小写的**白名单**,切勿使用黑名单。
3. 假设违规审查:在 `media/.../iconfont/` 下查找意外的 `.php`/`.PHP` 文件、新的超级用户
帐户以及被植入的文件管理器。
## 参考
- NVD — [CVE-2026-48908](https://nvd.nist.gov/vuln/detail/CVE-2026-48908)
- CVE.org 记录 — [CVE-2026-48908](https://www.cve.org/CVERecord?id=CVE-2026-48908)
- 技术分析 — [SP Page Builder uploadCustomIcon RCE (mySites.guru)](https://mysites.guru/blog/sp-page-builder-zero-day-uploadcustomicon-rce/)
- 供应商 — [JoomShaper SP Page Builder](https://www.joomshaper.com/page-builder)(在 6.6.2 中修复了安全问题)
- [SP Page Builder — Joomla 扩展目录](https://extensions.joomla.org/extension/sp-page-builder/)
## 关键词
Joomla SP Page Builder exploit · com_sppagebuilder 未授权 RCE · CVE-2026-48908 PoC ·
asset.uploadCustomIcon 任意文件上传 · Joomla 远程代码执行 · 渗透测试漏洞利用脚本。
## 免责声明
本软件仅出于**教育目的和授权的安全测试**而发布 —
例如,您有**书面许可**执行的渗透测试、目标在范围内的漏洞赏金计划、CTF 比赛以及您自己的实验系统。
未经授权访问、修改或破坏计算机系统在大多数司法管辖区都是**违法的**。**您须对自己
的行为负全部和绝对的责任。** 使用、下载或分发此代码即表示您同意:
- 您仅将其用于您**拥有**或获得**明确的、书面许可**进行测试的系统;
- 作者和贡献者对因使用或滥用此代码引起的任何损害、数据丢失、服务中断或法律后果
**不承担任何责任**;
- 本材料按 **“原样” 提供,不提供任何形式的明示或暗示的保证**。
如果您不同意这些条款,请不要使用此软件。与任何公开的漏洞利用程序/PoC 一样,
分享它是出于善意,以帮助防御者检测、理解和修复漏洞;您如何使用它由您自己决定。
## 许可证
MIT — 参见 [LICENSE](LICENSE)。
标签:CISA项目, Joomla, OpenVAS, PHP, PoC, Web安全, 暴力破解, 编程工具, 蓝队分析, 远程代码执行, 逆向工具